1、简介
Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据。在消息队列中,Kafka具有强大的吞吐量。
2、初体验
Kafka2.3.0 包结构:
在bin下有WIN平台和Linux的启动脚本,在此以WIN平台为例:
Kafka是基于Zookeeper的,Kafka2.3.0包中集成了Zookeeper,可以直接使用。先启动zk,后启动Kafka,如图:
启动的时候需要指定脚本和配置文件(.bat和.properties)
3、项目搭建引入以来坐标
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
使用SpringBoot2.x版本的话,pom文件第一行可能会错,是因为maven插件的版本太高导致的,可以降低版本
<!-- 默认maven插件版本3.1.2太高导致报错 -->
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
4、文件配置
server:
port: 80
#kafka
spring:
kafka:
bootstrap-servers: 127.0.0.1:9092
#生产者
producer:
acks: 1
retries: 0
batch-size: 16384
buffer-memory: 33554432
# 必须配置
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
#消费者
consumer:
enable-auto-commit: false
auto-commit-interval: 100ms
# 必须配置
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
group-id: kafkatest
注意其中生产者必须配置key-serializer,value-serializer,消费者必须配置key-deserializer,value-deserializer和group-id
5、demo
@RestController
@Slf4j
public class KafkaSender {
@Autowired
private KafkaTemplate<String, Object> kafkaTemplate;
@GetMapping("/sendMsg")
public String sendMsg() throws InterruptedException {
for (int i = 0; i < 10; i++) {
log.info("---------------第"+(i+1)+"条信息已发送。。。-----------------");
kafkaTemplate.send("kafkatest123", "test_"+i, "value_"+i*10);
Thread.sleep(2000);
}
return "message send success";
}
@KafkaListener(topics = "kafkatest123")
public void receive(ConsumerRecord<String, Object> consumer) {
log.info("消息已消费:topic为[{}]-key为[{}]-value为[{}]", consumer.topic(), consumer.key(), consumer.value());
}
}
6、结果