繁体   English   中英

了解kafka streams分区分配器

[英]Understanding kafka streams partition assignor

我有两个主题,一个有 3 个分区,一个有 48 个分区。

最初我使用默认分配器但是当消费者(kubernetes 中的 pod)崩溃时我遇到了一些问题。

发生的事情是,当 pod 再次出现时,它重新分配了主题中的分区 3 个分区和主题中的 0 分区 48。

没有崩溃的两个 pod 从具有 48 个分区的主题中分配了 16 和 32 个分区。

我已经通过使用循环分区分配器解决了这个问题,但现在我对分区的分配方式没有信心,因为我使用的是 kstream-kstream 连接,为此我们需要保证消费者被分配给相同的所有消费者的分区,例如 C1:(t1:p0, t2:p0) C2(t1:p1, t2:p1) 等。

我想到的一件事是,我可以重新键入传入的事件,以便它们重新分区,然后我可以保证这一点吗?

或者也许我不明白默认分区是如何工作的..我很困惑

Kafka Streams 不允许使用自定义分区分配器。 如果您自己设置一个,它将被StreamsPartitionAssignor [1] 覆盖。 这是为了确保——如果可能的话——在重新平衡期间将分区重新分配给相同的消费者(也称为粘性)。 粘性对于 Kafka Streams 能够尽可能多地重用消费者端的状态存储非常重要。 如果分区没有重新分配给同一个消费者,则需要在重新平衡后从头开始重新创建该消费者中使用的状态存储。

[1] https://github.com/apache/kafka/blob/9bd0d6aa93b901be97adb53f290b262c7cf1f175/streams/src/main/java/org/apache/kafka/streams/StreamsConfig.java#L989

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM