Apache camel 使用Camel-Kafka时是否可以访问Kafka分区的数量?
使用camel-kafka时,是否有方法a)调用默认的kafka分区器,和/或b)确定分区算法中使用的主题的分区数?在骆驼处理器中,我目前拥有Apache camel 使用Camel-Kafka时是否可以访问Kafka分区的数量?,apache-camel,apache-kafka,Apache Camel,Apache Kafka,使用camel-kafka时,是否有方法a)调用默认的kafka分区器,和/或b)确定分区算法中使用的主题的分区数?在骆驼处理器中,我目前拥有 exchange.getIn().setHeader(KafkaConstants.PARTITION_KEY, partition); 但是我不能在不知道有多少分区可用的情况下为partition选择一个值。我可以用Camel做这件事吗,还是需要“原生”并调用KafkaProducer.partitions来执行?我找到了答案。我可以通过忽略设置Ka
exchange.getIn().setHeader(KafkaConstants.PARTITION_KEY, partition);
但是我不能在不知道有多少分区可用的情况下为
partition
选择一个值。我可以用Camel做这件事吗,还是需要“原生”并调用KafkaProducer.partitions来执行?我找到了答案。我可以通过忽略设置KafkaConstants.PARTITION\u KEY
头来调用默认分区器
我可以通过将Partitioner指定为Camel选项来使用它的自定义实现:
from(...)
...
.to("kafka:{{kafka.host}}:{{kafka.port}}"
+ "?topic={{kafka.topic}}"
+ "&partitioner=my.package.MyPartitioner");
在MyPartitioner中,我可以通过集群
参数获取分区信息:
@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 ...
}
@覆盖
公共int分区(字符串主题,
对象键,字节[]键字节,对象值,字节[]值字节,
群集(群集){
列表分区=cluster.availablePartitionsForTopic(主题);
//使用partitions.size()。。。
返回。。。
}
我找到了答案。我可以通过忽略设置KafkaConstants.PARTITION\u KEY
头来调用默认分区器
我可以通过将Partitioner指定为Camel选项来使用它的自定义实现:
from(...)
...
.to("kafka:{{kafka.host}}:{{kafka.port}}"
+ "?topic={{kafka.topic}}"
+ "&partitioner=my.package.MyPartitioner");
在MyPartitioner中,我可以通过集群
参数获取分区信息:
@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 ...
}
@覆盖
公共int分区(字符串主题,
对象键,字节[]键字节,对象值,字节[]值字节,
群集(群集){
列表分区=cluster.availablePartitionsForTopic(主题);
//使用partitions.size()。。。
返回。。。
}