[英]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.