Kafka Consumer Group:仅读取新消息

时间:2017-08-25 11:58:20

标签: node.js apache-kafka

我正在使用 @Entity @Table(name = "CLIENTS") public class CLIENTS implements Serializable { private static final long serialVersionUID = 123; @Id @Column(name = "ID") @GeneratedValue(strategy = GenerationType.AUTO) private Integer clientId; @Column(name = "CODE") private Integer code; @Column(name = "REC_ID") private Integer recId; //setters, getters, etc } ConsumerGroup来读取来自Kafka的消息。我想从主题中读取新消息,即不是所有以前未消耗的消息,而是仅读取在创建ConsumerGroup之后到达的消息。

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

我还尝试手动将偏移设置为fromOffset: 'latest',如下所示:

-1

这将返回一个0的errorCode应该是成功的,但ConsumerGroup之后会收到旧消息。

卡夫卡版:0.10.0 kafka-node:1.6.2

3 个答案:

答案 0 :(得分:0)

commit(groupId, payloads, cb)

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

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

答案 1 :(得分:0)

使用选项启动kafka ConsumerGroup:

 autoCommit: false,   
 fromOffset: 'latest'

创建一个永远不会向Kafka提交偏移量的ConsumerGroup(除非你手动执行,这是不需要的)。因此,它总会选择最新的'启动时的选项。

答案 2 :(得分:0)

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

我希望这将有助于节省很多时间;)

相关问题