Spring boot 项目中进行kafka Stream app 开发

教程:Spring Boot集成Kafka Streams流处理框架 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在当今的大数据和实时数据处理环境中,流处理框架变得越来越重要。Kafka Streams作为Apache Kafka生态系统的一部分,提供了一个强大而灵活的流处理库,能够处理高吞吐量和低延迟的数据。本教程将介绍如何在Spring Boot应用程序中集成Kafka Streams,并演示如何利用其进行流式数据处理。 阅读详情

1. 导入依赖

      <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-streams</artifactId>
        <version>3.6.2</version>
      </dependency>

2. 示例代码(伪代码)

这段伪代码只是为了举例设置的场景,业务场景并不一定合适

@Slf4j
@Component
public class MyKafkaStreamProcessor {

	@Value("${spring.kafka.bootstrap-servers}")
	private String bootstrapServers;

	@PostConstruct
	private void init () {
		String appId = "my-kafka-streams-app";
		myKafkaStreams(appId);
		log.info("✅ Kafka Streams:{} 初始化完成,开始监听 topic: {}", appId, "source-topic");
	}

	public void myKafkaStreams(String appId) {

		/*=======配置=======*/
		Properties config  = new Properties();

		config.put(StreamsConfig.APPLICATION_ID_CONFIG, appId);
		config.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
		StreamsBuilder builder = new StreamsBuilder();

		/*=======构建拓扑结构=======*/

		// 数据清洗
		KStream<String, Order> stream = builder
			.stream("source-topic", Consumed.with(Serdes.String(), new JsonSerde<>(Order.class)))
			.mapValues(value -> {
				// do something
				return value;
			});

		// 过滤出从app创建的订单 并进行处理
		stream.filter((k, v) -> Order.getSource.equals("app"))
			.foreach((k, v) -> {
				// do something
			});

		// 发送到第一个topic
		stream.mapValues(value -> JSON.toJSONString(value), Named.as("to-the-first-target-topic-processor"))
			.to("the-first-target-topic", Produced.with(Serdes.String(), Serdes.String()));

		// 发送到第二个topic
		stream.filter((k, v) -> {
				// filter something
			})
			.mapValues(value -> {
				// map to another object
			}, Named.as("to-the-second-target-topic-processor"))
			.to("the-second-target-topic", Produced.with(Serdes.String(), Serdes.String()));

		/*=======创建KafkaStreams=======*/
		KafkaStreams streams = new KafkaStreams(builder.build(), config);

		/*=======设置异常处理器=======*/
		streams.setUncaughtExceptionHandler(new CustomStreamsUncaughtExceptionHandler());

		/*=======启动streams=======*/
		streams.start();

		/*=======添加jvm hook 确保streams安全退出=======*/
		Runtime.getRuntime().addShutdownHook(new Thread(() -> {
			log.info("关闭 Kafka Streams:{}...", appId);
			streams.close();
			log.info("Kafka Streams:{}已经关闭!", appId);
		}));

	}

}

@Slf4j
public class CustomStreamsUncaughtExceptionHandler implements StreamsUncaughtExceptionHandler {


	/**
	 * Inspect the exception received in a stream thread and respond with an action.
	 *
	 */
	@Override
	public StreamThreadExceptionResponse handle(Throwable throwable) {
		log.error("Kafka Streams 线程发生未捕获异常: {}", ExceptionUtil.stacktraceToString(throwable));

		// 选择处理策略(以下三选一):
		// 1. 替换线程(继续运行)
		return StreamThreadExceptionResponse.REPLACE_THREAD;

		// 2. 关闭整个 Streams 应用
		// return StreamThreadExceptionResponse.SHUTDOWN_CLIENT;

		// 3. 关闭整个 JVM
		// return StreamThreadExceptionResponse.SHUTDOWN_APPLICATION;
	}
}

3. 一些注意事项和说明

  • kafka stream 的处理部分集中在构建的拓扑中,其他部分大同小异
  • 在配置部分 StreamsConfig.APPLICATION_ID_CONFIG 这个参数是必须的,且不能重复,否则会启动失败,StreamsConfig.BOOTSTRAP_SERVERS_CONFIG 是kafka的IP与端口
  • 需要注意的是kafka的 KStream 与 java 中的 stream并不相同,在java中 stream只能被消费一次,但是kstream 可以被消费多次,在上面的demo中可以看到,同一个 kstream 被多次消费,且kstream中的数据是不可变的,也就是无论在上一个处理器(processor)对数据进行了何种处理,下一个处理器从kstream 中获取的数据依旧是原来的数据
  • 在kafka stream app中应该对可能会抛出的异常进行处理,而不是全部交给UncaughtExceptionHandler,UncaughtExceptionHandler应该只处理哪些无法预料的异常
  • 如果kafka stream app 捕获未处理异常之后的处理策略也是替换线程,那么kafka stream app 中如果抛出未捕获异常,那么这个消费者组就会进入再平衡状态(PreparingRebalance),老的消费者从消费者组中剔除,新的消费者加入消费者组,然后再开始消费,注意这种替换线程的处理策略可能导致消息重放,也就是原本的线程消费的offset没有提交导致新的线程会重复消费之前已经被消费的数据,如果业务会因为消息重放出现异常,建议做幂等

4. kafka Stream 的一些方法说明

  1. stream()
    stream()方法是从源topic获取数据的方法,示例中第一个参数是字符串,也就是源topic的名称,
    第二个参数是 Consumed ,用来定义对于消息的key与value反序列化的规则,
    示例中将key序列化为string, value 序列化为order对象,需要注意的是,如果在配置的config中没有设置适用于整个stream app的序列化与反序列化规则,那么后续的 to()中必须要指定序列化规则

  2. filter()
    filter()的用法与java stream 中的filter()一致,这里不做说明

  3. mapValues()
    mapValues()的用法,是只对消息的value进行操作,比如将value转换为其他对象。这个方法不会对key进行修改

  4. map()
    与mapValues()类似,但是可以修改消息的key

  5. foreach()
    与java stream 的 foreach()类似,也是一个终结方法

  6. to()
    终结方法,用于将数据发送到另外的topic,示例中第一个参数是目标topic, 第二个参数是Produced,用于定义key和value的序列化规则

  7. 除了stream()和to()之外,其他方法基本都可以传一个参数 Named,这个参数是为每个处理器节点命名,如果不传则自动生成,但是在同一个kstream中 命名不能重复。这个名称不会影响功能,但是如果有一个名称可以在后续调试和监控中提供一点帮助

Kafka + Flink + Spring Boot 打造智慧停车诱导系统 本文以高可用、数据治理、运维监控、安全隐私、以及更多工程化细节,并提供若干可直接使用/参考的 Java 代码示例(Kafka、Flink、Redis、Spring Boot、Spark ML 等)。 阅读详情

相关推荐

智能物流大数据平台实战:Flink+Kafka+Hadoop+Hive+Spring Boot全链路搭建指南

大数据技术栈的核心价值在于构建端到端的数据处理链路,实现从数据采集、实时计算到离线分析与应用服务的完整闭环。其基本原理是通过Kafka等消息队列进行数据采集与缓冲,利用Flink等流处理引擎进行实时计算,同时将数据沉降至Hadoop HDFS进行持久化存储,再借助Hive构建数据仓库进行离线分析,最终通过Spring Boot等应用框架提供数据服务与业务接口。这种架构在智能物流、实时监控、用户行为分析等场景中具有广泛应用,能够有效处理海量数据并挖掘业务价值。本文聚焦于一个典型的智能物流分析平台,详细拆解如何

weixin_34343000的博客 363

Kafka Stream的使用、SpringBoot继承Kafka Stream

Kafka Stream是一个轻量级的类库,能够读写Kafka Topic的数据,做一些简单的数据处理后,将数据再写入到另一个Kafka Topic。

Bulut0907 1564

Spring Cloud Stream:基于事件(消息)驱动的微服务框架

文章目录快速开始参考资料 快速开始 源码地址 启动项目结构如下: 启动项目前的准备 熟悉kafka和zookeeper集成的消息中间件 熟悉spring boot的项目结构、配置文件、注解使用 将zookeeper和kafka启动成功。(百度kafka和zookeeper集成) 配置文件的修改 spring.cloud.stream.kafka.binder.brokers=l...

baidu_33292709的博客 823

SpringBoot 官方文档示例:(75)整合kafka stream

boot

amadeus_liu2的博客 1539

Spring Cloud Stream App Starters Einstein SR5 是 Spring Cloud Stream 应用程序启动器的一个版本

Spring Cloud Stream是一个用于构建消息驱动微服务的框架,而Spring Cloud Stream App Starters则是基于Spring Boot的Spring Integration应用程序,提供了与外部系统的集成。Einstein SR5是其中一个特定的版本,它利用Spring Cloud Stream的功能,通过如Apache Kafka或RabbitMQ等消息中间件来实现异步通信和事件驱动的微服务。

[Blog][Domain] programb.blog.youkuaiyun.com 425

【微服务】springboot整合kafka-stream使用详解

kafka stream使用详解

congge 1万+

Spring系列学习之Spring Cloud Stream App Starters 应用程序启动器

英文原文:https://cloud.spring.io/spring-cloud-stream-app-starters/ 目录 Spring Cloud Stream App Starters 特性 可用应用 快速开始 使用Spring Boot 1.5.x + Spring Cloud Stream 1.3.x: 使用Spring Boot 2.0.x + Spring Clo...

纸上得来终觉浅,绝知此事要躬行 2077

springboot-kafkastream:Spring Boot 1.5和Kafka流示例

springboot-kafkastream Spring Boot 1.5和Kafka流示例

Spring Boot集成Redis Stream消息队列:从入门到实战

本文介绍了Spring Boot集成Redis Stream消息队列的实战方案。首先分析了Redis Stream作为消息队列的优势,包括高性能、持久化和消费者组支持。然后通过三个渐进式案例展示实现过程:1) 基础StringRedisTemplate实现;2) 多消费者组支持;3) 结合RedissonClient的完整方案,包含运维监控功能。文中提供了核心代码示例,如消息生产者的幂等发送、消费者的消息确认机制等关键实现,最终形成一个适合生产环境的消息队列解决方案。

DevOps海洋的渔夫@专栏 2058

Supermind量化实战:我如何给双均线策略加上“止损”和“仓位管理”,让回测收益更稳健

本文详细介绍了如何在Supermind平台上为双均线策略添加止损和仓位管理模块,以提升量化交易的稳健性。通过Python实现动态止损和智能仓位管理,策略的年化收益率从12.3%提升至15.8%,最大回撤从58.7%降至22.4%,Sharpe比率显著提高。这些实战技巧适用于量化交易爱好者,帮助他们在黑天鹅行情中保持收益稳定。

weixin_42567752的博客 362

开箱即用的Platform IO开发平台(包括Arduino,ESP8266,ESP32,STM32)

开箱即用的 Platform IO 离线开发环境,包含(ESP32,ESP32S2,ESP8266,Arduino,STM32)

qq_19703307的博客 755

Java面试必备:Spring Boot与Kafka核心技术解析

Spring Boot作为Java微服务开发的主流框架,其自动配置原理通过@EnableAutoConfiguration注解实现,大幅简化了传统Spring应用的配置复杂度。消息中间件Kafka则凭借其高吞吐、分布式特性成为异步通信的首选,其分区存储和零拷贝技术显著提升性能表现。在云原生架构中,这两项技术的组合能有效支撑高并发场景,如电商订单处理或实时日志分析。面试中常涉及Spring Boot自动配置实现、Kafka消费者组再平衡等核心机制,掌握这些原理对构建稳定可靠的分布式系统至关重要。通过分析典型面

weixin_33755649的博客 515

3D视觉-结构光测量-线结构光测量

线结构光测量中,由激光器射出的激光光束透过柱面透镜扩束,再经过准直,产生一束片状光。这片光束像刀刃一样横切在待测物体表面,因此线结构光法又被成为光切法。线结构光测量常采用二维面阵CCD作为接受器件,因此只要通过增加垂直于面阵探测器的第三维度方向,就可以实现对三维物体的测量。

qq_20660115的博客 3123

Spring Cloud Stream App Starters Einstein SR6 是 Spring Cloud Stream 中的一个应用启动器

Spring Cloud Stream App Starters Einstein SR6 是 Spring Cloud Stream 中的一个应用启动器,它提供了一些预配置的模板和依赖项,用于快速开发基于消息驱动的微服务。:RabbitMQ 是一种流行的开源消息代理软件,支持复杂的消息路由、任务队列和发布/订阅模式。:Amazon Kinesis 是 AWS 提供的一种实时数据处理服务,Spring Cloud Stream 也支持与 AWS Kinesis 的集成,适用于需要处理大量数据流的场景。

[Blog][Domain] programb.blog.youkuaiyun.com 409

Crossbar RRAM技术解析:从1TnR架构到存储革命

非易失性存储器(NVM)是数据存储的核心技术,其原理基于物理状态的稳定改变以实现数据持久化。阻变存储器(RRAM)作为一种新兴NVM,利用导电细丝在介质层中的形成与断裂实现数据存储,具有高速、低功耗和结构简单的优势。在工程实践中,RRAM面临潜行路径电流等挑战,而Crossbar提出的1TnR架构通过引入共享晶体管有效解决了这一问题,在保证性能的同时提升了集成密度。该技术与CMOS工艺兼容,支持后端集成与多层堆叠,为高密度存储和嵌入式应用提供了新的解决方案。结合当前行业对高能效、高密度存储的需求,RRAM在

weixin_42523104的博客 317

Zynq 双核AMP 通信

4、配置离线编译(这里不讲),配置linux的内核地址空间(0x4000_0000改为0x2000_0000),以及单核启动。CPU1设置为0x2000_0000~0x3FFF_FFFF(也可以小于0x3FFF_FFFF)如果禁用CPU1的L2 cache,在CPU1的bsp里面添加编译时候所需要的宏。3、配置工程,将vivado产生的.xsa文件复制到amp_com项目目录下。9、使用petalinux-package --boot 打包。一、vivado工程。5、编译u-boot。

y183128184的博客 1086

Spring Boot与Kafka 3.x集成实践与性能优化

消息队列作为分布式系统解耦的核心组件,Apache Kafka凭借其高吞吐、低延迟的特性成为行业标准。本文从Kafka 3.x的KRaft架构和幂等生产者等新特性切入,深入解析Spring Boot集成Kafka的技术实现。通过生产者批量发送、消费者并发处理等工程实践,展示如何构建高可靠的消息系统。结合微服务架构中的事务消息、死信队列等场景,提供完整的性能调优方案,特别针对Kafka 3.x的Tiered Storage和Spring Boot 3.x的监控集成给出具体配置示例。

chuannaoxuan4674的博客 359

移动通信基础(13)TDL、CDL、信道相关性

参考《U型槽无线信道多径传播特性测量与建模方法的研究》、《5G信号源中的信道模拟与仿真研究》衰落衰落理解为信号幅度在时间和频率上的不断波动,是无线信道一个重要的恶化特性。信道幅度恶化的两个主要来源分别是加性噪声和信号衰落,高斯白噪声信道模型就是典型的加性噪声,信号衰落引起的是乘性的信号扰动,与加性噪声从原理上完全不同。信道的频率选择性衰落组为无线信道的重要特征之一,是人们进行无线系统设计考虑的重要因素,决定了导频隔间的大小。...

tybAly的博客 2万+

Spring Cloud Stream Applications Einstein SR5 是一个基于 Spring Cloud Stream 构建的应用程序

Einstein SR5 是其中的一个示例项目,展示了如何使用 Spring Cloud Stream 进行消息的发布和订阅,以及如何集成其他技术栈如 Spring Boot、Spring Data 等。Spring Cloud Stream 是一个用于构建消息驱动微服务的框架,它提供了一种简单的方式来处理消息的发送和接收。:使用 Spring Boot 的配置管理功能来管理应用程序的各种配置,包括消息中间件的连接信息、消息通道的定义等。Kinesis 提供了强大的扩展性和与其他 AWS 服务的集成能力。

[Blog][Domain] programb.blog.youkuaiyun.com 535

17、激光切割质量影响因素及优化研究

本文研究了激光切割过程中焦点位置、入射角、激光功率、切割速度和气体压力等因素对切割质量的影响,采用响应面方法(RSM)和Box-Behnken设计,基于三种不同喷嘴对SS 304不锈钢进行实验。通过建立切缝宽度比和条纹深度的回归模型,并结合方差分析验证模型有效性,深入分析各参数对切割质量的影响机制。研究发现喷嘴结构差异显著影响参数作用趋势,尤其在切割速度和气体压力响应上表现明显。最终通过多目标优化确定最小激光功率、适中切割速度和最大气体压力为最优组合,显著提升切割质量,为实际生产提供了理论依据和技术支持。未

grape的博客 129

扩展卡尔曼滤波 (EKF, Extended Kalman Filter) 算法详解及案例分析

扩展卡尔曼滤波是一种用于估计非线性动态系统状态的递归算法。其目标是通过结合非线性系统模型和观测数据,估计系统的最优状态。

闲人编程的博客 2383

**Spring Cloud Stream Applications Einstein SR5** 是一组预构建的、可重用的 **Spring Cloud Stream 微服务应用程序模板

**Spring Cloud Stream Applications Einstein SR5** 是一组预构建的、可重用的 **Spring Cloud Stream 微服务应用程序模板**,旨在简化基于消息驱动架构(如 Kafka、RabbitMQ)的微服务开发。它属于 **Spring Cloud Stream App Starters** 项目的一部分,专为快速搭建事件流处理流水线而设计。

[Blog][Domain] programb.blog.youkuaiyun.com 544

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Spring Cloud Stream App Starters Einstein SR5

Spring Cloud Stream Application Starters are standalone executable applications that communicate over messaging middleware such as Apache Kafka and RabbitMQ. These applications can run independently o...

[Blog][Domain] programb.blog.youkuaiyun.com 360

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

spring stream http 流式计算

http 请求源,是监听http请求,并发送消息给kafka 消息中间件,其中,消息的格式为 Content-Type matches text/* or application/json 发送的string 类型,否则为字节数组的形式。应用场景,比如流量统计,http的监听等。 数据源需要引入的包为 dependency> groupId>org.springframework

心语 1672

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

AI辅助构建项目配置可视化看板:Spring Boot+Vue实战

在软件工程实践中,配置管理与服务状态监控是保障系统稳定性的基础环节。其核心原理在于通过统一接口聚合分散的配置源与运行时指标,并以可视化形式降低运维认知负担。该技术的价值在于提升团队协作效率、实现问题的快速定位与响应。典型的应用场景包括微服务架构中的配置中心、中间件健康状态大盘以及开发环境的一站式管理。本文聚焦于利用AI编程助手,结合Spring Boot与Vue3等技术栈,快速构建一个轻量级、可交互的项目配置看板,实现数据库、Redis、Kafka等关键组件的状态集中可视化与实时感知。

weixin_33845881的博客 357

【springboot】万字操作指南 Spring Boot 2.x 升级到 3.x:微服务项目实战

摘要: 本文提供Spring Boot 2.x升级到3.x的实战指南,重点针对微服务项目。升级涉及JDK 17、Spring Framework 6、Jakarta EE等连锁变化,需系统规划版本矩阵(如Spring Boot 3.5.x + Spring Cloud 2025.0.x)。建议升级路线:先统一JDK 17环境,再处理依赖迁移(javax→jakarta)、Spring Security 6适配、OAuth2授权服务器改造等关键步骤。

Cjh20pan的博客 968
上一篇: 基于AOP实现的数据脱敏功能
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值