gpt4 book ai didi

java - 了解 kafka 流分区分配器

转载 作者:行者123 更新时间:2023-12-02 12:20:30 26 4
gpt4 key购买 nike

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

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

发生的情况是,当 Pod 再次出现时,它从主题中重新分配了 3 个分区,并从主题中重新分配了 0 个分区 48。

没有崩溃的两个 Pod 被分配了来自具有 48 个分区的主题的 16 和 32 个分区。

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

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

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

最佳答案

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

关于java - 了解 kafka 流分区分配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55710913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com