Apache kafka 卡夫卡分区为空
我使用SpringKafka模板将消息写入kafka主题,下面的API用于发布消息Apache kafka 卡夫卡分区为空,apache-kafka,spring-kafka,kafka-producer-api,Apache Kafka,Spring Kafka,Kafka Producer Api,我使用SpringKafka模板将消息写入kafka主题,下面的API用于发布消息 public ListenableFuture发送(字符串主题,K键,@Nullable V data){…} 使用此API的好处是它返回一个sendResult对象,该对象包含一些元数据,如主题、分区、标题等。我有一个回调,在成功时打印sendResult。现在的问题是,分区被打印为空 我没有回电话,而是尝试将此更改为 future.get(10,TimeUnit.SECONDS) 以获得结果。即使这样,分区也
public ListenableFuture发送(字符串主题,K键,@Nullable V data){…}
使用此API的好处是它返回一个sendResult对象,该对象包含一些元数据,如主题、分区、标题等。我有一个回调,在成功时打印sendResult。现在的问题是,分区被打印为空
我没有回电话,而是尝试将此更改为
future.get(10,TimeUnit.SECONDS)
以获得结果。即使这样,分区也被打印为空。有人能告诉我这是什么原因吗?这是卡夫卡的默认行为吗?您可能需要在
SendResult.getRecordMetadata()
中查找该信息,而不是getProducerRecord()
ProducerRecord
不会被KafkaProducer
修改。因此,您使用的API最终是这样的:
public ListenableFuture<SendResult<K, V>> send(String topic, K key, @Nullable V data) {
ProducerRecord<K, V> producerRecord = new ProducerRecord<>(topic, key, data);
return doSend(producerRecord);
}
public ListenableFuture发送(字符串主题,K键,@Nullable V data){
ProducerRecord ProducerRecord=新的ProducerRecord(主题、键、数据);
返回doSend(生产记录);
}
其中,ProducerRecord
的分区
属性实际上是null
另一方面,RecordMetadata
,实际上是在服务器应答之后构建的。
您可以从其
partition()
选项中获取所需信息。RightSendResult[producerRecord=producerRecord(主题=topic-1,分区=null,标题=RecordHeaders(标题=[],isReadOnly=true),键=null,值=foo,时间戳=null),记录元数据=topic-1-0@0]
@Artem Bilen RecordMetaData中的分区方法确实在打印主题。谢谢。