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

【大数据之Kafka】十、Kafka消费者工作流程

1 Kafka消费方式

(1)pull(拉)模式:消费者从broker中主动拉取数据。(Kafka中使用)
不足:如果Kafka中没有数据,消费者可能会陷入循环,一直返回空数据。
(2)push(推)模式:Kafka中不适用此种方式,因为broker决定消息发送速率,很难适应所有消费者的消费速度。
在这里插入图片描述

2 Kafka消费者工作流程

2.1 消费者总体工作流程

(1)生产者向分区中的每个Leader发送一批批的数据。

(2)Follower主动与Leader同步数据,保证数据的可靠性。

(3)消费者可以消费某一个分区的数据,一个消费者也可以消费多个分区的数据,消费者与消费者之间是完全独立的。

(4)每一个分区的数据只能由消费者组中的一个消费者进行消费。(把消费者组当成一个独立的消费者,同一个分区不能由同一个消费者组里面两个及以上的消费者消费)

(5)消费到哪里的具体位置为offset,offset保存在系统主题_consumer_offsets中。(Kafka的底层数据是持久化到磁盘上)
在这里插入图片描述

2.2 消费者组原理

  Consumer Group(CG):消费者组,由多个consumer组成。形成一个消费者组的条件,是所有消费者的groupid相同。
(1)消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费。
(2)消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
(3)如果向消费组中的消费者数超过主题分区数量,则有一部分消费者就会闲置,不会接收任何消息。

  coordinator:辅助实现消费者组的初始化和分区的分配。
  coordinator节点选择 = groupid(写代码时手动给的)的hashcode值 % 50(consumer_offsets的分区数量)
例如: groupid的hashcode值 = 1,1% 50 = 1,那么 consumer_offsets 主题的1号分区,在哪个broker上,就选择这个节点的coordinator作为这个消费者组的老大。消费者组下的所有的消费者提交offset的时候就往这个分区去提交offset。

消费者组初始化流程

(0)生产者把数据发送到Kafka集群,选择节点的coordinator。

(1)每个消费者都往选出的coordinator发送请求,表示要加入到组当中。

(2)coordinator会从消费者中选出一个消费者作为Leader。

(3)coordinator会把收集到的所有topic信息都发送给消费者的Leader。

(4)Leader制定消费方案。

(5)制定计划后,Leader将消费方案发给coordinator。

(6)coordinator把消费方案下发给各个消费者。

(7)每个消费者会定期给coordinator发送心跳反应(默认3s),**一旦超时(session.timeout.ms=45s)则该消费者会被移除并触发再平衡,别的消费者继续完成接下来的任务;或消费者处理消息的时间过长(max.poil.interval.ms=5分钟)**也会触发再平衡。
在这里插入图片描述

消费者组详细消费流程

(1)消费者组创建消费者网络连接客户端,主要用于与Kafka集群进行交会。

(2)消费者调用sendFetches方法用于抓取数据的初始化。

(3)消费者网络连接客户端调用send方法发送请求。

(4)Leader通过回调方法onSuccess把数据拉取到消息队列里。

(5)消费者一次拉取一批次数据,经过反序列化、拦截器再进行数据处理。
在这里插入图片描述

2.3 消费者重要参数

在这里插入图片描述

http://www.lryc.cn/news/164244.html

相关文章:

  • 如何确保ChatGPT的文本生成对特定行业术语的正确使用?
  • 行业追踪,2023-09-11
  • LVS + Keepalived群集
  • springboot将jar改成war
  • 从9.10拼多多笔试第四题产生的01背包感悟
  • 搭建自己的OCR服务,第一步:选择合适的开源OCR项目
  • 【C++】VScode配置C/C++语言环境(简洁易懂版)
  • 【hive】—原有分区表新增加列(alter table xxx add columns (xxx string) cascade;)
  • verilog学习笔记7——PMOS和NMOS、TTL电路和CMOS电路
  • Java知识点二
  • 基于单片机压力传感器MPX4115检测-报警系统-proteus仿真-源程序
  • Pytorch02 神经网路搭建步骤
  • 【源码】JavaWeb+Mysql招聘管理系统 课设
  • Java中级编程大师班<第一篇:初识数据结构与算法-数组(2)>
  • 杰哥教你面试之一百问系列:java集合
  • 【数据结构】树和二叉树概念
  • C盘清理教程
  • 【实战-05】 flinksql look up join
  • C++数据结构--红黑树
  • Linux perf使用思考
  • 自定义路由断言工厂
  • Nacos安装及在项目中的使用
  • overleaf中latex语法总结
  • Grafana配置邮件告警
  • setup中的nextTick函数
  • Matlab信号处理3:fft(快速傅里叶变换)标准使用方式
  • Python|合并两个字典的几种方法
  • ElementUI浅尝辄止24:Message 消息提示
  • 让照片动起来的软件,轻松制作照片动效
  • 【图解RabbitMQ-7】图解RabbitMQ五种队列模型(简单模型、工作模型、发布订阅模型、路由模型、主题模型)及代码实现