【Kafka从入门到成神系列 六】Kafka 消费组及重平衡

简介: 【Kafka从入门到成神系列 六】Kafka 消费组及重平衡

一、消费者组

1. 简述

消费者组,既 Consumer Group。Consumer Group 是 Kafka 提供的可扩展且具有容错性的消费者机制。

一个消费者组有多个消费者,他们共享一个公共的 ID,这个 ID 被称为 Group ID组内的所有消费者协调在一起来消费订阅主题下的所有分区。

我们之前讲过 点对点模型和发布/订阅模型点对点模型的缺点在于,当我我们消费完一批数据之后,消息队列会将该笔数据进行删除,这种模型的 伸缩性 很差。而反观我们的发布/订阅模型,虽然数据允许多个消费者消费,但是他的伸缩性也不高,因为每个订阅者都要订阅主题的所有分区

我们有没有一种方法可以同时兼容这两种情况的?

那就是我们的消费者组,当我们的 Consumer Group 订阅了多个主题后,组内的每个实例只会消费一部分分区的消息。消费者组之间彼此独立,互不影响,能够订阅相同的一组主题而互不干涉。

Kafka 通过使用消费者组这一机制,实现了传统消息引擎的两大模型

如果所有实例都属于同一个 Group,那么它实现的就是消息队列模型;如果所有实例分别属于不同的 Group,那么它实现的就是发布 / 订阅模型。

理想情况下,Consumer 实例的数量应该等于该 Group 订阅主题的分区总数,相当于一个消费者实例对应一个分区。

  • Consumer 实例的数量 等于 该 Group 订阅主题的分区总数

  • Consumer 实例的数量 小于 该 Group 订阅主题的分区总数

  • Consumer 实例的数量 大于 该 Group 订阅主题的分区总数

针对我们的消费者组,我们的 offset 是怎么进行管理的呢?

对于我们的消费组而言,使用 KV 对来进行表示,Key 是分区,Value 对应该分区的位移。使用我们的 Java 大概是这种:Map<TopicPartition, Long>

这里简单提一个概念,Kafka 之间的版本将 offset 放在我们的 Zookeeper 中,但后来发现,Zookeeper 这种框架不适合大量的写更新,会拖慢我们 Zookeeper 的性能,最终 Kafka 社区将 offset 放入到我们 Kafka 内部主题。也就是 _consumer_offset

2. 重平衡

2.1 简介

重平衡(Rebalance)本质上是一种协议,规定了一个 Consumer Group 下的所有 Consumer 如何达成一致,来分配订阅 Topic 的每个分区。

简单来说,比如我们某个 Group 有 20 个Consumer 实例,订阅了一个 100 分区的 Topic。正常情况下,Kafka 会为每个 Consumer 分配 5 个分区,这就叫 重平衡

重平衡触发的条件:

  • 组成员发生变更:Consumer 实例加入或离开消费组
  • 订阅主题数发生变更:新增符合条件的主题
  • 订阅主题分区数发生变更:新增一个主题的分区数

当重平衡发生时,消费组的所有 Consumer 都会协调在一起共同参与。

Kafka 提供 3 种分配策略,每一种都有优势和劣势,每一种具体的策略以后再进行解读,我们目前记住,社区提供保证最公平的策略,不会出现:**有的实例会“闲死”,而有的实例则会“忙死” **这种情况的发生。



52b50a34cf3e9b1900d6e1e51ad185ac.png

2.2 重平衡的缺点

  • 重平衡对消费组的消费有重大的影响。在重平衡期间,所有 Consumer 都会停止消费,等待重平衡的完成。
  • 重平衡让所有的分区重新分配,比如我 A 本来消费分区1、2、3,如果重平衡后还继续消费分区1、2、3就会节省大量的时间。如果我们重新换分区的话,还需要重新连接 Broker,重新创建 TCP 连接,无法达到 TCP 连接复用的状态。
  • 重平衡的速度及其缓慢。











相关文章
|
1月前
|
消息中间件 Java Kafka
kafka入门demo
kafka入门demo
40 0
|
9月前
|
消息中间件 监控 关系型数据库
【Kafka系列】(一)Kafka入门(下)
【Kafka系列】(一)Kafka入门(下)
|
1月前
|
消息中间件 分布式计算 Kafka
SparkStreaming(SparkStreaming概述、入门、Kafka数据源、DStream转换、输出、关闭)
SparkStreaming(SparkStreaming概述、入门、Kafka数据源、DStream转换、输出、关闭)(一)
|
1月前
|
消息中间件 Java Kafka
Kafka【环境搭建 01】kafka_2.12-2.6.0 单机版安装+参数配置及说明+添加到service服务+开机启动配置+验证+chkconfig配置说明(一篇入门kafka)
【2月更文挑战第19天】Kafka【环境搭建 01】kafka_2.12-2.6.0 单机版安装+参数配置及说明+添加到service服务+开机启动配置+验证+chkconfig配置说明(一篇入门kafka)
83 1
|
1月前
|
消息中间件 存储 Kafka
Kafka【基础入门】
Kafka【基础入门】
36 1
|
1月前
|
消息中间件 网络协议 Kafka
Kafka【付诸实践 02】消费者和消费者群组+创建消费者实例+提交偏移量(自动、手动)+监听分区再平衡+独立的消费者+消费者其他属性说明(实例源码粘贴可用)【一篇学会使用Kafka消费者】
【2月更文挑战第21天】Kafka【付诸实践 02】消费者和消费者群组+创建消费者实例+提交偏移量(自动、手动)+监听分区再平衡+独立的消费者+消费者其他属性说明(实例源码粘贴可用)【一篇学会使用Kafka消费者】
107 3
|
1月前
|
消息中间件 负载均衡 Kafka
Kafka学习---消费者(分区消费、分区平衡策略、offset、漏消费和重复消费)
Kafka学习---消费者(分区消费、分区平衡策略、offset、漏消费和重复消费)
316 2
|
1月前
|
消息中间件 负载均衡 Kafka
Kafka - 3.x 分区分配策略及再平衡不完全指北
Kafka - 3.x 分区分配策略及再平衡不完全指北
106 0
|
1月前
|
消息中间件 存储 分布式计算
Apache Kafka-初体验Kafka(01)-入门整体认识kafka
Apache Kafka-初体验Kafka(01)-入门整体认识kafka
48 0
|
1月前
|
消息中间件 算法 Kafka
Kafka入门,这一篇就够了(安装,topic,生产者,消费者)
Kafka入门,这一篇就够了(安装,topic,生产者,消费者)
155 0

热门文章

最新文章