从零开始学Spring Boot系列-集成Kafka

Kafka简介

Apache Kafka是一个开源的分布式流处理平台,由LinkedIn公司开发和维护,后来捐赠给了Apache软件基金会。Kafka主要用于构建实时数据管道和流应用。它类似于一个分布式、高吞吐量的发布-订阅消息系统,可以处理消费者网站的所有动作流数据。这种动作流数据包括页面浏览、搜索和其他用户的行动。通过这些数据,Kafka能够实时地将数据流传输到系统和应用上。Kafka的主要特性包括:

  1. 高吞吐量:Kafka以高吞吐量处理数据,即使是非常大量的数据也能轻松应对。

  2. 分布式:Kafka是分布式的,可以在多个节点上运行,从而实现高可用性和容错性。

  3. 持久性:Kafka将数据持久化到磁盘,因此即使系统崩溃,数据也不会丢失。

  4. 实时性:Kafka可以实时处理数据,为实时分析、监控和报警等应用提供了强大的支持。

Ubuntu安装Kafka

本文是在wsl2上的Ubuntu 22.04上安装Kafka。你需要先安装Java环境,因为Kafka是用Java编写的。然后,你可以从Apache Kafka的官方网站下载并安装Kafka。以下是安装步骤:

  1. 安装Java环境:你可以使用apt-get命令安装OpenJDK。

    sudo apt-get update
    sudo apt-get install openjdk-17-jdk

  2. 下载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

  1. 添加依赖:在你的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'
    }

  2. 配置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

  3. 创建生产者:使用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);
      }

    }

  4. 创建消费者:使用@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);
    }
    }

  5. 创建控制器: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://www.cnblogs.com/daimajiangxin/p/18087329

体验地址: 引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

相关推荐
2301_32241428046 小时前
基于SpringBoot+Vue的休闲零食超市管理系统的设计与实现59004-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·redis·mysql·决策树·推荐算法
金銀銅鐵8 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(上)
java·后端·ai编程
念何架构之路9 小时前
go-grpc设计思想
开发语言·后端·golang
system_error_x9 小时前
SpringBoot 集成 Thymeleaf 简洁入门
java·spring boot·后端
步行cgn11 小时前
Spring MVC 视图机制的核心接口与类
java·开发语言·后端·spring·mvc
码事漫谈12 小时前
AI 读你的提示词,其实很没耐心
后端
用户83562907805112 小时前
如何使用 Python 格式化 Excel 单元格中的长文本
后端·python
我命由我1234513 小时前
Python 开发 - Python 的 pathlib
java·开发语言·后端·python·学习·java-ee·学习方法
IT_陈寒13 小时前
Java性能优化完全指南
前端·人工智能·后端
电子IT笔记13 小时前
对接群晖NAS,上传和删除踩坑记录
前端·后端