Kafka 分区为空
Kafka Partition is null
我正在使用 spring kafka 模板向 kafka 主题写入消息,下面 API 用于发布消息。
public ListenableFuture<SendResult<K, V>> send(String topic, K key, @Nullable V data) {... }
使用这个 API 的好处是它 returns 一个 sendResult object 它有一些元数据,如主题、分区、headers 等。我有一个onSuccess 时打印 sendResult 的回调。现在的问题是,分区被打印为空。
我尝试将其更改为
future.get(10, TimeUnit.SECONDS)
获取发送结果。即使这样,分区也被打印为空。任何人都可以让我知道这可能是什么原因吗?这是kafka的默认行为吗?
您可能需要在 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);
}
其中 ProducerRecord
的 partition
属性 确实是 null
.
另一方面,RecordMetadata
确实是在服务器响应后已经构建的。
您可以从其 partition()
选项中获取所需信息。
我正在使用 spring kafka 模板向 kafka 主题写入消息,下面 API 用于发布消息。
public ListenableFuture<SendResult<K, V>> send(String topic, K key, @Nullable V data) {... }
使用这个 API 的好处是它 returns 一个 sendResult object 它有一些元数据,如主题、分区、headers 等。我有一个onSuccess 时打印 sendResult 的回调。现在的问题是,分区被打印为空。
我尝试将其更改为
future.get(10, TimeUnit.SECONDS)
获取发送结果。即使这样,分区也被打印为空。任何人都可以让我知道这可能是什么原因吗?这是kafka的默认行为吗?
您可能需要在 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);
}
其中 ProducerRecord
的 partition
属性 确实是 null
.
另一方面,RecordMetadata
确实是在服务器响应后已经构建的。
您可以从其 partition()
选项中获取所需信息。