IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> kafka系列文章四(Consumer Group) -> 正文阅读

[大数据]kafka系列文章四(Consumer Group)

前言

简单来讲Kafka的Consumer Group是由多个Consumer实例共同组成的一个消费组,Consumer Group由一个Group ID来标识,该组内的所有Consumer共同协调来消费Topic下的所有分区,当然一个Consumer实例只能够消费一个分区。

在这里插入图片描述
所以最为理想的情况下当你的Consumer Group下的Consumer实例个数和你的Topic分区个数相同时,那么每个Consumer都能消费一个分区的数据。但如果你的Consumer个数比分区数还多的话,比如: 3个Consumer实例,Topic中只有两个分区,那么总有一个Consumer实例处于空闲状态,那么的话就太浪费了

Offset

在Kafka中有一个专门的术语Offset用来记录Consumer在消费过程中的位移。而对于Consumer Group来说,它是用一组键值对来记录,key= groupId+topic+分区编号,value=Consumer针对该分区的位移量,在新版本的Kafka中该键值对由Kafka内部维护(老版本的存储在zookeeper中)

Rebalance

Rebalance(重平衡)规定了一个 consumer group 是如何达成一致来分配订阅 topic 的所有分区的,说简单点就是让组内的所有Consumer实例来均匀的订阅分区

在这里插入图片描述
如上图所示,一共有三种类型的场景会导致Kafka Reblance的发生

1.所订阅的Topic分区数发生变化,比如说Topic1新增了一个分区3,那么会导致订阅该Topic的所有Consumer Group发生Rebalance
2.Consumer Group中的Consumer实例个数发生变化,比如说新增Consumer实例或者某个Consumer实例因故障被剔除Consumer Group(减少Consumer实例)也会导致Rebalance
3.订阅的Topic数量发生变更,一般这种场景是Consumer Group使用了正则表达式来匹配Topic,此时如果你新增的Topic满足该表达式的要求的话,那么就会导致Reblance的产生

当发生Rebalance时,Consumer Group下的所有Consumer实例都需要参与Rebalance。Kafka
提供了三种分区分配策略来进行Rebalance(Consumer Group中的Consumer选择Topic中的那个分区),下文会详细描述这三种策略

Rebalance 策略

range

该策略的原理是按照Consumer个数和分区个数整除得出一个数量(每个消费者分配多少个分区)。由于考虑到会有余数的产生,所以总有几个消费者是比其他的要多出一个分区的,这里给出计算公式:

假设
a = 分区数/消费者数,
b(余数)= 分区数%消费者数,
那么我们可以很明显的知道前b个消费者每个消费者分配a+1个分区,
而后面的消费者则分配a个分区,下图描述了这一细节
在这里插入图片描述

round robin

该策略的实现方式比较简单,就是将分区按照字典序排序,然后遍历这些分区将分区逐一分配到每个Consumer中
在这里插入图片描述

sticky

该策略是Kafka从0.11才支持的分配策略,该策略在保证分配均匀的同时还要求这次的分配尽量和之前的相同。这么做的目的很明确,Consumer和Kafka之间是通过TCP进行连接,如果把连接都断开然后分配完成后重新建立连接,那么无故就会增多TCP的4次挥手(断联)和3次握手(建联)

总结

上述文章我们描述了Consumer Group发生Rebalance的原因,以及Rebalance的三种策略。
很明显「sticky」策略是最理想的策略,不过对于你的Kafka版本有要求(0.11 及以后的版本)。
另外当Consumer Group 发生Rebalance时,JVM(kafka由scala编写,最终会编译成.class文件交由java虚拟机)会STW(stop the world),当发生STW时,Consumer会等待Rebalance完成后才继续消费,所以我们要尽可能的避免Rebalance的产生。那么如何尽量的减少Rebalance的产生呢?

  • 业务上避免
    1.在创建Topic时尽量估算好分区数,后期非必要不要变动
    2.尽量少用正则表达式来订阅Topic,以免产生意向不到的效果

  • 运维上避免
    1.Consomer未及时发送心跳导致Rebalance

这里有两个参数需要你注意下
sesstion.timeout.ms : 一次session的连接超时时间
heartbeat.interval.ms: 发送心跳的间隔时间,建议设置成session连接超时时间的1/3

2.Consumer因消费超时导致Rebalance

这里同样有两个参数
max.poll.interval.ms: Consumer 间隔多长时间拉取消息
max.poll.records: Consumer 一次拉取的消息条数
这里给出的建议是:结合自身的业务特点,尽可能的在max.poll.interval.ms周期内消费完 max.poll.records

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:18:09  更:2022-04-04 12:21:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:37:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码