Kafka支持在主题中动态添加新分区。因此,假设最初我有一个主题T,它有两个分区P0、P1和三个密钥K0、K1、K2的密钥空间。进一步假设我在生产者处使用某种散列分区器模2(分区数(,将(K0(映射到P0,将(K1,K2(映射到P1。让我们进一步假设我有两个消费者C0用于P0,C1用于P1。为了简单起见,消费者正在进行一些基于密钥的基本聚合(存储在一些KV中(
几分钟后,假设我在T中添加了一个新的分区P2。所以现在我的生产者将自动(一旦检测到新的分区数量(使用相同的散列分区器modulo 3。因此,现在假设映射密钥分区变为(K0,P0(、(K1,P1(、(K2,P2(。
-
在这种情况下,已经写入P1的K2值(在添加新分区P2之前(会发生什么。如果我想让所有相同的密钥记录始终映射到同一个分区,即使添加了新的主题分区,该怎么办。也就是说,我不希望我的K2记录分布在分区P1和P2之间。卡夫卡框架是否在某种程度上提供了这样的保障?或者应用程序必须处理这样的要求?
-
当添加新的分区P2,并且映射密钥分区变为(K0,P0(、(K1,P1(、(K2,P2(时,将触发再平衡过程。作为再平衡的结果,让我们假设P2被分配给C0。那么,C0如何从C1中的KV存储中获得K2的最新聚合值,而不是从零开始。在这种情况下,卡夫卡是否保证了国家向适当消费者的重组?或者应该由应用程序处理(如果有的话(?
谢谢。
-
无担保。记录不会被移动。旧分区中仍然存在旧密钥。分区器需要更新以保留旧的逻辑
-
假设您询问的是Kafka Streams,那么您可能希望在添加分区后运行应用程序重置命令,但您最终仍然会在应用程序的多个实例中分布状态,因为您将在多个分区上拥有密钥,因此您需要进行远程密钥库查找