【大数据之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 消费者重要参数

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值