大数据

Kafka消费者组

2019-08-22  本文已影响1人  阿猫阿狗Hakuna

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

Consumer Group有以下三个特性:

传统消息引擎有两种模型:点对点模型和发布/订阅模型。前者的特性是消息一旦被消费,就会从队列中被删除,且只能被下游的一个Consumer消费,这样造成的问题是伸缩性不高。后者允许消息被多个Consumer消费,但是其伸缩性也不高,因为每个订阅者都必须要订阅主题的所有分区。

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

一个Group下该有多少个Consumer实例?
理想情况下,Consumer实例的数量应该等于该Group订阅topic的分区数量。

Consumer Group如何管理位移?
消费者在消费过程中需要记录消费了多少数据,即Offset。对于Consumer Group来说,它是一组KV对,Key是分区,V对应Consumer消费该分区的最新位移。

新旧版本的Consumer Group管理位移方式不同
老版本是把位移保存在Zookeeper中。但是Zookeeper不适合进行频繁的写更新,而Consumer Group的位移更新时一个非常频繁的操作,这会极大拖慢Zookeeper的性能。
所以在新版本中,重新设计为将offset保存在Kafka内部主题的方法,也就是__consumer_offsets。

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

Rebalance的触发条件有三个:

Rebalance对Consumer Group消费过程的影响
Rebalance过程中,所有Consumer实例都会停止消费,等待Rebalance完成。

上一篇 下一篇

猜你喜欢

热点阅读