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

这篇具有很好参考价值的文章主要介绍了从零开始学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://daimajiangxin.cn文章来源地址https://www.toymoban.com/news/detail-842097.html

到了这里,关于从零开始学Spring Boot系列-集成Kafka的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 从零开始学Spring Boot系列-外部化配置

    Spring Boot 允许你将配置外部化,以便可以在不同的环境中使用相同的应用程序代码。可以使用属性文件、YAML文件、环境变量和命令行参数将配置外部化。属性值可以通过使用 @Value 注解直接注入 bean,可以通过 Spring 的 Environment 抽象访问,也可以通过 @ConfigurationProperties。 Sp

    2024年04月10日
    浏览(108)
  • 从零开始 Spring Boot 28:资源

    图源:简书 (jianshu.com) Spring中的资源被抽象为一个Resource接口: Resource 接口中最重要的一些方法是。 getInputStream() : 定位并打开资源,返回一个用于读取资源的 InputStream 。我们期望每次调用都能返回一个新的 InputStream 。关闭该流是调用者的责任。 exists() : 返回一个 boolean 值,

    2024年02月05日
    浏览(77)
  • 从零开始 Spring Boot 63:Hibernate 继承映射

    图源:简书 (jianshu.com) 关系型数据库设计中是不存在继承概念的,但实体类可以用继承来组织代码结构,所以需要用一种方式将实体类的继承结构映射到表结构。 本文将介绍几种在 JPA(Hibernate)中映射实体类继承层次的方式。 第一种方式是用 @MappedSuperclass 标记超类(Super

    2024年02月12日
    浏览(52)
  • Spring Boot(04):让你的Spring Boot应用“火力全开”,从零开始学习starter

            Spring Boot是一款非常流行的Java开发框架,其具有快速开发、自动化配置、内嵌服务器、易于扩展等特点,因此备受开发者欢迎。在日常开发中,我们经常需要在不同的环境中进行测试和部署,此时,如何实现开发、测试、生产环境的快速切换,成为了我们需要解决

    2024年04月13日
    浏览(61)
  • 从零开始 Spring Boot 37:初始化 ApplicationContext

    图源:简书 (jianshu.com) 从前文可以知道,作为 Ioc 容器的 ApplicationContext,需要进行一系列步骤来初始化以最终就绪(对于 Web 应用来说就是可以提供Http服务)。 这些步骤大概可以分为以下内容: 准备上下文关联的 Environment 。 初始化 ApplicationContext( ApplicationContextInitializers

    2024年02月08日
    浏览(45)
  • 从零开始 Spring Boot 52:@Embedded 和 @Embeddable

    图源:简书 (jianshu.com) 这篇文章会介绍 @Embedded 和 @Embeddable 两个注解在 JPA 中的用法。 先看一个示例: 这里使用了 Lombok 相关注解(比如 @Builder )帮助构建实体类,详细内容可以阅读我的相关文章。 user_student 是一个学生表,其中的 contacts_ 开头的字段保存联系人信息,这体

    2024年02月12日
    浏览(67)
  • 从零开始 Spring Boot 38:Lombok 与依赖注入

    图源:简书 (jianshu.com) 在之前的文章中,我详细介绍了 Lombok 的用法,考虑到在 Spring 中使用依赖注入(DI)是如此的频繁,因此有必要讨论使用 Lombok 时可能对依赖注入造成的影响。 我们都知道,Spring 中的依赖注入分为三种情况: 通过属性进行依赖注入。 通过构造器进行依

    2024年02月08日
    浏览(70)
  • 从零开始 Spring Boot 49:Hibernate Entity Lifecycle

    图源:简书 (jianshu.com) 本文将介绍 Hibernate 的 Session 接口,以及如何用 Session 的相关 API 转换实体(Entity)的生命周期状态。 如果缺少的 JPA 和 Hibernate 的基本认识,可以阅读前篇文章。 持久化上下文 在 JPA 的相关概念中,存在一个 持久化上下文 (Persistence Context)。 持久化

    2024年02月11日
    浏览(69)
  • 从零开始 Spring Boot 51:JPA 中的默认列值

    图源:简书 (jianshu.com) JPA 是一个 ORM 框架,因此,通常我们需要在实体类中定义表结构,这其中就包含可能的字段默认值。 本文介绍如何在 Hibernate(JPA)中设置默认列值(Default Column Value)。 最简单的方式是对实体类指定一个默认的属性值,比如: 测试用例: 这样做的缺点

    2024年02月11日
    浏览(91)
  • 从零开始 Spring Boot 57:JPA中的一对多关系

    图源:简书 (jianshu.com) 在上篇文章中我们介绍了如何在 JPA 中实现实体的一对一关系,在关系型数据库设计中,除了一对一关系,还存在一对多关系。本篇文章介绍如何在 JPA 中实现一对多关系。 假设我们有两张表,学生表和电子邮件账号表,一个学生可以有多个电子邮件账

    2024年02月12日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包