如何检查kafka中键分配给哪个分区?

Jal*_*Jal 5 apache-kafka kafka-consumer-api

我正在尝试调试一个问题,我试图证明如果集群没有重新平衡,每个不同的键只会转到 1 个分区。

所以我想知道对于给定的主题,有没有办法确定密钥发送到哪个分区?

cri*_*007 9

如此处源代码中所述

您需要byte[] keyBytes假设它不为空,然后使用org.apache.kafka.common.utils.Utils,您可以运行以下命令。

Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions;
Run Code Online (Sandbox Code Playgroud)

对于字符串或 JSON,它是 UTF8 编码的,Utils 类有帮助函数来获取它。
对于 Avro,例如 Confluent 序列化值,它有点复杂(一个魔术字节,然后是架构 ID,然后是数据)。见电线格式

只转到 1 个分区

这不是保证。哈希可能会发生冲突。

说一个给定的键不在多个分区中更有意义。

如果集群没有重新平衡

重新平衡仍将保留分区值。