Kafka简介
Apache Kafka是一个开源的分布式流处理平台,由LinkedIn公司开发和维护,后来捐赠给了Apache软件基金会。Kafka主要用于构建实时数据管道和流应用。它类似于一个分布式、高吞吐量的发布-订阅消息系统,可以处理消费者网站的所有动作流数据。这种动作流数据包括页面浏览、搜索和其他用户的行动。通过这些数据,Kafka能够实时地将数据流传输到系统和应用上。
Kafka的主要特性包括:
- 高吞吐量:Kafka以高吞吐量处理数据,即使是非常大量的数据也能轻松应对。
- 分布式:Kafka是分布式的,可以在多个节点上运行,从而实现高可用性和容错性。
- 持久性:Kafka将数据持久化到磁盘,因此即使系统崩溃,数据也不会丢失。
- 实时性:Kafka可以实时处理数据,为实时分析、监控和报警等应用提供了强大的支持。
Ubuntu安装Kafka
本文是在wsl2上的Ubuntu 22.04上安装Kafka。你需要先安装Java环境,因为Kafka是用Java编写的。然后,你可以从Apache Kafka的官方网站下载并安装Kafka。以下是安装步骤:
-
安装Java环境:你可以使用apt-get命令安装OpenJDK。
sudo apt-get update sudo apt-get install openjdk-17-jdk
-
下载Kafka:从Apache Kafka的官方网站下载适合你操作系统的版本。下载完成后,解压到指定目录。
wget https://mirrors.aliyun.com/apache/kafka/3.7.0/kafka_2.13-3.7.0.tgz tar -xzf kafka_2.13-3.7.0.tgz mv kafka_2.13-3.7.0 kafka cd kafka
3.启动Kafka:Kafka依赖于ZooKeeper,所以你需要先启动ZooKeeper,然后再启动Kafka。
# 启动ZooKeeper
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
# 启动Kafka
nohup bin/kafka-server-start.sh config/server.properties 2>&1 &
4.使用kafka客户端连接
Spring Boot集成Kafka
-
添加依赖:在你的Spring Boot项目的build.gradle 文件中添加Kafka的依赖。
dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'mysql:mysql-connector-java:8.0.17' implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.3' implementation 'org.springframework.boot:spring-boot-starter-data-redis' implementation 'org.apache.commons:commons-pool2' implementation 'org.springframework.kafka:spring-kafka' }
-
配置Kafka:在application.properties或application.yml文件中配置Kafka的相关属性,如broker地址、端口、topic等。
spring.kafka.bootstrap-servers=localhost:9092 spring.kafka.consumer.group-id=my-group spring.kafka.consumer.auto-offset-reset=earliest spring.kafka.template.default-topic=my-topic
-
创建生产者:使用KafkaTemplate发送消息到Kafka。
package cn.daimajiangxin.springboot.learning.kafka; import jakarta.annotation.Resource; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.stereotype.Service; @Service public class KafkaProducer { @Resource private KafkaTemplate<String, String> kafkaTemplate; public void sendMessage(String message) { kafkaTemplate.send("my-topic", message); } }
-
创建消费者:使用@KafkaListener注解监听Kafka中的消息。
package cn.daimajiangxin.springboot.learning.kafka; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.stereotype.Service; @Service public class KafkaConsumer { @KafkaListener(topics = "my-topic", groupId = "my-group") public void consume(String message) { System.out.println("Received message: " + message); } }
-
创建控制器:KafkaController
package cn.daimajiangxin.springboot.learning.controller; import cn.daimajiangxin.springboot.learning.kafka.KafkaProducer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class KafkaController { private final KafkaProducer kafkaProducer; @Autowired public KafkaController(KafkaProducer kafkaProducer) { this.kafkaProducer = kafkaProducer; } @GetMapping("/kafka") public void kafka() { kafkaProducer.sendMessage("Hello World"); } }
现在,你的Spring Boot应用已经集成了Kafka,你可以通过生产者发送消息,并通过消费者接收并处理这些消息了。
总结
以上就是关于从零开始学Spring Boot系列文章——集成Kafka的简介。Kafka作为一个强大的分布式流处理平台,与Spring Boot的集成可以极大地简化实时数据处理应用的开发。希望这篇文章能帮助你更好地理解Kafka及其在Spring Boot项目中的应用。
源文来自:https://daimajiangxin.cn
源码地址:https://gitee.com/daimajiangxin/springboot-learning