我想编写一个函数,一旦读取了主题中的最后一条消息就会调用回调。
function getCurrentMessages(kafka, topic, cb_done){
// Start consuming from the beginning
var consumer = new kafka.Consumer(new kafka.Client(), [{topic: topic, offset: 0}], {fromOffset: true});
consumer.on('message', function(msg){
// Do something with msg
});
consumer.on('final-message-received', function(){
consumer.close(function(){
cb_done();
});
});
}
这可能与当前的库有关吗?我不想让消费者开放接收新消息。
答案 0 :(得分:2)
我认为您可以使用偏移帮助来完成此操作。您可以轻松获取消费者方面的事件偏移信息
KAFKA为您提供以下提到的抵消:
<强> 1。早期偏移
2.当前偏移和
3.最新抵消
您只需要获取Kafka中写入的最后一条消息的最新值或偏移量,并在消耗事件时将其与当前偏移量进行比较,在这种情况下,当您使用来自kafka的最后一条消息时,您将获得等于当前偏移量的最新偏移量。
您可以编写IF条件,以便检查
IF(current_offset == latest_offset)
{
打破你想要的流动或动作;
}
如果它不适合您或需要任何进一步的信息,请告诉我。
答案 1 :(得分:0)
您可以尝试这样的事情:
consumer.on('message', function (message) {
console.log("received message", message);
if(message.offset == (message.highWaterOffset -1)){
consumer.close(true, function(err, message) {
console.log("consumer has been closed..");
});
}
});