Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 卡夫卡消费群体:仅阅读新邮件_Node.js_Apache Kafka - Fatal编程技术网

Node.js 卡夫卡消费群体:仅阅读新邮件

Node.js 卡夫卡消费群体:仅阅读新邮件,node.js,apache-kafka,Node.js,Apache Kafka,我正在使用kafka节点ConsumerGroup来读取来自kafka的消息。我想阅读主题中的新消息,即不是所有以前未使用的消息,而是仅在创建ConsumerGroup之后到达的消息 只有当给定的groupId没有存储偏移量时,选项fromOffset:'latest'才会生效。我可以通过每次创建ConsumerGroup时创建一个新的groupId来使用它,但是我希望避免这种方法,因为这样会在kafka服务器上创建大量groupId和存储的偏移量 我还尝试手动将偏移设置为-1,如下所示: of

我正在使用
kafka节点
ConsumerGroup来读取来自kafka的消息。我想阅读主题中的新消息,即不是所有以前未使用的消息,而是仅在创建ConsumerGroup之后到达的消息

只有当给定的groupId没有存储偏移量时,选项
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)
commit的第一个参数应该是groupId,而不是clientId


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

使用以下选项启动卡夫卡消费者组:

 autoCommit: false,   
 fromOffset: 'latest'

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

对于所有注意到即使将“自动提交”设置为“错误”,上述解决方案也不起作用,并且偏移量仍然存储在组中的人来说,这只是一个小的更新:请确保设置其他标志: committeofsetsonfirstjoin:false 在选项对象中。如果未设置该标志,则偏移量将按组存储,并且一旦第二次启动,它将获取从该偏移量开始的所有消息


我希望这将有助于节省(大量)时间;)

如果这是一个新组,则没有存储的偏移量。如果要重置现有组的偏移,可以使用“重置”命令行工具。创建新组是我目前选择的解决方法。但是,我想重置现有组的偏移量,我不确定这是否可以通过kafka节点api而不是单独的工具实现。如果我正确理解您的问题,您能否将
enable.auto.commit
设置为false?这不是达到你想要的吗?是的,这似乎有效,谢谢你的观察。但是,clientId变量在我的应用程序中保存正确的groupId。我在问题中更改了它,以避免进一步误解您是使用consumergroup还是Highlevelconsumer?我使用的是consumergroup