一个 consumer group 中有多个 consumer,一个 topic 有多个 partition,所以必然会涉及
到 partition 的分配问题,即确定那个 partition 由哪个 consumer 来消费。
Kafka 有两种分配策略,一是 RoundRobin(轮询),一是 Range(范围)。
1)RoundRobin 按消费者组划分的
在这里插入图片描述
在这里插入图片描述
两个主题,每一个主题里面三个分区,一个消费者组有两个消费者,轮询的方式会利用哈希算法把这六个进行排序 ,然后轮流进两个消费者里面。这种方式的好处是各个消费者之间最多差一个,这就要保证消费组里面每一个消费者订阅的主题都是一样的,不然就可能出现错乱的情况,例如下面这种情况:
在这里插入图片描述
消费者也可以消费多个主题的内容,就像订阅多个公众号。
2)Range(默认用这个)
这个是按照单个主题分的,不是按照消费者组。7/3
在这里插入图片描述
在这里插入图片描述
这样A和B就会相差两个分区,随着主题的数目不断增大,消费者之间的数据量会悬差。
如果是A消费t1,B消费T2,就用Range,如果A和B订阅的主题一样就选轮询的方式。

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐