使用camel-kafka时,有没有办法a)调用默认的Kafka分区器,和/或b)确定用于分区算法的主题的分区数?在Camel处理器中我目前有
exchange.getIn().setHeader(KafkaConstants.PARTITION_KEY, partition);
但我不能在不知道有多少分区可用的情况下为partition
选择值。我可以用Camel做这件事,还是我需要"去当地"并调用KafkaProducer.partitionsFor
?
答案 0 :(得分:1)
我找到了答案。我只需省略设置KafkaConstants.PARTITION_KEY
标题即可调用默认分区程序。
我可以通过将其指定为Camel选项来使用Partitioner的自定义实现:
from(...)
...
.to("kafka:{{kafka.host}}:{{kafka.port}}"
+ "?topic={{kafka.topic}}"
+ "&partitioner=my.package.MyPartitioner");
在MyPartitioner中,我可以通过cluster
参数获取分区信息:
@Override
public int partition(String topic,
Object key, byte[] keyBytes, Object value, byte[] valueBytes,
Cluster cluster) {
List<PartitionInfo> partitions = cluster.availablePartitionsForTopic(topic);
// use partitions.size()...
return ...
}