首页 > Java > java教程 > Kafka Consumer – 提交消费者组偏移量

Kafka Consumer – 提交消费者组偏移量

DDD
发布: 2025-01-26 20:11:10
原创
926 人浏览过

了解 Kafka 消费者组抵消:综合指南

本指南探讨了 Kafka 消费者组偏移量,这对于跟踪消息消费进度至关重要。 每个消费者组为其消费的每个分区维护一个偏移量,指示最后处理的记录。 这确保消费者在重新启动后从正确的位置恢复。

什么是消费者群体抵消?

消费者组偏移量是一个简单的数字标识符,用于跟踪消费者在 Kafka 主题分区中的位置。 每个分区的每条记录都有一个顺序偏移量。消费者组使用这些偏移量来记住它停止的位置。例如,从两个分区主题(P1 和 P2)读取的消费者组将具有单独的偏移量,分别代表 P1 和 P2 中的最后读取记录。

Kafka Consumer – Committing consumer group offset

消费者组 1 的当前偏移量(位置)示例

偏移存储:Kafka 与外部系统

偏移存储可以通过两种方式处理:在 Kafka 本身内或在外部系统(数据库或文件)中。本文重点介绍Kafka内部的offset存储机制。

Kafka 的内部偏移存储

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>
登录后复制

何时使用自动使用

> 如果您的应用程序:

    >可容忍偶尔的数据重新加工(IDEMPOTENT操作)。
  • 可以处理几条消息的丢失。
  • >
  • 否则,建议您进行手动提交。
>同步与异步consits

手动提交提供同步(

)和异步(

)选项。

障碍,直到确认提交为止,以确保持久性但会影响性能。 commitSync()是非阻滞,但需要处理潜在的例外。 commitAsync()结论commitSync() commitAsync()>消费者组的偏移对于可靠的Kafka消费至关重要。 虽然自动命令简化了事物,但手动提交提供了更大的控制和数据安全。 同步和异步提交之间的选择取决于您应用程序的需求,平衡性能和可靠性。 了解这些机制是构建健壮和耐断层的Kafka应用的关键。

>

了解有关kafka

的更多信息

考虑探索在编码港可用的免费Kafka迷你课程。

>图片来源:@kencheungphoto

以上是Kafka Consumer – 提交消费者组偏移量的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板