kam*_*mbo 2 java apache-kafka spring-boot apache-kafka-streams
我有两个主题,一个带有3个分区,一个带有48个分区。
最初,我使用默认分配器,但是当使用者(kubernetes中的Pod)崩溃时遇到了一些问题。
发生的事情是,当吊舱再次出现时,它重新分配了带有3个分区的主题分区,分配了带有48个分区的主题分区0。
未崩溃的两个Pod从该主题分配了16个分区和32个分区,其中包含48个分区。
我已经通过使用循环分区分配器解决了这个问题,但是由于我使用的是kstream-kstream联接,因此现在我对分区的分布方式没有信心,为此,我们需要确保将使用者分配给相同的对象为所有使用者划分分区,例如C1:(t1:p0,t2:p0)C2(t1:p1,t2:p1)等。
我想到的一件事是,我可以重新输入即将发生的事件,以便它们可以重新分区,然后我可以保证这一点?
也许我不明白默认分区的工作方式。
Kafka Streams不允许使用自定义分区分配器。如果您自己设置一个,它将被StreamsPartitionAssignor[1] 覆盖。需要这样做,以确保在重新平衡期间将分区(如果可能)重新分配给相同的使用者(即粘性)。粘性对于Kafka Streams尽可能重用消费者方的状态存储很重要。如果未将分区重新分配给同一使用者,则在重新平衡后,需要从头重新创建该使用者中使用的状态存储。
| 归档时间: |
|
| 查看次数: |
485 次 |
| 最近记录: |