Java项目中消费者消费消息时如何获得消息的partition
时间: 2024-02-24 17:55:27 浏览: 59
在 Java 项目中消费 Kafka 消息时,可以通过 ConsumerRecord 中的 partition() 方法获取当前消费的消息所在的 partition。ConsumerRecord 是 Kafka 提供的一个消费者记录,每个记录都包含了消息的 key、value、topic、partition、offset 和时间戳等信息。
下面是一个简单的示例代码,演示如何获取消费的消息所在的 partition:
```
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import java.util.Arrays;
import java.util.Properties;
public class KafkaConsumerExample {
public static void main(String[] args) {
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "test-group");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Arrays.asList("test-topic"));
while (true) {
ConsumerRecords<String, String> records = consumer.poll(100);
for (ConsumerRecord<String, String> record : records) {
System.out.printf("partition = %d, offset = %d, key = %s, value = %s%n",
record.partition(), record.offset(), record.key(), record.value());
}
}
}
}
```
在上面的代码中,我们可以通过 ConsumerRecord 的 partition() 方法获取当前消费的消息所在的 partition,然后打印出来。每当消费到一条消息时,就会打印出该消息的 partition、offset、key 和 value 等信息。
需要注意的是,消费者只能获取到当前消费的消息所在的 partition,而不能获取到所有 partition 的信息。如果需要获取所有 partition 的信息,可以通过 Kafka 的 AdminClient API 来实现。
阅读全文