本指南探讨了 Kafka 消费者组偏移量,这对于跟踪消息消费进度至关重要。 每个消费者组为其消费的每个分区维护一个偏移量,指示最后处理的记录。 这确保消费者在重新启动后从正确的位置恢复。
消费者组偏移量是一个简单的数字标识符,用于跟踪消费者在 Kafka 主题分区中的位置。 每个分区的每条记录都有一个顺序偏移量。消费者组使用这些偏移量来记住它停止的位置。例如,从两个分区主题(P1 和 P2)读取的消费者组将具有单独的偏移量,分别代表 P1 和 P2 中的最后读取记录。
偏移存储可以通过两种方式处理:在 Kafka 本身内或在外部系统(数据库或文件)中。本文重点介绍Kafka内部的offset存储机制。
Kafka 将偏移量存储在名为 __consumer_offsets
的特殊内部主题中。 Kafka 客户端库处理偏移存储和检索,使消费者能够在重启后从最后一个已知位置无缝恢复。
如果没有找到消费者的偏移量,则 auto.offset.reset
配置决定消费者的行为:
latest
(默认):消费者从主题末尾开始,忽略现有消息。earliest
:消费者从主题的开头开始,处理所有可用的消息。none
:如果没有找到偏移量,则抛出异常。自动提交通过定期向 Kafka 提交偏移量来简化偏移量管理。默认情况下,此过程每 5 秒自动发生一次(由 enable.auto.commit
控制)。 虽然方便,但存在数据丢失的风险。
因为自动提交在单独的线程中运行,所以它不会跟踪正在进行的记录处理。 如果消费者在处理完成之前轮询多条记录并自动提交,则失败时可能会发生数据丢失。
手动提交提供精确的控制。通过禁用自动提交 (enable.auto.commit=false
),您可以在成功处理记录后使用 commitSync()
或 commitAsync()
显式提交偏移量。这可以防止数据丢失。
<code class="language-java">while (true) { records = consumer.poll(timeout); // process records consumer.commitSync(); // or consumer.commitAsync() }</code>
手动提交提供同步(
障碍,直到确认提交为止,以确保持久性但会影响性能。 commitSync()
是非阻滞,但需要处理潜在的例外。
commitAsync()
结论commitSync()
commitAsync()
>消费者组的偏移对于可靠的Kafka消费至关重要。 虽然自动命令简化了事物,但手动提交提供了更大的控制和数据安全。 同步和异步提交之间的选择取决于您应用程序的需求,平衡性能和可靠性。 了解这些机制是构建健壮和耐断层的Kafka应用的关键。
考虑探索在编码港可用的免费Kafka迷你课程。
>图片来源:@kencheungphoto以上是Kafka Consumer – 提交消费者组偏移量的详细内容。更多信息请关注PHP中文网其他相关文章!