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

时间:2017-03-09 16:50:13

标签: apache-camel apache-kafka

使用camel-kafka时,有没有办法a)调用默认的Kafka分区器,和/或b)确定用于分区算法的主题的分区数?在Camel处理器中我目前有

exchange.getIn().setHeader(KafkaConstants.PARTITION_KEY, partition);

但我不能在不知道有多少分区可用的情况下为partition选择值。我可以用Camel做这件事,还是我需要"去当地"并调用KafkaProducer.partitionsFor

1 个答案:

答案 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 ...    
}