当前位置: 首页 > news >正文

Kafka消费者相关原理

前言

前面已经介绍了Kafka的架构知识并引出了Kafka的相关专业名称进行解释

也介绍了Kafka生产者相关的原理

这次分享一下Kafka对消费者接收消息进行处理的运行机制和原理

消费者接收到消息之后,就是进行消费,但是消费者要维护Kafka中消费者偏移量主题的消息

所以消费者消费的时候一定是需要给消费者偏移量主题提交 消费者组/消费主题分区/偏移量这些消费者消费的信息,让Kafka维护消息偏移量信息的

消费者提交消息偏移量

自动提交

每隔 5 秒钟自动把最近拉取到的消息的 offset 提交给 Kafka 的 消费者偏移量主题

可以自己设置是否自动提交和自动提交消息偏移量的间隔

优点: 批量提交,减少提交压力

缺点:

        实时同步性差,若消费者挂掉,重新启动

                如果之前的消息没有消费完就提交了,会造成消息丢失

                如果之前的消息消费完了还没来得及提交,下次消费者还按之前的消息偏移量进行消费,会造成消息重复消费

手动提交

消费者消费完消息之后手动对偏移量进行提交

设置完手动提交需要自己提交消息偏移量,如果设置了手动提交但是不手动提交消息的偏移量此时消息偏移量没有维护,会导致重复消费

手动同步提交

手动同步提交就是当前线程提交消息偏移量阻塞,等待提交成功

手动异步提交

手动异步提交就是当前线程提交消息偏移量不阻塞,异步调用消费者提供回调方法来对异步提交结果进行处理

消费者长轮询拉取消息

拉取消息数量:默认每次拉取最多 500 条消息

长轮询等待时间:如果当前批次的消息不足 500 条,消费者会阻塞等待 最多 1 秒,期间 Broker 会推送新到达的消息

总结: 够500条直接返回,不够最多拉取一秒也返回

其中消费者长轮询拉取消息条数和长轮询等待时间是可以设置的

拉取完之后消费者就开始对消息进行消费了,当消费者消费完这次拉取的消息就会再次长轮询拉取消息

所以就引出了下面的消费者运行机制

消费者两次长轮询拉取消息间隔如果超过30秒就认定这个消费者处理业务能力差就把它剔除出消费者组。触发rebalance机制,rebalance机制会造成性能开销

消费者两次长轮询拉取消息间隔时间是可以设置的,需要根据消费者能力快慢进行设置

消费者的健康状态检查

消费者每隔1s向kafka集群发送⼼跳,集群发现如果有超过10s没有续约的消费者,将被踢出 消费组,触发该消费组的rebalance机制,将该分区交给消费组⾥的其他消费者进⾏消费

新消费者指定分区和偏移量、时间消费

Kafka可以指定具体主题的分区进行消息的拉取

并且指定从这个主题分区的那个消息偏移量开始消费

如: 从头开始消费、指定从第几个偏移量开始消费、指定从过去的某个具体时间进行消费

其中,指定从过去某个时间进行消费的原理步骤

先通过指定过去的某个时间找到主题分区的偏移量位置,然后使用这个偏移量调用指定偏移量开始消费

所以需要配置消费者的消息偏移量配置

新消费组的消费偏移量规则

新消费组中的消费者在启动以后,默认消费新消息                          

        Latest:默认的,消费新消息

当然也可以通过配置让新消费组中的消费组从头开始消费消息

        earliest:第⼀次从头开始消费。之后开始消费新消息(最后消费的位置的偏移量+1)

所以需要配置消费组的消息偏移量设置

其中,当消费者消息偏移量配合和消费组消息偏移量配置冲突的时候,优先消费者偏移量配置

http://www.xdnf.cn/news/1276417.html

相关文章:

  • K8s DaemonSet 详解
  • es-drager-blog
  • 安全生产基础知识(一)
  • ThreadLocal的原理是什么,使用场景有哪些?
  • 状态机浅析
  • Linux操作系统从入门到实战(十八)在Linux里面怎么查看进程
  • Pico+unity VR入门开发超详细笔记2025
  • SpringBoot实现文件上传
  • 一些js数组去重的实现算法
  • 故障诊断 | VMD-CNN-BiLSTM西储大学轴承故障诊断附MATLAB代码
  • MyBatis进阶:动态SQL、多表查询、分页查询
  • openresty-lua-redis案例
  • Python 的列表 list 和元组 tuple 有啥本质区别?啥时候用谁更合适?
  • Ubuntu 安装 Kibana
  • 旅行者1号无线电工作频段
  • MyBatisPlus插件原理
  • MVCC和日志
  • 音视频学习(五十一):AAC编码器
  • C4.5算法:增益率(Gain Ratio)
  • 嵌入式第二十四课!!linux应用软件编程与文件操作!!!
  • Rust 实战四 | Traui2+Vue3+Rspack 开发桌面应用:通配符掩码计算器
  • JAVA+AI简化开发操作
  • Java集合中的 LinkedList
  • 每日任务day0810:小小勇者成长记之武器精炼
  • node.js 学习笔记3 HTTP
  • Django @login_required实现登陆认证
  • C/C++内存管理函数模板
  • 小明的魔法地图:迷宫探险智慧(记忆性递归)
  • 【0基础3ds Max】主工具栏介绍(下)
  • [激光原理与应用-223]:机械 - 机加厂加工机械需要2D还是3D图?