我们在 AWS 上运行了一个 16 节点的 kafka 集群,每个节点是一个 m4.xLarge EC2 实例,带有 2TB EBS(ST1) 磁盘。Kafka 版本是 0.10.1.0,我们目前有大约 100 个主题。一些繁忙的主题每天会有大约 20 亿个事件,一些低音量的主题每天只有数千个。
我们的大多数主题在生成消息时都使用 UUID 作为分区键,因此分区分布非常均匀。
我们使用消费者组从这个集群中消费了很多消费者。每个消费者都有一个唯一的组 ID。一些消费者组每 500 毫秒提交一次偏移量,一些消费者组会在处理完一批消息后立即同步提交偏移量。
最近我们观察到一些经纪人比其他经纪人更忙的行为。经过一番挖掘,我们发现实际上相当多的流量都流向了“__consumer_offsets”,因此我们创建了一个工具来查看“__consumer_offsets”中每个分区的高水印,这表明分区分布非常不均匀。
基于此链接“Kafka 中的消费者抵消管理”
这似乎是一种预期的行为,每个消费者组只有一个领导者,因此提交的偏移量都需要去这个领导者,并且也只使用“group.Id”来决定分区。
鉴于我们有一些消费者从那些非常繁忙的主题中消费,因此提交偏移量将导致大量流量到处理消费者组的代理上的“__consumer_offsets”主题。
我的问题是:
1. 有没有办法确保从繁忙主题消费的消费者群体不会落在同一个经纪人上?不想创建热点。
提前致谢