有一个基本的例子就像1个消费者的魅力一样。它接收消息。但是添加一个额外的消费者将被忽略。
let kafka = require('kafka-node');
let client = new kafka.Client();
let producer = new kafka.Producer(client);
let consumer1 = new kafka.Consumer(client,[ {topic: 'topic1', partition: 0}]);
let consumer2 = new kafka.Consumer(client,[ {topic: 'topic2', partition: 0}]);
producer.on('ready', function () {
producer.send([{topic:'topic1', messages: 'topic 1 msg' ], (err,data)=>{
console.log(err,'1 sent');
});
producer.send([{topic:'topic2', messages: 'topic 1 msg'}], (err,data)=>{
console.log(err, '2 sent');
});
});
producer.on('error', function (err) {
console.log('err', err);
})
consumer1.on('message',(message) =>{
console.log(11, message);
});
consumer2.on('message',(message) =>{
console.log(22, message);
})
对于consumer2,事件为'22'的事件永远不会触发。如果我使用命令行工具检查该主题的数据
答案 0 :(得分:4)
您忘记在使用者参数中添加使用者组。在您的情况下,两个消费者都属于一个消费者组(默认情况下称为kafka-node-group
)。拥有一个消费者群体意味着每个消费者群体将传递一次消息。由于您的主题有0个分区,因此只有第一个消费者会处理该消息。
如果要向两个消费者发送相同的消息,则必须有两个消费者组(每个组一个消费者)。您可以按照way:
执行此操作let consumer1 = new kafka.Consumer(client,[ {topic: 'topic1', partition: 0}], {groupId: 'group1'});
let consumer2 = new kafka.Consumer(client,[ {topic: 'topic2', partition: 0}], {groupId: 'group2'});
如果您希望消费者一起处理消息(按分区),则需要增加主题中的分区数。