Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache camel 使用Camel-Kafka时是否可以访问Kafka分区的数量?_Apache Camel_Apache Kafka - Fatal编程技术网

Apache camel 使用Camel-Kafka时是否可以访问Kafka分区的数量?

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

使用camel-kafka时,是否有方法a)调用默认的kafka分区器,和/或b)确定分区算法中使用的主题的分区数?在骆驼处理器中,我目前拥有

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()。。。
返回。。。
}