版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}
}