【问题标题】:How to balance messages in kafka topics with newly added partitions如何平衡 kafka 主题中的消息与新添加的分区
【发布时间】:2019-06-20 15:04:15
【问题描述】:
我的 kafka 集群具有某些分区太少的主题,因此收集了大量积压的消息。在我添加了额外的分区后,只有新消息在所有新分区之间平衡。
在所有新分区之间平衡原始分区内“旧”消息积压的首选方法是什么?
我想再次读取和写入所有积压到该主题的消息并相应地更新偏移量,但如果新的消费者组从该主题的开头开始消费,则会产生重复消息。
【问题讨论】:
标签:
apache-kafka
kafka-consumer-api
kafka-producer-api
【解决方案1】:
您可以reassign partitions 到新的代理,但是将现有的分区段移动到其他代理是行不通的。
您需要消耗所有数据,将其推送到具有更多分区的新主题上,以便将其分散回来,如果您真的关心该数据不会被消费者重复读取,则需要跟踪哪些数据数据已被消费,理想情况下是由生产者端生成的一些 UUID 而不仅仅是偏移量或时间戳。或者您可以协调停止生产者,让您的消费者阅读剩余的消息,然后将生产者和消费者迁移到具有更多分区的全新主题。