pom.xml
引入依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients -->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>
创建生产者
MyProducer.java
import org.apache.kafka.clients.producer.*;
import org.apache.kafka.common.serialization.IntegerSerializer;
import org.apache.kafka.common.serialization.StringSerializer;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Properties;
import java.util.Scanner;
public class MyProducer {
public static void main(String[] args) throws IOException {
//定义配置属性
Properties properties = new Properties();
//设置生产者Broker服务器连接地址
properties.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "centos01:9092,centos02:9092,centos03:9092");
//序列化key程序类
properties.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
//序列化value程序类
properties.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
//定义消息生产者对象
Producer<String, String> producer = new KafkaProducer<String, String>(properties);
//发送消息
Scanner scan = new Scanner(System.in);
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String msg;
ArrayList<String> s = new ArrayList<>();
while ((msg = bf.readLine()) != null) {
if ("exit".equals(msg) || "quit".equals(msg)) {
break;
}
/*
//同步发送
try {
producer.send(new ProducerRecord<String, String>("topictest", "key", msg )).get();
} catch (Exception e) {
e.printStackTrace();
}
*/
//异步发送
producer.send(new ProducerRecord<String, String>("topictest", "key", msg), new Callback() {
@Override
public void onCompletion(RecordMetadata recordMetadata, Exception e) {
if (e != null) {
e.printStackTrace();
}
}
});
}
//关闭生产者,释放资源
producer.close();
}
}
创建消费者
MyConsumer.java
import org.apache.kafka.clients.consumer.*;
import org.apache.kafka.common.serialization.StringDeserializer;
import org.apache.kafka.common.serialization.StringSerializer;
import java.time.Duration;
import java.util.Arrays;
import java.util.Collections;
import java.util.Properties;
public class MyConsumer {
public static void main(String[] args) {
//定义配置属性
Properties properties = new Properties();
//设置消费者Broker服务器连接地址
properties.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "centos01:9092,centos02:9092,centos03:9092");
//反序列化key程序类
properties.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
//反序列化value程序类
properties.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
//消费者组id
properties.setProperty(ConsumerConfig.GROUP_ID_CONFIG, "groupId-1");
//定义消费者对象
Consumer<String, String> consumer = new KafkaConsumer<String, String>(properties);
consumer.subscribe(Collections.singletonList("topictest"));
//读消息
while (true) {
//拉取消息,并设置超时时间为100s
ConsumerRecords<String, String> consumerRecords = consumer.poll(Duration.ofSeconds(100));
consumerRecords.forEach(consumerRecord -> System.out.println(consumerRecord.value()));
}
}
}
运行程序
分别启动消费者程序和生产者程序
测试: