【发布时间】:2021-03-02 22:45:35
【问题描述】:
我需要知道 Kafka 记录所在的 Kafka 主题的分区号。
执行前
producer.send(record);
有没有办法知道该记录到哪个分区?
【问题讨论】:
标签: java apache-kafka kafka-producer-api kafka-topic
我需要知道 Kafka 记录所在的 Kafka 主题的分区号。
执行前
producer.send(record);
有没有办法知道该记录到哪个分区?
【问题讨论】:
标签: java apache-kafka kafka-producer-api kafka-topic
AFAIK 不可能使用默认的循环分区程序。如果您指定一个密钥,您可以从 Producer 源代码中获取默认算法并尝试预测(类似于hash(key) % num.partitions)
如果您使用自定义分区程序,您会处理它并且已经知道。
我想知道 ProducerInterceptor 但它在分配分区之前提供信息,如您从文档中看到的那样。
https://kafka.apache.org/26/javadoc/org/apache/kafka/clients/producer/ProducerInterceptor.html
【讨论】:
我在这里看到三个选项:
AdminClient API 获取特定主题的分区数量信息,然后重新应用Kafka 使用的默认分区逻辑:kafka.common.utils.Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions;
【讨论】: