【发布时间】:2022-01-31 18:00:13
【问题描述】:
我想扩展 Kafka DefaultPartitioner 来定制一个。但是,我找不到访问消息头的方法,因为分区应该基于那里存在的值。
编辑 1: 任务不是基于键,而是基于标题中包含的另一个整数来选择分区。
【问题讨论】:
标签: java apache-kafka kafka-producer-api
我想扩展 Kafka DefaultPartitioner 来定制一个。但是,我找不到访问消息头的方法,因为分区应该基于那里存在的值。
编辑 1: 任务不是基于键,而是基于标题中包含的另一个整数来选择分区。
【问题讨论】:
标签: java apache-kafka kafka-producer-api
您无法访问自定义分区器类中的标头。但也许您可以根据您的标头值手动创建 ProducerRecord。
ProducerRecord 有许多重载的构造函数定义。其中一些有分区参数。您可以在此处指定分区号,该分区号表示您的 ProducerRecord 将进入哪个分区。
例如
ProducerRecord<String,String> rec = new ProducerRecord(topic, partitionNo, key, value);
否则,您必须将特定的标头值嵌入键或值对象中,然后在分区器类中访问它。
【讨论】:
ProducerInterceptor接口也可以注入/覆盖头信息
return new ProducerRecord(..., headers)