我们可以为 kafka 主题指定自定义分区器。因此,kafka 生产者可以根据某些自定义算法确定性地将消息发送到特定分区。
现在的问题是,当我增加分区数量时,kafka 将如何在新分区之间重新分配现有消息?或者 Kafka 不会将消息分发到新分区?是否有可能触发这种重新分配?如果是这样,那么 kafka 将如何知道自定义分区器,因为那段代码驻留在生产者部分?
我们可以为 kafka 主题指定自定义分区器。因此,kafka 生产者可以根据某些自定义算法确定性地将消息发送到特定分区。
现在的问题是,当我增加分区数量时,kafka 将如何在新分区之间重新分配现有消息?或者 Kafka 不会将消息分发到新分区?是否有可能触发这种重新分配?如果是这样,那么 kafka 将如何知道自定义分区器,因为那段代码驻留在生产者部分?
当我增加分区数量时,kafka 将如何在新分区之间重新分配现有消息?
它不会重新分发现有消息。
是否有可能触发这种重新分配?
我不知道有什么使这成为可能。请记住,将消息放入特定分区将确保这些消息在分区内的顺序。由于这可能是您的应用程序的一项非常重要的要求,因此在现有分区中随机播放消息是非常危险的。
如果是这样,那么 kafka 将如何知道自定义分区器,因为那段代码驻留在生产者部分?
确切地说,Kafka 甚至不知道如何在新旧分区之间平衡现有消息。它只能在随机的基础上完成,这对于消息的排序是非常危险的(参见第二个问题的答案)。
我们可以为 kafka 主题指定自定义分区器。
只是想强调自定义分区器始终在生产者级别使用,您不能为主题指定分区器。想象一下有多个生产者写同一主题的有效场景。每个生产者都可以有一个单独的分区逻辑。