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发送消息,消息里包含每个分区的偏移量
  • 如果消费者崩溃或有新的消费者加入群组,就会触发再均衡,完成再均衡后,每个消费者可能分配到新的分区,而不是之前处理的额那个。为了能够继续之前的工作,消费者需要读取每个分区最后一次提交的偏移量,然后从偏移量指定的地方继续处理消息 。
相关推荐
莳花微语1 小时前
使用MyCAT实现分布式MySQL双主架构
分布式·mysql·架构
power-辰南4 小时前
高并发系统架构设计全链路指南
分布式·系统架构·高并发·springcloud
roman_日积跬步-终至千里10 小时前
【分布式理论16】分布式调度2:资源划分和调度策略
分布式
DC_BLOG15 小时前
Linux-GlusterFS进阶分布式卷
linux·运维·服务器·分布式
点点滴滴的记录16 小时前
分布式之Raft算法
分布式
桃林春风一杯酒17 小时前
HADOOP_HOME and hadoop.home.dir are unset.
大数据·hadoop·分布式
逻各斯1 天前
Redisson分布式锁java语法, 可重入性实现原理 ,(还有可重试性,超时不释放,主从一致性)
分布式
WeiLai11121 天前
面试基础--微服务架构:如何拆分微服务、数据一致性、服务调用
java·分布式·后端·微服务·中间件·面试·架构
奔跑吧邓邓子1 天前
【Python爬虫(44)】分布式爬虫:筑牢安全防线,守护数据之旅
开发语言·分布式·爬虫·python·安全
茶本无香1 天前
kafka+spring cloud stream 发送接收消息
spring cloud·kafka·java-zookeeper