Java 如何将自定义分区与KafkaSender.send方法()一起使用?

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

我创建了一个自定义分区器类,它扩展了默认分区器

问题:我想在KafkaSender.send方法()中添加此自定义分区程序

KafkaSender.send方法()代码:

sender.send(Flux.just(SenderRecord.create(newproducerrecord(主题、分区、键、记录、记录头)、1)))

这里的分区器是一个整数

自定义分区器代码:

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的属性