默认情况下,Kafka Consumer 会定期提交当前的偏移量,除非通过禁用将其关闭enable.auto.commit
。根据文档,您将负责自己提交偏移量。所以当我想要手动控制时,这似乎是要走的路,但是文档还提到了存储的偏移量,如果你想要手动控制,你应该禁用enable.auto.offset.store
并使用rd_kafka_offsets_store()
并保持自动提交不变。
有人可以解释为什么首选后一种方法吗?禁用自动提交应该具有完全相同的效果吗?
默认情况下,Kafka Consumer 会定期提交当前的偏移量,除非通过禁用将其关闭enable.auto.commit
。根据文档,您将负责自己提交偏移量。所以当我想要手动控制时,这似乎是要走的路,但是文档还提到了存储的偏移量,如果你想要手动控制,你应该禁用enable.auto.offset.store
并使用rd_kafka_offsets_store()
并保持自动提交不变。
有人可以解释为什么首选后一种方法吗?禁用自动提交应该具有完全相同的效果吗?
使用enable.auto.commit=true
librdkafka 将定期、重新平衡和消费者关闭时提交每个分区的最后存储偏移量。
此处使用的偏移量取自内存中的偏移量存储。此商店将在 时自动更新enable.auto.offset.store=true
。
如果你设置enable.auto.offset.store=false
了,你可以通过自己更新这个内存中的偏移存储rd_kafka_offsets_store()
。
这比禁用更可取,enable.auto.commit
因为您不必自己定期重新实现调用提交,而是可以依赖已经内置的逻辑。
您可以手动控制是否以任何一种方式提交偏移量,但是禁用enable.auto.commit
和调用commit
自己很可能会导致更频繁的提交。