Java Kafka 消费示例

Apache Kafka 是一个分布式流处理平台,它被广泛用于构建实时数据管道和流处理应用。在Kafka中,消息被分为生产者(Producer)和消费者(Consumer)。生产者将消息发送到Kafka集群中的topic,而消费者则从topic中读取消息。

本文将通过一个简单的Java示例来演示如何使用Kafka消费消息。

Kafka 消费流程

以下是Kafka消费消息的基本流程:

flowchart TD
    A(创建Kafka消费者) --> B(订阅Topic)
    B --> C(拉取消息)
    C --> D(处理消息)
  1. 创建Kafka消费者
  2. 订阅指定的Topic
  3. 拉取消息
  4. 处理消息

Java代码示例

1. 创建Kafka消费者

首先,我们需要创建一个Kafka消费者。下面是一个简单的Kafka消费者示例:

import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import java.util.Properties;

Properties props = new Properties();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.put(ConsumerConfig.GROUP_ID_CONFIG, "test-group");
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");

KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);

2. 订阅Topic

接下来,我们需要订阅一个指定的Topic:

consumer.subscribe(Arrays.asList("test-topic"));

3. 拉取消息

然后,我们可以通过poll()方法来拉取消息:

ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
for (ConsumerRecord<String, String> record : records) {
    System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
}

4. 处理消息

最后,我们可以对消费到的消息进行处理。在上面的代码中,我们简单地打印出了消息的offset、key和value。

完整示例

下面是一个完整的Kafka消费者示例:

import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import java.time.Duration;
import java.util.Arrays;
import java.util.Properties;

public class KafkaConsumerExample {
    public static void main(String[] args) {
        Properties props = new Properties();
        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
        props.put(ConsumerConfig.GROUP_ID_CONFIG, "test-group");
        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "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(Duration.ofMillis(100));
            for (ConsumerRecord<String, String> record : records) {
                System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
            }
        }
    }
}

总结

通过本文的示例,我们了解了如何使用Java来消费Kafka中的消息。Kafka消费者在实际应用中起着非常重要的作用,可以用于构建实时数据处理、日志收集等应用。

希望本文对您有所帮助,谢谢阅读!

pie
    title Kafka消息消费
    "处理消息" : 40
    "拉取消息" : 30
    "订阅Topic" : 20
    "创建消费者" : 10

以上就是Java Kafka消费示例的详细介绍,希望对您有所帮助!如果有任何疑问或建议,欢迎留言讨论。感谢阅读!