文章目录
名词解释
名词 | 解释 |
---|---|
Producer | 消息的生成者 |
Consumer | 消息的消费者 |
ConsumerGroup | 消费者组,可以并行消费Topic中的partition的消息 |
Broker | 缓存代理,Kafka集群中的一台或多台服务器统称broker. |
Topic | Kafka处理资源的消息源(feeds of messages)的不同分类 |
Partition | Topic物理上的分组,一个topic可以分为多个partion,每个partion是一个有序的队列。partion中每条消息都会被分 配一个 有序的Id(offset) |
Message | 消息,是通信的基本单位,每个producer可以向一个topic(主题)发布一些消息 |
Coordinator | Coordinator一般指的是运行在broker上的group Coordinator,用于管理Consumer Group中各个成员,每个KafkaServer都有一个GroupCoordinator实例,管理多个消费者组,主要用于offset位移管理和Rebalance |
kafka 队列分区
topic 队列 与 partition 分区
topic
是逻辑概念,partition
是物理概念partition
对用户是透明的,producer
只需要关心把消息发送到哪一个topic
,而consumer
只需要订阅自己的topic
即可
优势
- 水平拓展,如果
topic
的数据都存在一个broker
上,这个节点的性能就是瓶颈,无法做到水平扩展。 - 这样,
producer
可以将数据发送给多个broker
上的多个partition
,consumer
也可以并行从多个broker
上的不同paritition
上读数据,实现了水平扩展
kafka 消费者组
Consumer 消费者 与 ConsumerGroup 消费者组
group id
相同的消费者Consumer
,是一个消费者组ConsumerGroup
- 组内所有消费者
Consumer
,协调在一起来消费订阅队列topic
中的所有分区partition
- 每个分区
partition
只能由同一个消费组ConsumerGroup
内的一个consumer
来消费
消费者 与 分区
-
队列
T1
有4个分区(0-3),消费者组G1
有一个消费者实例C1
,C1
会消费所有分区中的消息
-
G1
新增消费者实例C2
,那么每个消费者将会分别收到两个分区的消息
-
G1
增加到四个消费者,这时,每个消费者接收一个分区的消息
-
但如果我们继续增加消费者到这个消费组,剩余的消费者将会空闲,不会收到任何消息
kafka 重平衡
重平衡 Rebalance
- 重平衡
rebalance
本质上是一组协议,规定了一个消费者组ConsumerGroup
下的所有消费者consumer
如何达成一致来分配订阅队列topic
的每个分区partition
- 上面介绍消费者与分区时,
G1
增加了消费者,kafka就会重新分配每个分区和消费者的对应关系。这个分配的过程就叫rebalance
Rebalance触发时机
- 分区
partition
个数的增加,手动新增队列的分区 - 对
Topic
的订阅发生变化,使用正则订阅topic
,新增的topic
符合正则规则 ConsumerGroup
组成员发生变更(常见问题)- 新的
Consumer
入组 - 已有
Consumer
离开组或者崩溃 - 消费过慢,导致kafka以为
Consumer
挂了,导致重平衡(重点问题)
- 新的
Rebalance 过程
Rebalance Generation
它表示了rebalance
之后的一届成员,主要是用于保护consumer group
,隔离无效offset提交的。比如上一届的consumer
成员是无法提交位移到新一届的consumer group
中。这也是为什么Rebalance
会导致重复消费的原因。
每次group进行rebalance之后,generation号都会加1,表示group进入到了一个新的版本