当前位置: 首页 > news >正文

kafka--技术文档--spring-boot集成基础简单使用

阿丹:

        查阅了很多资料了解到,使用了spring-boot中整合的kafka的使用是被封装好的。也就是说这些使用其实和在linux中的使用kafka代码的使用其实没有太大关系。但是逻辑是一样的。这点要注意!

使用spring-boot整合kafka

1、导入依赖

核心配置为:

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

如果在下面规定了spring-boot的版本那么就不需要再使用版本号,如果没有的话就需要规定版本号。 

      <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>3.1.2</version></dependency><dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.75</version></dependency><!--配置文件报错问题--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version><scope>provided</scope></dependency></dependencies>

2、写入配置

#服务端口号
server:port: 8025spring:main:allow-circular-references: trueapplication:name: producerkafka:bootstrap-servers: kafka的ip地址:9092producer:# 发生错误后,消息重发的次数。retries: 1#当有多个消息需要被发送到同一个分区时,生产者会把它们放在同一个批次里。该参数指定了一个批次可以使用的内存大小,按照字节数计算。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: 1consumer:# 该属性指定了消费者在读取一个没有偏移量的分区或者偏移量无效的情况下该作何处理:# latest(默认值)在偏移量无效的情况下,消费者将从最新的记录开始读取数据(在消费者启动之后生成的记录)# earliest :在偏移量无效的情况下,消费者将从起始位置读取分区的记录auto-offset-reset: earliest# 是否自动提交偏移量,默认值是true,为了避免出现重复数据和数据丢失,可以把它设置为false,然后手动提交偏移量enable-auto-commit: false# 键的反序列化方式key-deserializer: org.apache.kafka.common.serialization.StringDeserializer# 值的反序列化方式value-deserializer: org.apache.kafka.common.serialization.StringDeserializerlistener:# 在侦听器容器中运行的线程数。concurrency: 5#listner负责ack,每调用一次,就立即commitack-mode: manual_immediatemissing-topics-fatal: false

3、生产者

将发送封装为一个工具类

    public void send(Object obj){String obj2String = JSON.toJSONString(obj);log.info("准备发送消息为:{}",obj2String);//发送消息ListenableFuture<SendResult<String, Object>> future = kafkaTemplate.send(TOPIC_TEST, obj2String);//回调future.addCallback(new ListenableFutureCallback<SendResult<String, Object>>() {@Overridepublic void onFailure(Throwable ex) {//发送失败的处理log.info(TOPIC_TEST + " - 生产者 发送消息失败:" + ex.getMessage());}@Overridepublic void onSuccess(SendResult<String, Object> result) {//成功的处理log.info(TOPIC_TEST + " - 生产者 发送消息成功:" + result.toString());}});

4、消费者

 如果需要使用多线程来监听的话使用这个策略。

@KafkaListener(topics = "Hello-Kafka", groupId = "group1")
public void onMessage1(ConsumerRecord<?, ?> record) {// 消息处理逻辑
}@KafkaListener(topics = "Hello-Kafka", groupId = "group2")
public void onMessage2(ConsumerRecord<?, ?> record) {// 消息处理逻辑
}

以上就可以简单实现一个kafka的监听消费。

http://www.lryc.cn/news/144196.html

相关文章:

  • 【核磁共振成像】部分傅里叶重建
  • React中的flushSync与Vue中的nextTick的比较
  • golang设置国内镜像源
  • linux切换到root没有conda环境
  • 数据库——redis介绍
  • 从C语言到C++_34(C++11_下)可变参数+ lambda+function+bind+笔试题
  • 喜报|星瑞格荣获“2022-2023年度国产数据库应用优秀解决方案”奖项
  • 【Spring Cloud系列】- 分布式系统中实现幂等性的几种方式
  • 2023.8.26-2023.9.3 周报【3D+GAN+Diffusion基础知识+训练测试】
  • 如何使用CSS创建渐变阴影?
  • perl send HTTP Request
  • 阿里云CDN缓存预热与刷新以及常见的故障汇总
  • Oracle创建控制列表ACL(Access Control List)
  • 3D模型转换工具HOOPS Exchange助力打造虚拟现实应用程序
  • python web GUI框架-NiceGUI 教程(二)
  • RT_Thread内核机制学习(二)
  • 线性代数的学习和整理12: 矩阵与行列式,计算上的差别对比
  • 2023年MySQL核心技术面试第一篇
  • linux启动jar 缺失lib
  • 【Bash】常用命令总结
  • 小研究 - Java虚拟机性能及关键技术分析
  • Repo manifests默认default.xml清单文件中的各个标签详解
  • javacv基础02-调用本机摄像头并预览摄像头图像画面视频
  • 【Nginx21】Nginx学习:FastCGI模块(三)缓冲区与响应头
  • 正则表达式(常用字符简单版)
  • 从零开始学习Python爬虫:详细指南
  • 分布式计算框架:Spark、Dask、Ray
  • 什么是伪类链(Pseudo-class Chaining)?
  • 每日一题:leetcode 57 插入区间
  • 第五节:实现自己的第一个environment