kafka的consumer的例子

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tiantao2012/article/details/88308880
完整利用kafka producer和consumer 使用完整的例子如下:
public class KafkaConsumerProducerDemo {
    public static void main(String[] args) {
#决定消息是同步发送还是异步发发送
        boolean isAsync = args.length == 0 || !args[0].trim().equalsIgnoreCase("sync");
#新建producer的线程,这里指定要发送消息的TOPIC
        Producer producerThread = new Producer(KafkaProperties.TOPIC, isAsync);
        producerThread.start();
#新建接收的consumer线程,注意这里执行consumer和producer的TOPIC 是一样
        Consumer consumerThread = new Consumer(KafkaProperties.TOPIC);
        consumerThread.start();

    }
}

producer 之前已经分析过了,我们重点看看consumer是如何接收消息的 
public class Consumer extends ShutdownableThread {
    private final KafkaConsumer<Integer, String> consumer;
    private final String topic;

    public Consumer(String topic) {
        super("KafkaConsumerExample", false);
        Properties props = new Properties();
#设置consumer的参数
        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, KafkaProperties.KAFKA_SERVER_URL + ":" + KafkaProperties.KAFKA_SERVER_PORT);
        props.put(ConsumerConfig.GROUP_ID_CONFIG, "DemoConsumer");
        props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "true");
        props.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG, "1000");
        props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, "30000");
        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.IntegerDeserializer");
        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");
#新建一个KafkaConsumer
        consumer = new KafkaConsumer<>(props);
#指定要接收的topic
        this.topic = topic;
    }

    @Override
    public void doWork() {
#这里是工作线程,首先订阅要接收的topic
        consumer.subscribe(Collections.singletonList(this.topic));
#开始poll 要接收的数据
        ConsumerRecords<Integer, String> records = consumer.poll(Duration.ofSeconds(1));
#将接收到的数据打印出来
        for (ConsumerRecord<Integer, String> record : records) {
            System.out.println("Received message: (" + record.key() + ", " + record.value() + ") at offset " + record.offset());
        }
    }

    @Override
    public String name() {
        return null;
    }

    @Override
    public boolean isInterruptible() {
        return false;
    }
}

猜你喜欢

转载自blog.csdn.net/tiantao2012/article/details/88308880