繁体   English   中英

Kafka Consumer Group:仅阅读新消息

[英]Kafka Consumer Group: read new messages only

我正在使用kafka-node ConsumerGroup从Kafka中读取消息。 我想从该主题中读取新消息,即不是所有以前未使用的消息,而是仅在创建ConsumerGroup后到达的消息。

仅当给定的groupId没有存储的偏移量时, fromOffset: 'latest'选项fromOffset: 'latest' 我可以通过在每次创建ConsumerGroup时创建一个新的groupId来使用它,但是我想避免这种方法,因为这会在kafka服务器上创建大量的groupId和存储的偏移量。

我还尝试将偏移量手动设置为-1如下所示:

offset = new kafka.Offset(consumer.client);
offset.commit(groupId, [{ topic: topic, partition: 0, offset: -1 }],
  function (err, data) {
    logger.debug("tried to set offset: ", data);

    if (err) logger.error("error", err);

  })
);

这将返回错误代码0(应该成功),但是ConsumerGroup随后会收到旧消息。

卡夫卡版本:0.10.0卡夫卡节点:1.6.2

commit(groupId, payloads, cb)

offset.commit的第一个参数应该是groupId,而不是clientId。

您应该将消费者的组名传递给它。

使用以下选项启动kafka ConsumerGroup:

 autoCommit: false,   
 fromOffset: 'latest'

创建一个ConsumerGroup,它将永远不会向Kafka提交偏移(除非您手动进行,这是不需要的)。 因此,启动时它将始终选择“最新”选项。

对于所有注意到,即使将'autoCommit'设置为'false'的人,都进行了一次小小的更新,上述解决方案仍然无法正常工作,并且偏移量仍存储在组中:请确保在选项对象中设置其他标志: commitOffsetsOnFirstJoin:false 如果未设置标志,则偏移量将按组存储,并且一旦第二次启动,它将获得所有从该偏移量开始的消息

我希望这可以节省很多时间;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM