【发布时间】:2017-02-02 14:11:56
【问题描述】:
我正在使用 Kafka 9,但对订阅的行为感到困惑。
- 为什么它需要 group.id 和 subscribe。
- 我们是否需要使用 commitSync 手动提交偏移量。即使不这样做,我也看到它总是从最新开始。
- 有没有办法从头开始重播消息。
【问题讨论】:
标签: apache-kafka
我正在使用 Kafka 9,但对订阅的行为感到困惑。
【问题讨论】:
标签: apache-kafka
为什么它需要 group.id 订阅?
Kafka 使用消费者组的概念来实现主题的并行消费——每条消息将在每个消费者组中传递一次,无论该组中实际有多少消费者。这就是为什么 group 参数是强制性的,没有 group Kafka 将不知道应该如何对待这个消费者与可能订阅同一主题的其他消费者。
每当您启动一个消费者时,它将加入一个消费者组,根据该消费者组中有多少其他消费者,它将被分配要读取的分区。对于这些分区,它会检查 list read offset 是否已知,如果找到,它将从该点开始读取消息。 如果没有找到偏移量,参数 auto.offset.reset 控制读取是从分区中最早的消息还是最晚的消息开始。
我们是否需要使用 commitSync 手动提交偏移量?即使 不要那样做我看到它总是从最新的开始。
是否需要提交偏移量取决于您为参数 enable.auto.commit 选择的值。默认设置为 true,这意味着消费者将定期自动提交其偏移量(由 auto.commit.interval.ms 定义的频率)。如果您将其设置为 false,那么您将需要自己提交偏移量。 这种默认行为可能也是导致您的消费者总是从最新消息开始的“问题”的原因。由于偏移量是自动提交的,它将使用该偏移量。
有没有办法从头开始重播消息?
如果你想每次都从头开始阅读,你可以调用seekToBeginning,如果不带参数调用,或者只是你传入的那些分区,它将重置为所有订阅分区中的第一条消息。
【讨论】: