【问题标题】:Get the partition number of a record before producing in Kafka在Kafka生产前获取一条记录的分区号
【发布时间】:2021-03-02 22:45:35
【问题描述】:

我需要知道 Kafka 记录所在的 Kafka 主题的分区号。

执行前

producer.send(record); 

有没有办法知道该记录到哪个分区?

【问题讨论】:

    标签: java apache-kafka kafka-producer-api kafka-topic


    【解决方案1】:

    AFAIK 不可能使用默认的循环分区程序。如果您指定一个密钥,您可以从 Producer 源代码中获取默认算法并尝试预测(类似于hash(key) % num.partitions) 如果您使用自定义分区程序,您会处理它并且已经知道。 我想知道 ProducerInterceptor 但它在分配分区之前提供信息,如您从文档中看到的那样。

    https://kafka.apache.org/26/javadoc/org/apache/kafka/clients/producer/ProducerInterceptor.html

    【讨论】:

      【解决方案2】:

      我在这里看到三个选项:

      • 您可以在 ProducerRecord 中指定分区,如 ProducerRecord class 的构造函数中所示
      • 定义一个自定义分区器,如另一个post 所示
      • 利用名为DescribeTopicsResultAdminClient API 获取特定主题的分区数量信息,然后重新应用Kafka 使用的默认分区逻辑:
      kafka.common.utils.Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-31
        • 2010-10-11
        • 2017-10-31
        相关资源
        最近更新 更多