npm kafka-node:在最终消息读取后关闭消费者

时间:2015-10-02 19:17:12

标签: javascript node.js apache-kafka

我想编写一个函数,一旦读取了主题中的最后一条消息就会调用回调。

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();
    });
  });
}

这可能与当前的库有关吗?我不想让消费者开放接收新消息。

2 个答案:

答案 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..");
          });
        }
 });