Joh*_*nny 5 apache-kafka kafka-consumer-api
我们在 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. 有没有办法确保从繁忙主题消费的消费者群体不会落在同一个经纪人上?不想创建热点。
提前致谢
小智 0
关于问题#1,至少在 Kafka-1.0.0 中是不可能的,它以“Utils.abs(groupId.hashCode) % groupMetadataTopicPartitionCount”的方式计算分区。所以对于同一个组id会落入同一个分区。
对于问题#2,首先,你的消费者是否能赶上生产者的速度。使用单个消费者就可以了。如果消费者滞后继续增加,那么您应该考虑使用组来加速。您应该记住,一组中的最大消费者受到您消费的主题的分区数量的限制。其次,从消费者的角度来看,该组也可以用作HA解决方案。
归档时间: |
|
查看次数: |
907 次 |
最近记录: |