【问题标题】:How to read headers in kafka partitioner如何在 kafka 分区器中读取标头
【发布时间】:2022-01-31 18:00:13
【问题描述】:

我想扩展 Kafka DefaultPartitioner 来定制一个。但是,我找不到访问消息头的方法,因为分区应该基于那里存在的值。

编辑 1: 任务不是基于键,而是基于标题中包含的另一个整数来选择分区。

【问题讨论】:

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


    【解决方案1】:

    您无法访问自定义分区器类中的标头。但也许您可以根据您的标头值手动创建 ProducerRecord。

    ProducerRecord 有许多重载的构造函数定义。其中一些有分区参数。您可以在此处指定分区号,该分区号表示您的 ProducerRecord 将进入哪个分区。

    例如 ProducerRecord<String,String> rec = new ProducerRecord(topic, partitionNo, key, value);

    否则,您必须将特定的标头值嵌入键或值对象中,然后在分区器类中访问它。

    【讨论】:

    • 对于不能修改ProducerRecord构造函数的框架,ProducerInterceptor接口也可以注入/覆盖头信息
    • 我试过 ProducerInterceptor。但是只有键和值对象被注入。我在那里看不到标题。
    • 应该可以使用return new ProducerRecord(..., headers)
    • @OneCricketeer 我不确定我是否在关注这个对话。您能否进一步详细说明并提供示例实现?
    • @OneCricketeer 该任务不是根据键而是根据标头中包含的另一个整数来选择分区。如果我实现一个ProducerInterceptor,我可以使用Reflection来根据header修改分区,但是这个超级脏。其他想法?
    猜你喜欢
    • 2020-07-30
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 2016-04-29
    相关资源
    最近更新 更多