kafka消费者

  • Kafka消费者从属于消费者组,一个组里的消费者订阅的是同一个topic,每个消费者接收topic一部分分区的消息
  • 可以为每一个需要获取一个或多个topic全部消息的应用程序创建一个消费者组,每个消费者可以消费若干个分区,往阻力添加消费者来伸缩读取能力和处理能力,组里的每个消费者只处理一部分消息
  • 一个新的消费者加入消费者组时,它读取的事原本有其他消费者读取的消息
  • 一个消费者被关闭或者发生崩溃时,他离开该组,原本由他读取的分区将由消费者组里的其他消费者读取
  • 分区的所有权从一个消费者转移到另一个消费者,这个行为被称为再均衡。给消费者组带来了高可用性和伸缩性
  • 消费者通过向被指派为群组协调器 的broker发送心跳来维持他们和组的从属关系以及他们对分区的所有权关系。只要消费者以正常的时间间隔发送心跳,就被认为是活跃的,消费者会在轮询消息或提交偏移量时发送心跳。如果消费者停止发送心跳的时间足够长,会话就会过期,默认消费者死亡

核心参数指标

  • fetch.min.bytes:消费者从服务器获取记录的最小字节数,如果可用的数据量小于指定大小,那么会等到有足够的可用数据时才把它返回给消费者,降低消费者和broker的工作负载
  • fetch.max.wait.ms:指定borker的等待时间
  • max.partition.fetch.bytes:服务器从每个分区里返回给消费者的最大字节数
  • session.timeout.ms:消费者在被认为死亡之前可以与服务器断开连接的时间
    • 设置过小:可以更快检测和恢复崩溃节点,长时间轮询或者垃圾手机可能导致非预期的再均衡
    • 设置过大:减少意外的再均衡,检测节点崩溃需要更长的时间
  • auto.offset.reset:消费者在读取一个没有偏移量的分区或者偏移量无效的情况下处理方式
    • earliest:从起始位置读取分区记录
    • latest:从最新的记录开始读取数据
  • enable.auto.commit:消费者是否自动提交偏移量
  • partition.assignment.strategy:分区的分配策略
    • Range:把topic的若干个连续的分区分配给消费者
    • RoundRobin:把topic的所有分区逐个分配给消费者

消费者如何提交偏移量

  • 消费者往一个叫做_consumer_offset的特殊topic发送消息,消息里包含每个分区的偏移量
  • 如果消费者崩溃或有新的消费者加入群组,就会触发再均衡,完成再均衡后,每个消费者可能分配到新的分区,而不是之前处理的额那个。为了能够继续之前的工作,消费者需要读取每个分区最后一次提交的偏移量,然后从偏移量指定的地方继续处理消息 。
相关推荐
8Qi813 小时前
DDD架构演进
java·分布式·mvc·ddd
方方洛13 小时前
ray教程-23-附录C-术语表
人工智能·分布式·机器学习
皮皮林55113 小时前
Kafka 怎么保证消费只消费一次的?
kafka
茶海棠19 小时前
Hadoop+zookeeper+HBase+Kafka集群搭建全流程
hadoop·zookeeper·kafka·hbase
海棠Flower未眠21 小时前
下单请求处理流程:商品维度分布式锁与 Redis 预扣库存
redis·分布式·junit
罗四强1 天前
第10篇:打包上架:签名、打包 HAP、发布到华为应用市场
分布式·操作系统·harmonyos·arkts·鸿蒙系统
秋饼1 天前
Redis 全面解析:从数据结构到主从/哨兵/集群、分布式锁与面试高频考点,代码到原理一次讲透
数据库·redis·分布式·面试·后端开发
二月夜1 天前
Redis 高频面试题全解:缓存三大问题、大 key 治理与分布式锁之争(2026 招聘 JD 真题复盘)
redis·分布式·后端·缓存
后台模板学习1 天前
Kafka 与 RabbitMQ 在用户认证与权限管理场景
kafka·rabbitmq·linq
樱花落木兰1 天前
Redis 消息队列的可靠性演进:从 List、Pub/Sub 到 Stream 消费者组,以及 8.x 版本改变了什么
java·开发语言·经验分享·redis·分布式·python·软件工程