1. 下载最新的Kafka版本并提取:
解压kafka_2.13-3.5.0.tgz。
2. 启动Kafka服务
注意:您的本地环境必须安装Java 8+。
1 启动zookeeper服务
cd kafka_2.13-3.5.0/bin/windows
zookeeper-server-start.bat ../../config/zookeeper.properties
2. 启动Kafka broker 服务
cd kafka_2.13-3.5.0/bin/windows
kafka-server-start.bat ../../config/server.properties
好了,你现在有了一个基本的Kafka环境了
3. 创建一个Topic来存储消息
KAFKA是一个分布式事件流平台,可让您跨许多机器阅读,写作,存储和处理事件(也称为文档中的记录或消息)。
示例活动是付款交易,手机的地理位置更新,运输订单,物联网设备或医疗设备的传感器测量等等。 这些事件是组织并存储在主题中的。 非常简化,主题类似于文件系统中的文件夹,事件是该文件夹中的文件。
因此,在您编写第一个事件之前,您必须创建一个Topic。 打开另一个终端会话并运行:
kafka-topics.bat --create --topic quickstart-events --bootstrap-server localhost:9092
结果:
Created topic quickstart-events.
Kafka的所有命令行工具都有其他选项:运行Kafka-Topics.sh命令,而无需任何参数以显示用法信息。 例如,它还可以向您显示诸如新Topic的分区计数之类的详细信息:
kafka-topics.bat --describe --topic quickstart-events --bootstrap-server localhost:9092
结果
Topic: quickstart-events TopicId: iQ9QVKwkQ1epRjA-BnvxvA PartitionCount: 1 ReplicationFactor: 1 Configs:
Topic: quickstart-events Partition: 0 Leader: 0 Replicas: 0 Isr: 0
4. 写消息到Topic里
KAFKA客户端通过网络进行写作(或阅读)事件与Kafka经纪人进行通信。 收到后,经纪人将在您需要的时间内以持久和耐受性的方式存储活动。
运行控制台生产者客户端以将一些事件写入您的Topic。 默认情况下,您输入的每一行都将导致将单独的事件写入Topic。
kafka-console-producer.bat --topic quickstart-events --bootstrap-server localhost:9092
This is my first event
This is my second event
您可以随时使用CTRL-C停止生产者客户端。
Java实现发送消息
pom.xml
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>3.4.1</version>
</dependency>
Properties props = new Properties();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,org.apache.kafka.common.serialization.StringSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, org.apache.kafka.common.serialization.StringSerializer.class);
KafkaProducer producer = new KafkaProducer(props);
try {
for (int i =0 ; i <100; i++) {
String key = "key"+i;
String message = "message"+i;
ProducerRecord<Object, Object> record = new ProducerRecord<>("topic1", key, message);
try {
System.out.println("sending message"+i);
producer.send(record);
} catch(SerializationException e) {
e.printStackTrace();
}
}
}finally {
producer.flush();
producer.close();
}
5. 读消息
打开另一个终端会话并运行控制台消费者客户端以阅读您刚创建的事件:
kafka-console-consumer.bat --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
This is my first event
This is my second event
您可以随时使用CTRL-C停止消费者客户端。
随意进行实验:例如,切换回制作者终端(上一步)以编写其他事件,并查看这些事件如何立即显示在您的消费者终端中。
由于事件持久存储在Kafka中,因此可以随意阅读尽可能多的消费者。 您可以通过打开另一个终端会话并再次重新运行上一个命令来轻松验证这一点。
Java 代码实现读取消息
Properties props = new Properties();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.put(ConsumerConfig.GROUP_ID_CONFIG, "group1");
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");
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
String topic = "quickstart-events";
final Consumer<String, String> consumer = new KafkaConsumer<String, String>(props);
consumer.subscribe(Arrays.asList(topic));
try {
while (true) {
ConsumerRecords<String, String> records = consumer.poll(100);
for (ConsumerRecord<String, String> record : records) {
System.out.printf("offset = %d, key = %s, value = %s \n", record.offset(), record.key(), record.value());
}
}
} finally {
consumer.close();
}
6. 列出所有的topics.
根据zookeeper
./bin/kafka-topics.sh --list --zookeeper localhost:2181
根据 Kafka server
./bin/kafka-topics.sh --bootstrap-server=localhost:9092 --list
参考资料
https://kafka.apache.org/quickstart
https://codenotfound.com/spring-kafka-apache-avro-serializer-deserializer-example.html