const kafka = require("kafka-node"); const uuid = require("uuid"); const client = new kafka.Client("localhost:2181", "my-client-id", { sessionTimeout: 300, spinDelay: 100, retries: 2 }); client.on('ready', function (){ console.log('producer client ready'); }) client.on('error', function (err){ console.log('client error: ' + err); }) const producer = new kafka.HighLevelProducer(client); producer.on("ready", function() { console.log("Kafka Producer is connected and ready."); /* KafkaService.sendRecord({ namespace: 'b', room: 'c', channel: 'c', data: 'd' }, function (err, data) { console.log('incallback') console.log(err, data) producer.close(); process.exit() }); */ }); // For this demo we just log producer errors to the console. producer.on("error", function(error) { console.error(error); }); const KafkaService = { sendRecord: ({ namespace, room, channel, data }, callback = () => {}) => { if (!namespace) { //return callback(new Error(`A namespace must be provided.`)); } const event = { id: uuid.v4(), timestamp: Date.now(), namespace: namespace, room: room, channel: channel, data: data }; const buffer = new Buffer.from(JSON.stringify(event)); // Create a new payload const record = [ { topic: "tcp.realtime", messages: buffer, attributes: 1 /* Use GZip compression for the payload */ } ]; //Send record to Kafka and log result/error producer.send(record, function (err, data) { //console.log(err, data); }); } }; module.exports = KafkaService;