我正在使用Kafka 9并且与subscribe的行为相混淆。
答案 0 :(得分:3)
为什么预期group.id会使用subscribe?
Kafka使用消费者群体的概念来实现主题的并行消费 - 每个消费者群体将传递一次消息,无论该群体中实际有多少消费者。这就是为什么group参数是强制性的,如果没有组,Kafka就不会知道如何处理这个消费者与可能订阅同一主题的其他消费者的关系。
每当您启动一个消费者时,它将加入一个消费者群体,根据该消费者群体中有多少其他消费者,它将被分配给要读取的分区。对于这些分区,它然后检查列表读取偏移量是否已知,如果找到一个,它将从此点开始读取消息。 如果未找到偏移量,则参数 auto.offset.reset 将控制是否从分区中最早或最晚的消息开始读取。
我们是否需要使用commitSync手动提交偏移量?即使 不这样做我发现它总是从最新的开始。
是否需要提交偏移量取决于您为参数 enable.auto.commit 选择的值。默认情况下,此参数设置为true,这意味着使用者将自动定期提交其偏移量(通常由 auto.commit.interval.ms 定义)。如果将此值设置为false,则需要自己提交偏移量。 此默认行为可能也是导致您的“问题”导致您的消费者始终以最新消息开始的原因。由于偏移量是自动提交的,因此它将使用该偏移量。
有没有办法从头开始重播消息?
如果你想每次都从头开始阅读,你可以调用seekToBeginning,如果没有参数调用,它将重置为所有订阅分区中的第一条消息,或者只调用你传入的那些分区。 / p>