UNPKG

prisme-flow

Version:

prisme platform flow engine

126 lines (109 loc) 3.22 kB
/** * Created by prisme.io on 09/06/2017. */ module.exports = function (RED) { /* * Kafka Producer * Parameters: - topics - zkquorum(example: zkquorum = “[host]:2181") */ function kafkaNode (config) { RED.nodes.createNode(this, config) var topic = config.topic var clusterZookeeper = config.zkquorum var debug = (config.debug == 'debug') var node = this var kafka = require('kafka-node') var HighLevelProducer = kafka.HighLevelProducer var Client = kafka.Client var topics = config.topics var client = new Client(clusterZookeeper) try { this.on('input', function (msg) { var payloads = [] // check if multiple topics if (topics.indexOf(',') > -1) { var topicArry = topics.split(',') for (i = 0; i < topicArry.length; i++) { payloads.push({topic: topicArry[i], messages: msg.payload}) } } else { payloads = [{topic: topics, messages: msg.payload}] } producer.send(payloads, function (err, data) { if (err) { node.error(err) } node.log('Message Sent: ' + data) }) }) } catch (e) { node.error(e) } var producer = new HighLevelProducer(client) this.status({fill: 'green', shape: 'dot', text: 'connected to ' + clusterZookeeper}) } RED.nodes.registerType('kafka', kafkaNode) /* * Kafka Consumer * Parameters: - topics - groupId - zkquorum(example: zkquorum = “[host]:2181") */ function kafkaInNode (config) { RED.nodes.createNode(this, config) var node = this var kafka = require('kafka-node') var HighLevelConsumer = kafka.HighLevelConsumer var Client = kafka.Client var topics = String(config.topics) var clusterZookeeper = config.zkquorum var groupId = config.groupId var debug = (config.debug == 'debug') var client = new Client(clusterZookeeper) var topicJSONArry = [] // check if multiple topics if (topics.indexOf(',') > -1) { var topicArry = topics.split(',') if (debug) { console.log(topicArry) console.log(topicArry.length) } for (i = 0; i < topicArry.length; i++) { if (debug) { console.log(topicArry[i]) } topicJSONArry.push({topic: topicArry[i]}) } topics = topicJSONArry } else { topics = [{topic: topics}] } var options = { groupId: groupId, autoCommit: config.autoCommit, autoCommitMsgCount: 10 } try { var consumer = new HighLevelConsumer(client, topics, options) this.log('Consumer created...') this.status({fill: 'green', shape: 'dot', text: 'connected to ' + clusterZookeeper}) consumer.on('message', function (message) { if (debug) { console.log(message) node.log(message) } var msg = {payload: message} node.send(msg) }) consumer.on('error', function (err) { console.error(err) }) } catch (e) { node.error(e) } } RED.nodes.registerType('kafka in', kafkaInNode) }