我正在使用camel-kafka版本2.19.2,我在Camels网站上发布了文档 - camel-kafka,然后在此处发布此问题。
我看到有以下示例用于生成消息。
Producing messages:
from("direct:start").process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setBody("Test Message from Camel Kafka Component Final",String.class);
exchange.getIn().setHeader(KafkaConstants.PARTITION_KEY, 0);
exchange.getIn().setHeader(KafkaConstants.KEY, "1");
}
}).to("kafka:localhost:9092?topic=test");
如您所见,存在KafkaConstants.PARTITION_KEY
和KafkaConstants.KEY
另外,对于这些信息,我有一个带有4个分区的kafka主题。
我和他们两个玩了,我明白KafkaConstants.KEY
充当消息密钥,这个密钥将用于确定消息所在的分区。
KafkaConstants.PARTITION_KEY
是我在尝试设置分区号时感到困惑的,但它仍然将消息发送到所有4个分区。
任何人都可以指定这两个KafkaConstants之间的区别吗?具体是KafkaConstants.PARTITION_KEY
用于什么?
编辑:更正了正在使用的骆驼版本。
答案 0 :(得分:1)
来自2.21.0-SNAPSHOT docs的github doc:
KEY: 记录键(如果未指定键,则为null)。如果已配置此选项,则它优先于标题链接KafkaConstants.KEY
PARTITION_KEY: 要将记录发送到的分区(如果未指定分区,则为null)。如果已配置此选项,则它优先于标题链接KafkaConstants.PARTITION_KEY
为了完整性:
在卡夫卡:
该密钥用于群集内的智能和高效数据分发。根据密钥,Kafka将数据发送到特定分区并确保其复制(配置)。
正如你在Apache Camel项目的Camel-Kafka的主分支中看到的那样:
您需要指定一个键才能使用您在骆驼路线中指定的分区键。