Springboot集成kafka实践

 更新时间:2026年05月15日 10:48:45   作者:Tiger_Paul  
文章主要介绍了在SpringBoot项目中集成Kafka的方法,包括引入依赖、配置信息、生产者和消费者实现及使用BigDatatools查看Kafka情况等内容

在项目中使用kafka的场景有很多,尤其是实时产生的数据流,例如:电商数据、电信数据、统计等,通过kafka可以结合flink进行大数据分析。所以第一步就是要集成kafka。

springboot已经将kafka集成到框架里了,只需要引用依赖就可以简单使用。

一、引入依赖

<!-- spring-kafka -->
<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
    <version>2.8.6</version>
</dependency>

二、在application.yml中配置信息

spring:
    kafka:
    # 以逗号分隔的地址列表,用于建立与Kafka集群的初始连接(kafka 默认的端口号为9092)
    bootstrap-servers: 192.168.1.199:9092
    producer:
      # 发生错误后,消息重发的次数。
      retries: 0
      #当有多个消息需要被发送到同一个分区时,生产者会把它们放在同一个批次里。该参数指定了一个批次可以使用的内存大小,按照字节数计算。
      batch-size: 16384
      # 设置生产者内存缓冲区的大小。
      buffer-memory: 33554432
      # 键的序列化方式
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      # 值的序列化方式
      value-serializer: org.apache.kafka.common.serialization.StringSerializer
      # acks=0 : 生产者在成功写入消息之前不会等待任何来自服务器的响应。
      # acks=1 : 只要集群的首领节点收到消息,生产者就会收到一个来自服务器成功响应。
      # acks=all :只有当所有参与复制的节点全部收到消息时,生产者才会收到一个来自服务器的成功响应。
      acks: all
    consumer:
      # 自动提交的时间间隔 在spring boot 2.X 版本中这里采用的是值的类型为Duration 需要符合特定的格式,如1S,1M,2H,5D
      auto-commit-interval: 1S
      # 该属性指定了消费者在读取一个没有偏移量的分区或者偏移量无效的情况下该作何处理:
      # latest(默认值)在偏移量无效的情况下,消费者将从最新的记录开始读取数据(在消费者启动之后生成的记录)
      # earliest :在偏移量无效的情况下,消费者将从起始位置读取分区的记录
      auto-offset-reset: earliest
      # 是否自动提交偏移量,默认值是true,为了避免出现重复数据和数据丢失,可以把它设置为false,然后手动提交偏移量
      enable-auto-commit: true
      # 键的反序列化方式
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      # 值的反序列化方式
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
    listener:
      # 在侦听器容器中运行的线程数。
      concurrency: 4

三、 生产者

@RestController
@RequestMapping("/producer")
public class producerController {
    @Autowired
    private CallBackService callBackService;

    @Autowired
    KafkaTemplate<String, String> kafkaTemplate;

    /**
     * 列表
     */
    @RequestMapping("/list")
    public void list() {
        List<CallBack> callBacks = callBackService.listMaps(10);  // 从数据库读取10条记录测试
        for (CallBack callBack : callBacks) {
            String json = JSONObject.toJSONString(callBack);
            kafkaTemplate.send("callcdr", json);   // 发送数据到kafka
            System.out.println(json);
        }
    }
}

四、消费者

/**
 * @Classname KafkaSimpleConsumer
 * @Description 单个消费者
 * @Date 2019-05-14 10:08
 */
@Slf4j
@Component
public class KafkaConsumerTest {
    // 简单消费者,groupId可以任意起
    @KafkaListener(groupId = "ConsumerX", topics = "callcdr")
    public void consumer1_1(ConsumerRecord<String, Object> record, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic, Consumer consumer) {
        System.out.println("消费记录:" + record.value());
    }
}

五、使用BigData tools查看kafka情况

在IDEA里安装BigData tools

使用BigData tools查看kafka情况

 使用BigData tools查看kafka情况_图2

消费完成后consumerX为空。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java实现单线程聊天室

    Java实现单线程聊天室

    这篇文章主要为大家详细介绍了Java实现单线程聊天室,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • Java线程池新手避坑指南

    Java线程池新手避坑指南

    在高并发编程中,线程池是一个非常重要的组件,它不仅能够有效地管理和复用线程资源,还可以提升应用程序的性能和稳定性,本文将详细介绍Java线程池避坑指南,从Executors到自定义线程池,一文搞懂,需要的朋友可以参考下
    2025-07-07
  • SpringBoot如何实现防盗链

    SpringBoot如何实现防盗链

    这篇文章主要为大家详细介绍了SpringBoot是如何实现防盗链的,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-12-12
  • java启动命令中-D和--的区别解析

    java启动命令中-D和--的区别解析

    在 SpringBoot 项目中,启动时,通过 -D 或 -- 添加参数,都可以直接覆盖 yml 或 properties 配置文件中的同名配置,如果不存在则相当于添加了一个配置,这篇文章主要介绍了java启动命令中-D和--的区别,需要的朋友可以参考下
    2024-08-08
  • springboot vue完成编辑页面发送接口请求功能

    springboot vue完成编辑页面发送接口请求功能

    这篇文章主要为大家介绍了springboot+vue完成编辑页发送接口请求功能,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • SpringSecurity身份验证实现完整指南

    SpringSecurity身份验证实现完整指南

    本文介绍了如何使用SpringSecurity实现基于表单的登录认证,包括配置SecurityConfig、自定义登录页面、处理认证成功和失败的场景、获取当前登录用户、实现登出功能,帮助开发者理解和应用SpringSecurity的核心功能和最佳实践,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • Java Swing JProgressBar进度条的实现示例

    Java Swing JProgressBar进度条的实现示例

    这篇文章主要介绍了Java Swing JProgressBar进度条的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • JAVA加密算法实密钥一致协议代码示例

    JAVA加密算法实密钥一致协议代码示例

    这篇文章主要介绍了JAVA加密算法实密钥一致协议代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • Java程序启动时初始化数据的四种方式

    Java程序启动时初始化数据的四种方式

    本文主要介绍了Java程序启动时初始化数据的四种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • 重启Jenkins的三种方式及注意事项

    重启Jenkins的三种方式及注意事项

    Jenkins是一款广泛使用的持续集成工具,它允许开发者自动化构建、测试和部署软件,这篇文章主要介绍了重启Jenkins的三种方式及注意事项,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-03-03

最新评论