, так как я настроил это следующим образом: это 2 файла, которые могут работать и требуют только экспресс и kafka-node@3.0.1
// consumer.js
const kafka = require('kafka-node'),
Consumer = kafka.Consumer,
client = new kafka.Client('<IP of kafka server>:2181');
consumer = new Consumer(client,
[{ topic: '<>'}]
);
console.log('listening')
consumer.on('message', function (message) {
console.log(message);
});
consumer.on('error', function (err) {
console.log('Error:',err);
})
consumer.on('offsetOutOfRange', function (err) {
console.log('offsetOutOfRange:',err);
})
Это подключение к зоопарку, поэтому яЯ думаю, что вам понадобится версия 3.0.1 kafka-узла, поэтому при установке вам потребуется
npm install --save kafka-node@3.0.1
для прямого подключения к брокеру, вам, возможно, придется выяснить это самостоятельно.
// producer.js
const express = require('express');
const kafka = require('kafka-node');
const app = express();
const bodyParser = require('body-parser');
app.use(bodyParser.json()); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({ extended: true }));
const { Producer } = kafka;
const client = new kafka.Client('<IP of kafka server>:2181');
const producer = new Producer(client);
producer.on('ready', () => {
console.log('Producer is ready');
});
producer.on('error', err => {
console.log('Producer is in error state');
console.log(err);
});
app.post('/kafkaproducer', (req, res) => {
const sentMessage = JSON.stringify(req.body.message);
const payloads = [
{ topic: req.body.topic, messages: sentMessage, partition: 0 },
];
producer.send(payloads, (err, data) => {
if (data) {
res.json(data);
}
if (err) {
res.send(err);
}
});
});
app.get('/',function(req,res){
res.json({greeting:'Kafka Producer'})
});
app.listen(5001,function(){
console.log('Kafka producer running at 5001')
})
вы можете использовать почтальона для отправки http-запроса на http://localhost:5001/kafkaproducer в следующем формате
{
topic: '<TOPIC YOU WANT>',
messages: '<Can be any format you want even a json but i would advise just
testing with a basic string at first>'
}
, тогда потребитель получит сообщение, но убедитесь, что тема имеетбыл создан на сервере kafka, и у вас есть правильная тема для вашего потребителя.
в примечании, если вы использовали экземпляр EC2, вы могли бы объединить их
const express = require('express');
const kafka = require('kafka-node');
const app = express();
const bodyParser = require('body-parser');
app.use(bodyParser.json()); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({ extended: true }));
const { Producer, Consumer } = kafka;
const client = new kafka.Client('13.56.240.35:2181');
const producer = new Producer(client);
consumer = new Consumer(client,
[{ topic: 'memes-to-mturk'}]
);
producer.on('ready', () => {
console.log('Producer is ready');
});
producer.on('error', err => {
console.log('Producer is in error state');
console.log(err);
});
consumer.on('message', function (message) {
console.log(message);
});
consumer.on('error', function (err) {
console.log('Error:',err);
})
app.get('/',function(req,res){
res.json({greeting:'Kafka Producer'})
});
app.post('/kafkaproducer', (req, res) => {
const sentMessage = JSON.stringify(req.body.message);
console.log(sentMessage);
const payloads = [
{ topic: req.body.topic, messages: sentMessage, partition: 0 },
];
producer.send(payloads, (err, data) => {
if (data) {
res.json(data);
}
if (err) {
res.send(err);
}
});
});
app.listen(5002,function(){
console.log('Kafka producer running at 5001')
})