通常要求在给定Kafka主题的同一分区中订购。也就是说,具有相同密钥的消息应该进入相同的分区。现在,如果要在正在运行的主题中添加新分区,如何制作并保持一致性?
据我了解,默认的分区策略是对num-of-partition进行修改。当分区数更改时(例如4到5),某些邮件可能会与具有相同密钥的先前邮件落入不同的分区。
我可以为实现自定义分区行为而实现一致的哈希来进行映像,但这可能是侵入性的。
或者,只是停止所有生产者,直到所有消息都被消耗掉为止;然后部署新分区并重新启动所有生产者。
还有更好的主意吗?
答案 0 :(得分:2)
正如您所说,当您增加一个主题中的分区数时,您肯定会松开使用相同键的消息顺序。
如果您尝试实现自定义分区程序以将键的一致分配分配给分区,则您实际上不会使用新分区。
我将创建具有所需分区数量的新主题,并让制作人将其写入该新主题。旧主题的使用者处理完所有消息后(即消费者滞后= 0),就可以让消费者从新主题中读取内容。