我在NodeJS应用程序中使用Kafka-Node
来生成和使用消息。我开始等待一个主题的消费者。然后,我启动生产者并将消息发送给Kafka。我的消费者正在将这些消息中的每条消息插入Postgres数据库中。
对于单个消费者,这很好。
当我停止使用者并继续生产时,大约30秒后我会重新启动使用者。我注意到大约有十几条消息已经从原始使用者处插入到数据库中。
我假设当我杀死消费者时,还有一些尚未兑现的补偿,这就是第二位消费者选择它们的原因?
处理这种情况的最佳方法是什么?
var kafka = require('kafka-node');
var utilities = require('./utilities');
var topics = ['test-ingest', 'test-ingest2'];
var groupName = 'test';
var options = {
groupId: groupName,
autoCommit: false,
sessionTimeout: 15000,
fetchMaxBytes: 1024 * 1024,
protocol: ['roundrobin'],
fromOffset: 'latest',
outOfRangeOffset: 'earliest'
};
var consumerGroup = new kafka.ConsumerGroup(options, topics);
// Print the message
consumerGroup.on('message', function (message) {
// Submit our message into postgres - return a promise
utilities.storeRecord(message).then((dbResult) => {
// Commit the offset
consumerGroup.commit((error, data) => {
if (error) {
console.error(error);
} else {
console.log('Commit success: ', data);
}
});
});
});
答案 0 :(得分:0)
我不知道为什么fromOffset: 'latest'
对您不起作用。一个简单的解决方法是使用offset.fetchLatestOffsets
来获取最新的偏移量,然后从该点开始消耗。