springboot + kafka 入门实例 入门demo
springboot + kafka 入门实例 入门demo
版本说明
- springboot版本:2.3.3.RELEASE
- kakfa服务端版本:kafka_2.12-2.6.0.tgz
- zookeeper服务端版本:apache-zookeeper-3.6.1-bin.tar.gz
实例搭建前提条件
1,搭建好zookeeper服务,本实例zookeeper使用单机伪集群模式,
192.168.1.126:2181, 192.168.1.126:2182, 192.168.1.126:2183
2,搭建好kafka服务,本实例kafka使用单机伪集群模式,
192.168.1.126:9092, 192.168.1.126:9093, 192.168.1.126:9094
1. 导入相关依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>springboot-kafka-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>springboot-kafka-demo</name>
    <description>springboot-kafka-demo</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.54</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
2. yml配置
server:
  port: 8080
  servlet:
    context-path: /
  tomcat:
    uri-encoding: UTF-8
spring:
  kafka:
    #本地虚拟机kafka伪集群
    bootstrap-servers: 192.168.1.126:9092,192.168.1.126:9093,192.168.1.126:9094
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
      batch-size: 65536
      buffer-memory: 524288
      #自定义的topic
      myTopic1: testTopic1
      myTopic2: testTopic2
    consumer:
      group-id: default-group   #默认组id  后面会配置多个消费者组
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      auto-offset-reset: latest
      enable-auto-commit: false   #关闭自动提交 改由spring-kafka提交
      auto-commit-interval: 100
      max-poll-records: 20      #批量消费 一次接收的最大数量
3. 部分代码
消息实体类
package com.example.demo.entity;
import java.util.Date;
import lombok.Data;
import lombok.ToString;
@Data
@ToString
public class Message {
    private Long id;
    private String msg;
    private Date sendTime;
}
kafka配置类
package com.example.demo.config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
/**
 * kafka配置类
 */
@Data
@Configuration
public class KafkaConfiguration {
    /**
     * kafaka集群列表
     */
    @Value("${spring.kafka.bootstrap-servers}")
    private String bootstrapServers;
    /**
     * kafaka消费group列表
     */
    @Value("${spring.kafka.consumer.group-id}")
    private String defaultGroupId;
    /**
     * 消费开始位置
     */
    @Value("${spring.kafka.consumer.auto-offset-reset}")
    private String autoOffsetReset;
    /**
     * 是否自动提交
     */
    @Value("${spring.kafka.consumer.enable-auto-commit}")
    private String enableAutoCommit;
    /**
     * #如果'enable.auto.commit'为true,则消费者偏移自动提交给Kafka的频率(以毫秒为单位),默认值为5000。
     */
    @Value("${spring.kafka.consumer.auto-commit-interval}")
    private String autoCommitInterval;
    /**
     * 一次调用poll()操作时返回的最大记录数,默认值为500
     */
    @Value("${spring.kafka.consumer.max-poll-records}")
    private String maxPollRecords;
    /**
     * 自定义的topic1
     */
    @Value("${spring.kafka.producer.myTopic1}")
    private String myTopic1;
    /**
     * 自定义的topic2
     */
    @Value("${spring.kafka.producer.myTopic2}")
    private String myTopic2;
}
消费者监听类
package com.example.demo.consumer;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
/**
 * 消费者1(监听topic1队列)
 */
@Component
public class ConsumerListener1 {
    @KafkaListener(topics = "${spring.kafka.producer.myTopic1}")
    public void listen(ConsumerRecord<?,String> record) {
        System.out.println(record);
        String value = record.value();
        System.out.println("消费者1接收到消息:" + value);
    }
}
测试类
package com.example.demo.controller;
import com.alibaba.fastjson.JSON;
import com.example.demo.config.KafkaConfiguration;
import com.example.demo.entity.Message;
import com.example.demo.service.KafkaService;
import com.example.demo.util.UUID;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
@Slf4j
@RestController
@RequestMapping("/kafka")
public class KafkaController {
    @Autowired
    private KafkaService kafkaService;
    @Autowired
    private KafkaConfiguration kafkaConfiguration;
    /**
     * 发送文本消息
     * @param msg
     * @return
     */
    @GetMapping("/send/{msg}")
    public String send(@PathVariable String msg) {
        kafkaService.send(kafkaConfiguration.getMyTopic1(), msg);
        return "生产者发送消息给topic1:"+msg;
    }
    /**
     * 发送JSON数据
     * @return
     */
    @GetMapping("/send2")
    public String send2() {
        Message message = new Message();
        message.setId(System.currentTimeMillis());
        message.setMsg("生产者发送消息到topic1: " + UUID.getUUID32());
        message.setSendTime(new Date());
        String value = JSON.toJSONString(message);
        log.info("生产者发送消息到topic1 message = {}", value);
        kafkaService.send(kafkaConfiguration.getMyTopic1(),value);
        return value;
    }
    /**
     * 发送JSON数据
     * @return
     */
    @GetMapping("/send3")
    public String send3() {
        Message message = new Message();
        message.setId(System.currentTimeMillis());
        message.setMsg("生产者发送消息到topic2: " + UUID.getUUID32());
        message.setSendTime(new Date());
        String value = JSON.toJSONString(message);
        log.info("生产者发送消息到topic2 message = {}", value);
        kafkaService.send(kafkaConfiguration.getMyTopic2(),value);
        return value;
    }
}
4. 实例运行结果



5. 写在最后
本实例源代码:https://gitee.com/jelly_oy/springboot-kafka-demo
本实例采用springboot2.3.3 + zookeeper3.6.1 + kafka2.6.0 进行搭建
如果本项目对你有帮助,欢迎留言评论,欢迎git clone源代码。
springboot + kafka 入门实例 入门demo的更多相关文章
- springboot + mybatisPlus 入门实例 入门demo
		springboot + mybatisPlus 入门实例 入门demo 使用mybatisPlus的优势 集成mybatisplus后,简单的CRUD就不用写了,如果没有特别的sql,就可以不用ma ... 
- 基于springboot构建dubbo的入门demo
		之前记录了构建dubbo入门demo所需的环境以及基于普通maven项目构建dubbo的入门案例,今天记录在这些的基础上基于springboot来构建dubbo的入门demo:众所周知,springb ... 
- vue入门 0 小demo  (挂载点、模板、实例)
		vue入门 0 小demo (挂载点.模板) 用直接的引用vue.js 首先 讲几个基本的概念 1.挂载点即el:vue 实例化时 元素挂靠的地方. 2.模板 即template:vue 实例化时挂 ... 
- .net core kafka 入门实例 一篇看懂
		kafka 相信都有听说过,不管有没有用过,在江湖上可以说是大名鼎鼎,就像天龙八部里的乔峰.国际惯例,先介绍生平事迹 简介 Kafka 是由 Apache软件基金会 开发的一个开源流处理平台, ... 
- wxPython中文教程入门实例
		这篇文章主要为大家分享下python编程中有关wxPython的中文教程,分享一些wxPython入门实例,有需要的朋友参考下 wxPython中文教程入门实例 wx.Window 是一个基类 ... 
- Omnet++ 4.0 入门实例教程
		http://blog.sina.com.cn/s/blog_8a2bb17d01018npf.html 在网上找到的一个讲解omnet++的实例, 是4.0下面实现的. 我在4.2上试了试,可以用. ... 
- SpringBoot系列: RestTemplate 快速入门
		====================================相关的文章====================================SpringBoot系列: 与Spring R ... 
- 【React】入门实例
		React 可以灵活的应用在各种各样的项目中.你可以用它来创建新的应用程序,你也可以逐步引用而不改变现有的代码库. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaS ... 
- React 入门实例
		React 入门实例教程 一.安装 React 的安装包,可以到官网下载. $ git clone git@github.com:ruanyf/react-demos.git 如果你没安装 git, ... 
随机推荐
- Mybatis(四)多表操作
			数据库如下: 一.创建数据库所对应的bean类 public class User { private Integer uId; private String username; private St ... 
- Python灰帽子:黑客与逆向工程师的Python编程之道PDF高清完整版免费下载|百度云盘
			百度云盘免费下载:Python灰帽子:黑客与逆向工程师的Python编程之道PDF高清完整版免费下载 提取码:8nki 目录 · · · · · · 第1章 搭建开发环境 11.1 操作系统要求 1 ... 
- 2.pandas的数据结构
			对于文件来说,读取只是最初级的要求,那我们要对文件进行数据分析,首先就应该要知道,pandas会将我们熟悉的文件转换成了什么形式的数据结构,以便于后续的操作 数据结构 pandas对文件一共有两种数据 ... 
- tomcat8开启APR模式
			1 Apr模式介绍 Tomcat可以使用APR来提供超强的可伸缩性和性能,更好地集成本地服务器技术.APR(Apache Portable Runtime)是一个高可移植库,它是Apache HTTP ... 
- jmeter 命令行模式(非GUI)运行脚本,察看结果树结果为空,解决办法;
			jmeter的bin目录下,打开命令窗口,执行jmeter -n -t jmeter脚本 -l 结果: 执行结束后,聚合报告打开结果,显示错误率100%:察看结果树中打开结果,显示无数据: 解决办法: ... 
- emacs org-mode 中文手册精简版(纯小白)
			一只小白看了大佬的讲解视频结合其他大佬给整理的笔记再结合emacs 官方英文手册,觉得自己的知识好像增加了. 当时自己在全网搜索的时候没有看到那种纯小白的手册,本小白就写了这个,就当奉献社会了.若有不 ... 
- maven 一些高级用法命令
			发布本地jar到私服 命令 mvn deploy:deploy-file -Dmaven.test.skip=true -Dfile=D:\Downloads\OJDBC-Full\ojdbc6.ja ... 
- 下载excel模板,导入数据时需要用到
			页面代码: <form id="form1" enctype="multipart/form-data"> <div style=" ... 
- datagrip安装与破解
			datagrip下载 从官网下载的dataGrip可以免费使用30天,如果已经破解过或者付费过的小伙伴可以跳过这个章节.对于未安装软件的小伙伴,博主这里收集了dataGrip的破解教程,扫描底部博主的 ... 
- Redis 内存压缩原理
			Redis 无疑是一个大量消耗内存的数据库,因此 Redis 引入了一些设计巧妙的数据结构进行内存压缩来减轻负担.ziplist.quicklist 以及 intset 是其中最常用最重要的压缩存储结 ... 
