首页 > 解决方案 > 如何在代码中计算 Kafka *会发送(并且之前确实发送过)*发送消息的分区?

问题描述

使用主题和 msg 键 Kafka 根据以下内容分配主题分区:

         ... Utils.Murmur2(bytes) % numPartitions ....

现在很容易找到 murmur2 代码。但是,murmur2 需要一个可以更改运行的种子。

我的问题:给定一个键,例如字节序列,我如何计算 Kafka使用这些相同的键字节将消息发送到哪个分区?假设分区一致。

有了这些信息,我可以在应用程序弹跳时在不同的分区侦听器中预先缓存一些信息。

标签: apache-kafkakafka-producer-api

解决方案


Kafka 中的种子是一致的。您可以在源代码中找到它

https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/utils/Utils.java#L394

因此,Utils.toPositive(Utils.murmur2(bytes)) % numPartitions这就是您所需要的一切


推荐阅读