4

通常需要在给定 Kafka 主题的同一分区中进行排序。也就是说,具有相同键的消息应该去同一个分区。现在,如果我想在正在运行的主题中添加新分区,如何制作并保持一致性?

据我了解,默认的分区策略是修改 num-of-partition 。当分区数发生变化时(例如从 4 到 5),一些消息可能会落入与先前具有相同键的消息不同的分区。

我可以想象实现一致的散列来自定义分区行为,但这可能是侵入性的。

或者,只是停止所有生产者,直到所有消息都被消耗完;然后部署新分区并重新启动所有生产者。

有更好的想法吗?

4

1 回答 1

5

正如您所说,当您增加主题中的分区数量时,您肯定会失去具有相同键的消息的顺序。

如果您尝试实现自定义分区器以将键一致地分配给分区,那么您将不会真正使用新分区。

我将创建一个具有所需分区数量的新主题,并让生产者写入该新主题。一旦旧主题的消费者处理完所有消息(即消费者滞后 = 0),您就可以让消费者从新主题中读取。

于 2020-04-30T18:45:53.500 回答