当我们从具有单个分区的主题中读取多个使用者时,所有使用者都可能会获得所有消息。 我创建了两个具有手动偏移量commit的使用者,启动了第一个使用者,并在2分钟后启动了第二个使用者。第二个使用者正在从第一个使用者停止阅读的位置读取消息。第二个消费者有可能从头开始阅读所有消息。我是kafka的新手,请帮帮我。
答案 0 :(得分:1)
在您的使用者中,您将使用commitSync来提交上次轮询返回的偏移量。现在,当您启动第二个使用者时,由于它在同一个使用者组中,它将从上次提交的偏移量中读取消息。
您的消费者将消费的消息取决于它所属的ConsumerGroup。假设您在一个Consumer Group中有2个分区和2个使用者,那么每个使用者将从不同的分区读取数据,这有助于实现并行性。
因此,如果您希望第二位消费者从头开始阅读,则可以执行以下两项操作之一:
a)尝试将第二个消费者置于不同的消费者群体中。对于此消费群体,任何地方都不会存储任何偏移量。此时,auto.offset.reset
配置将决定起始偏移量。将auto.offset.reset
设置为earliest
(将偏移量重置为最早的偏移量)或latest
(将偏移量重置为最新的偏移量)。
b)尝试使用consumer.seekToBeginning(consumer.assignment())
答案 1 :(得分:0)
始终将分区分配给单个消费者组中的唯一消费者,而与多用户无关。这意味着只有使用者可以读取数据,而其他用户只有在分配分区后才能使用数据。当使用者关闭时,将发生分区重新平衡,并将其分配给另一个使用者。由于您正在执行手动提交,因此新使用者将开始从提交的偏移量中读取。