SpringBoot整合Kafka实战
1.Kafka简介和应用
Apache Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。常应用于大数据环境下的数据异步处理如批量上传文件,还有高负载任务如电商的秒杀活动!
Kafka和其他消息中间件的对比:
2.Kafka相关概念
Producer:消息的生产者,生产者将消息发送到topic的partition中,broker接收到partition的消息并存储起来。
Consumer:消息的消费者,消费者从broker中消费消息。
Topic:主题,用来划分数据的所属类,是一个逻辑上的概念
Partition:分区,一个topic下可以有多个pertition,方便topic的扩展
Broker:一台kafka服务器就是一个broker,broker用来存储partition的数据
Zookeeper:用来维护和协调broker集群,当系统中新增了broker或者哪个broker失效,由zookeeper通知到生产者和消费者
3.SpringBoot2.x整合Kafka实战
3.1Kafka和Zookeeper的本地安装和启动
相关操作可参考该条博客:kafka的安装和运行
3.2新建SpringBoot项目并加载相关依赖
Demo代码整体结构如下:
<!--kafka依赖-->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
<!--lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--通用依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
<scope>provided</scope>
</dependency>
<!-- druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
注意这里的spring-kafka不指定版本,由maven自适应版本,因为SpringBoot整合kafka经常遇到版本不兼容的问题!
3.3kafka相关属性配置
application.yml:
server:
port: 8082
tomcat:
uri-encoding: UTF-8
spring:
kafka:
# consumer:
# auto-offset-reset: latest
# group-id: opensdkProcesser
# key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
# value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
# producer:
# key-serializer: org.apache.kafka.common.serialization.StringDeserializer
# value-serializer: org.apache.kafka.common.serialization.StringDeserializer
group-id: logger
topic: opensdk
bootstrap