我们可以为Kafka主题指定自定义分区器。因此,kafka生产者可以根据特定的定制算法确定地将消息发送到特定的分区。现在的问题是,当我增加分区的数量时,kafka将如何在新分区之间重新分配现有的消息?或者Kafka不会将消息分发到新分区?有没有可能引发这种再分配?如果是这样的话,那么kafka将如何了解自定义分区器,因为这段代码驻留在producer部分中?
14ifxucb1#
当我增加分区的数量时,kafka将如何在新分区之间重新分配现有的消息?它不会重新分发现有的消息。有没有可能引发这种再分配?我不知道有什么能让这成为可能。请记住,将消息放入特定分区将确保分区内这些消息的顺序。因为这可能是应用程序的一个非常重要的要求,所以在现有分区中来回移动消息是非常危险的。如果是这样的话,那么kafka将如何了解自定义分区器,因为这段代码驻留在producer部分中?确切地说,Kafka甚至不知道如何平衡新旧分区之间的现有消息。它只能在随机的基础上进行,这对消息的排序是相当危险的(参见对第二个问题的回答)。我们可以为Kafka主题指定自定义分区器。只是想强调一下,自定义分区器总是在生产者级别使用,不能为主题指定分区器。想象一个有效的场景,在这个场景中,有多个生产者在为同一个主题写作。每个生产者可以有一个单独的分区逻辑。
1条答案
按热度按时间14ifxucb1#
当我增加分区的数量时,kafka将如何在新分区之间重新分配现有的消息?
它不会重新分发现有的消息。
有没有可能引发这种再分配?
我不知道有什么能让这成为可能。请记住,将消息放入特定分区将确保分区内这些消息的顺序。因为这可能是应用程序的一个非常重要的要求,所以在现有分区中来回移动消息是非常危险的。
如果是这样的话,那么kafka将如何了解自定义分区器,因为这段代码驻留在producer部分中?
确切地说,Kafka甚至不知道如何平衡新旧分区之间的现有消息。它只能在随机的基础上进行,这对消息的排序是相当危险的(参见对第二个问题的回答)。
我们可以为Kafka主题指定自定义分区器。
只是想强调一下,自定义分区器总是在生产者级别使用,不能为主题指定分区器。想象一个有效的场景,在这个场景中,有多个生产者在为同一个主题写作。每个生产者可以有一个单独的分区逻辑。