李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
09.Kafka消费过程分析
Leefs
2021-09-24 PM
2204℃
0条
[TOC] ### 一、消费者模型 #### 1.1 概念 消息由生产者发布到Kafka集群后,会被消费者消费。 **消息的消费模型有两种:** + 推送模型(Push) + 拉取模型(Pull)。 #### 1.2 推送模型(push) + 基于推送模型(push)的消息系统,有消息代理记录消费者的消费状态。 + 消息代理在将消息推送到消费者后,标记这条消息已经消费,但这种方式无法很好地保证消费被处理。 + 如果要保证消息被处理,消息代理发送完消息后,要设置状态为“已发送”,只要收到消费者的确认请求后才更新为“已消费”,这就需要代理中记录所有的消费状态,但显然这种方式不可取。 **缺点** + **push模式很难适应消费速率不同的消费者** 因为消息发送速率是由broker决定的,push模式的目标是尽可能以最快速度传递消息,但是这样很容易造成consumer来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。 #### 1.3 拉取模式(pull) kafka采用拉取模型,由消费者自己记录消费状态,每个消费者互相独立地顺序拉取每个分区的消息。 ![09.Kafka消费过程分析01.jpg](https://lilinchao.com/usr/uploads/2021/09/4076953475.jpg) **说明** + 有两个消费者(不同消费者组)拉取同一个主题的消息,消费者A的消费进度是3,消费者B的消费进度是6。 + 消费者拉取的最大上限通过最高水位(watermark)控制,生产者最新写入的消息如果还没有达到备份数量,对消费者是不可见的。 + 这种由消费者控制偏移量的优点是:**消费者可以按照任意的顺序消费消息**。比如,消费者可以重置到旧的偏移量,重新处理之前已经消费过的消息;或者直接跳到最近的位置,从当前的时刻开始消费。 ##### 消费消息处理策略 **在一些消息系统中,消息代理会在消息被消费之后立即删除消息。** 如果有不同类型的消费者订阅同一个主题,消息代理可能需要冗余地存储同一消息;或者等所有消费者都消费完才删除,这就需要消息代理跟踪每个消费者的消费状态,这种设计很大程度上限制了消息系统的整体吞吐量和处理延迟。 ##### Kafka消费消息处理策略 Kafka的做法是生产者发布的所有消息会一致保存在Kafka集群中,不管消息有没有被消费。 用户可以通过设置保留时间来清理过期的数据,比如,设置保留策略为两天。那么,在消息发布之后,它可以被不同的消费者消费,在两天之后,过期的消息就会自动清理掉。 ### 二、消费者组 消费者是以consumer group消费者组的方式工作,由一个或者多个消费者组成一个组,共同消费一个topic。每个分区在同一时间只能由group中的一个消费者读取,但是多个group可以同时消费这个partition。 ![09.Kafka消费过程分析02.png](https://lilinchao.com/usr/uploads/2021/09/4111870395.png) **说明** 上图中,有一个由三个消费者组成的group,有一个消费者读取主题中的两个分区,另外两个分别读取一个分区。某个消费者读取某个分区,也可以叫做某个消费者是某个分区的拥有者。 **优点** + 消费者可以通过水平扩展的方式同时读取大量的消息。 + 如果一个消费者失败了,那么其他的group成员会自动负载均衡读取之前失败的消费者读取的分区。 ### 三、消费方式 consumer 采用 pull(拉)模式从 broker中读取数据。 **pull方式优点** + pull 模式可以根据 consumer 的消费能力以适当的速率消费消息 **缺点** + 如果 kafka 没有数据,消费者可能会陷入循环中,一直返回空数据。 针对这一点,Kafka 的消费者在消费数据时会传入一个时长参数 timeout,如果当前没有数据可供消费,consumer 会等待一段时间之后再返回,这段时长即为 timeout。 *附参考文章链接:* *https://blog.csdn.net/qq_34886352/article/details/84303860*
标签:
Kafka
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/1524.html
上一篇
08.Kafka生产者数据可靠性保证
下一篇
10.【转载】Kafka重平衡机制
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
6
标签云
Golang基础
JavaWEB项目搭建
SpringCloud
Hive
持有对象
Spark SQL
Hbase
Sentinel
数据结构
ajax
Filter
人工智能
Redis
JavaScript
Elastisearch
Kibana
MySQL
Java编程思想
Spark Core
Tomcat
栈
锁
哈希表
数据结构和算法
Ubuntu
HDFS
散列
DataWarehouse
GET和POST
FileBeat
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭