当我们有多个消费者从单个分区的主题中读取时,所有消费者都有可能得到所有的消息。我已经创建了两个消费者,手动偏移commit.started,第一个消费者,2分钟后启动第二个消费者。第二个消费者正在从第一个消费者停止读取的消息中读取。有没有可能第二个消费者会从头开始阅读所有的信息。我是卡夫卡的新手,请帮帮我。
发布于 2019-02-09 13:22:24
在您的消费者中,您将使用commitSync,它提交上次轮询返回的偏移量。现在,当您启动您的第二个消费者时,因为它在同一个消费者组中,所以它将从上次提交的偏移量读取消息。
您的消费者将消费的消息取决于它所属的ConsumerGroup。假设您在单个消费者组中有2个分区和2个消费者,那么每个消费者将从不同的分区读取数据,这有助于实现并行性。
因此,如果你想让你的第二个消费者从头开始阅读,你可以做以下两件事之一:
a)尝试将第二个消费者放在不同的消费者组中。对于这个消费者组,将不会有任何偏移量存储在任何地方。此时,auto.offset.reset配置将决定起始偏移量。将auto.offset.reset设置为earliest(将偏移重置为最早的偏移)或latest(将偏移重置为最新的偏移)。
b)通过使用以下命令来查找分配给你的使用者的所有分区的开始:consumer.seekToBeginning(consumer.assignment())
发布于 2019-02-10 02:32:13
分区始终分配给单个消费者组中的唯一消费者,而与多个消费者无关。这意味着只有消费者可以读取数据,而其他用户在将分区分配给他们之前不会使用数据。当消费者宕机时,分区重新平衡发生,它将被分配给另一个消费者。由于您正在执行手动提交,因此新的使用者将开始从提交的偏移量读取。
https://stackoverflow.com/questions/54603341
复制相似问题