Java 如何将自定义分区与KafkaSender.send方法()一起使用?
我创建了一个自定义分区器类,它扩展了默认分区器 问题:我想在KafkaSender.send方法()中添加此自定义分区程序 KafkaSender.send方法()代码: sender.send(Flux.just(SenderRecord.create(newproducerrecord(主题、分区、键、记录、记录头)、1))) 这里的分区器是一个整数 自定义分区器代码:Java 如何将自定义分区与KafkaSender.send方法()一起使用?,java,apache-kafka,partitioning,spring-kafka,Java,Apache Kafka,Partitioning,Spring Kafka,我创建了一个自定义分区器类,它扩展了默认分区器 问题:我想在KafkaSender.send方法()中添加此自定义分区程序 KafkaSender.send方法()代码: sender.send(Flux.just(SenderRecord.create(newproducerrecord(主题、分区、键、记录、记录头)、1))) 这里的分区器是一个整数 自定义分区器代码: public class CustomPartitioner extends DefaultPartitioner { p
public class CustomPartitioner extends DefaultPartitioner {
private final static String CHAR_FORMAT = "UTF-8";
@Override
public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) {
// my logic
try {
return super.partition(topic, key, iocKey.toString().getBytes(CHAR_FORMAT), value, valueBytes, cluster);
} catch (UnsupportedEncodingException e) {
//error message
}
}
}
注意:我试图用下面的代码硬编码
Properties properties = new Properties();
properties.put("partitioner.class", "CustomPartitioner ");
如何强制KafkaSender.send method()使用我们的自定义分区器?您必须将属性映射作为生产者配置的一部分传递给kafkaTemplatebean
@Bean
public KafkaTemplate<String, String> kafkaTemplate() {
Map<String, Object> configProps = new HashMap<>();
configProps.put("partitioner.class", "<packagename>.CustomPartitioner");
return new KafkaTemplate<>(configProps );
}
@Bean
公共卡夫卡模板卡夫卡模板(){
Map configProps=new HashMap();
configProps.put(“partitioner.class”和“.CustomPartitioner”);
返回新的KafkaTemplate(configProps);
}
但是KafkaSender.send方法()将如何获取此属性?另外,我们应该在这里传递什么sender.send(Flux.just(SenderRecord.create(newproducerrecord(主题、分区、键、记录、记录头),1)))KafkaTemplate.send()是使用Spring Kafka向Kafka发送消息的API。所以它会在内部连接。好的,所以我不应该使用Kafkander.send(),而应该使用KafkaTemplate.send()?Kafkander
来自reactor kafka
;您需要在defaultkafkander
的ProducerFactory
中设置属性。因此,使用KafkaTemplate可以设置defaultkafkander的ProducerFactory的属性