RocketMQ-Streams 首个版本发布,轻量级计算的新选择

简介: RocketMQ-Streams 聚焦「大数据量->高过滤->轻窗口计算」场景,核心打造轻资源,高性能优势,在资源敏感场景有很大优势,最低 1Core,1G 可部署。通过大量过滤优化,性能比其他大数据提升 2-5 倍性能。广泛应用于安全,风控,边缘计算,消息队列流计算。

作者:袁小栋、程君杰


RocketMQ-Streams 聚焦「大数据量->高过滤->轻窗口计算」场景,核心打造轻资源,高性能优势,在资源敏感场景有很大优势,最低 1Core,1G 可部署。通过大量过滤优化,性能比其他大数据提升 2-5 倍性能。广泛应用于安全,风控,边缘计算,消息队列流计算。


RocketMQ-Streams 兼容 Flink 的 SQL,udf/udtf/udaf,将来我们会和 Flink 生态做深度融合,即可以独立运行,也可发布成 Flink 任务,跑在 Flink 集群,对于有 Flink 集群的场景,即能享有轻资源优势,可以做到统一部署和运维。


01

RocketMQ-Streams 特点及应用场景


 RocketMQ-Streams 应用场景


640.png


  • 计算场景:适合大数据量->高过滤->轻窗口计算的场景。不同于主流计算引擎,需要先部署集群,写任务,发布,调优,运行这么复杂的过程。RocketMQ-Streams 本身就是一个 lib 包,基于 SDK 写完流任务,可以直接运行。支持大数据开发需要的计算特性:Exactly-ONCE,灵活窗口(滚动、滑动、会话),双流Join,高吞吐、低延迟、高性能。最低 1Core,1G 可以运行。
  • SQL引擎:RocketMQ-Streams 可视作一个 SQL 引擎,兼容 Flink SQL 语法,支持 Flink udf/udtf/udaf 的扩展。支持 SQL 热升级,写完 SQL,通过 SDK 提交 SQL,就可以完成 SQL 的热发布。


  • ETL引擎:RocketMQ-Streams 还可视作 ETL 引擎,在很多大数据场景,需要完成数据从一个源经过 ETl,汇聚到统一存储,里面内置了 grok,正则解析等函数,可以结合 SQL 一块完成数据 ETL 。


  • 开发 SDK,它也是一个数据开发 SDK 包,里面的大多数组件都可以单独使用,如 Source/sink,它屏蔽了数据源,数据存储细节,提供统一编程接口,一套代码,切换输入输出,不需要改变代码。


 RocketMQ-Streams 设计思路


640 (1).png


设计目标

  • 依赖少,部署简单,1Core,1G 单实例可部署,可随意扩展规模。
  • 实现需要的大数据特性:Exactly-ONCE,灵活窗口(滚动、滑动、会话),双流 Join,高吞吐、低延迟、高性能。
  • 实现成本可控,实现低资源,高性能。
  • 兼容 Flink SQL,UDF/UDTF,让非技术人员更易上手。


设计思路

  • 采用 shared-nothing 的分布式架构设计,依赖消息队列做负载均衡和容错机制,单实例可启动,增加实例实现能力扩展。并发能力取决于分片数。
  • 利用消息队列的分片做 shuffle,利用消息队列负载均衡实现容错。
  • 利用存储实现状态备份,实现 Exactly-ONCE 的语义。用结构化远程存储实现快速启动,不必等本地存储恢复。


 RocketMQ-Streams 特点和创新

640 (2).png

image.gif

02

RocketMQ-Streams SDK 详解


 Hello World


按照惯例,我们先从一个例子来了解 RocketMQ-Streams

640 (3).png


  • namespace:相同 namespace 的任务可以跑在一个进程里,可以共享配置
  • pipelineName:job name
  • DataStreamSource:创建 source 节点
  • map:用户函数,可以通过实现 MapFunction 扩展功能
  • toPrint:结果打印出来
  • start:启动任务
  • 运行上面代码就会启动一个实例。如果想多实例并发,可以启动多个实例,每个实例消费部分 RocketMQ 的数据。
  • 运行结果:把原始消息拼接上“---”,并打印出来



 RocketMQ-Streams SDK


1.png


  • StreamBuilder 做为起点,通过设置 namespace,jobName 创建一个 DataStreamSource 。
  • DataStreamSource 通过 from 方法,设置 source,创建 DataStream 对象。
  • DataStream 提供多种操作,会产生不同的流:
  • to 操作产生 DataStreamAction
  • window 操作产生 WindowStream 配置 window 参数
  • join 操作产生 JoinStream 配置 join 条件
  • Split 操作产生 SplitStream 配置 split 条件
  • 其他操作产生 DataStream
  • DataStreamAction 启动整个任务,也可以配置任务的各种策略参数。支持异步启动和同步启动。


 RocketMQ-Streams 算子


image.gif2.png


 RocketMQ-Streams 算子


SQL 有两种部署模式,1 是直接运行 client 启动 SQL,见第一个红框;2 是搭建 server 集群,通过 client 提交 SQL 实现热部署,见第二个红框。

640 (4).png


RocketMQ-Streams SQL 扩展,支持多种扩展方式:

  • 通过 FlinkUDF,UDTF,UDAF 扩展 SQL 能力,在 SQL 中通过 create function 引入,有个限制条件,即 UDF 在 open 时未用到 Flink FunctionContext 的内容。
  • 通过内置函数扩展 SQL 的函数,语法同 Flink 语法,函数名是内置函数的名称,类名是固定的。如下图,引入了一个 now 的函数,输出当前时间。系统内置了 200 多个函数,可按需引入。


555.png


  • 通过扩展函数实现,实现一个函数很简单,只需要在 class 上标注 Function,在需要发布成函数的方法上标注 FunctionMethod,并设置需要发布的函数名即可,如果需要系统信息,前面两个函数可以是 IMessage 和 Abstract,如果不需要,直接写参数即可,参数无格式要求。如下图,创建了一个 now 的函数,两种写法都可以。可以通过 currentTime=now()来调用,会在 Message 中增加一个 key=currentTime,value=当前时间的变量。

666.png


  • 把现有 java 代码发布成函数,通过策略配置,把 java 代码的类名,方法名,期望用到的函数名,配置进去,把 java 的 jar 包 copy 到 jar 包目录即可。下图是几种扩展的应用实例。


03

RocketMQ-Streams 架构及原理实现


 整体架构


66.png

 Source 实现


  • Source 要求实现最少消费一次的语义,系统通过 checkpoint 系统消息实现,在提交 offset 前发送 checkpoint 消息,通知所有算子刷新内存。
  • Source 支持分片的自动负载均衡和容错。
  • 数据源在分片移除时,发送移除系统消息,让算子完成分片清理工作。
  • 当有新分片时, 发送新增分片消息,让算子完成分片的初始化。
  • 数据源通过 start 方法,启动 consuemr 获取消息。
  • 原始消息经过编码,附加头部信息包装成 Message 投递给后续算子。

640 (5).png


 Sink 实现


  • Sink 是实时性和吞吐的一个结合。
  • 实现一个 Sink 只要继承 AbstractSink 类实现 batchInsert 方法即可。batchInsert 的含义是一批数据写入存储,需要子类调用存储接口实现,尽量应用存储的批处理接口,提高吞吐。
  • 常规的使用方式是写 Message->cache->flush->存储的方式,系统会严格保证,每次批次写入存储的量不超过 batchsize 的量,如果超了,会拆分成多批写入。


777.png


  • Sink 有一个 cache,数据默认写 cache,批次写入存储,提高吞吐量。(一个分片一个 cache)。
  • 可以开启自动刷新,每个分片会有一个线程,定时刷新 cache 数据到存储,提高实时性。实现类:DataSourceAutoFlushTask 。
  • 也可以通过调用 flush 方法刷新 cache 到存储。
  • Sink 的 cache 会有内存保护,当 cache 的消息条数>batchSize,会强制刷新,释放内存。


 RocketMQ-Streams Exactly-ONCE


  • Source 确保在 commit offset 时,会发送 checkpoint 系统消息,收到消息的组件会完成存盘操作。消息至少消费一次。
  • 每条消息会有消息头部,里面封装了 QueueId 和 offset 。
  • 组件在存储数据时,会把 QueueId 和处理的最大 offset 存储下来,当有消息重复时,根据 maxoffset 去重。
  • 内存保护,一个 checkpoint 周期可能有多次 flush(条数触发),保障内存占用可控。


88.png

 RocketMQ-Streams Window


  • 支持滚动,滑动和会话窗口。支持事件时间和自然时间(消息进入算子的时间)。
  • 支持高性能模式和高可靠模式,高性能模式不依赖远程存储,但在分片切换时的窗口数据会有丢失。
  • 快速启动,无需等本地存储恢复,在发生错误或分片切换时,异步从远程存储恢复数据,同时直接访问远程存储计算。
  • 利用消息队列负载均衡,实现扩容缩容,每个 Queue 是一个分组,一个分组同一刻只被一台机器消费。
  • 正常计算依赖本地存储,具备 Flink 相似的计算性能。

99.png

image.gif

支持三种触发模式,可以均衡 watermark 延迟和实时性要求
image.gif999.png

04

RocketMQ-Streams 在云安全的应用


 在安全应用的背景

640 (6).png

image.gif

  • 公共云转战专有云,在入侵检测计算方面遇到了资源问题,大数据集群默认不输出,输出最低 6 台高配机器,用户很难接受因为买云盾增配一套大数据集群。
  • 专有云用户升级,运维困难,无法快速升级能力和修复 bug。


 流计算在安全的应用


  • 基于安全特点(大数据->高过滤->轻窗口计算)打造轻量级计算引擎:经过分析所有的规则都会做前置过滤,然后才会做较重的统计,窗口,join 操作,且过滤率比较高,基于此特点,可以用更轻的方案实现统计,join 操作。

23.png


  • 通过 RocketMQ-Streams,覆盖 100%专有云规则(正则,join,统计)。
  • 轻资源,内存是公共云引擎的 1/70,CPU 是 1/6,通过指纹过滤优化,性能提升 5 倍以上,且资源不随规则线性增加,新增规则无资源压力。复用以前的正则引擎资源,可支持 95%以上局点,不需要增加额外物理资源。
  • 通过高压缩维表,支持千万情报。1000 W 数据只需要 330 M 内存。
  • 通过 C/S 部署模式,SQL 和引擎可热发布,尤其护网场景,可快速上线规则。


05

RocketMQ-Streams 未来规划

640 (7).png



新版本下载地址:https://github.com/apache/rocketmq-streams/releases/tag/rocketmq-streams-1.0.0-preview


相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
JSON 算法 算法框架/工具
【python】python指南(十二):Json与dict、list互相转换
【python】python指南(十二):Json与dict、list互相转换
507 0
|
消息中间件 存储 负载均衡
2024消息队列“四大天王”:Rabbit、Rocket、Kafka、Pulsar巅峰对决
本文对比了 RabbitMQ、RocketMQ、Kafka 和 Pulsar 四种消息队列系统,涵盖架构、性能、可用性和适用场景。RabbitMQ 以灵活路由和可靠性著称;RocketMQ 支持高可用和顺序消息;Kafka 专为高吞吐量和低延迟设计;Pulsar 提供多租户支持和高可扩展性。性能方面,吞吐量从高到低依次为
7513 1
|
消息中间件 监控 Java
云原生消息队列RocketMQ:为什么我们选择 RocketMQ
在众多开源消息队列产品中,一名优秀架构师如何给出高性价比方案
813 0
云原生消息队列RocketMQ:为什么我们选择 RocketMQ
|
消息中间件 存储 云安全
RocketMQ Streams 1.1.0:轻量级流处理再出发
一、背景流处理是数据集成领域一个重要话题,他能显著减少数据输入和结果输出之间延迟,在对时间延迟敏感的商业场景,例如安全、智能运维、实时推荐,有大量的需求。RocketMQ作为一款消息中间件,已经在业务集成领域展现出巨大价值,但是在数据集成领域还有较大拓展空间。通过支持流处理可以带动RocketMQ进入数据集成领域,拓展RocketMQ的使用范围。RocketMQ Streams是一款基于Rocke
547 0
RocketMQ Streams 1.1.0:轻量级流处理再出发
|
2天前
|
人工智能 运维 数据挖掘
最新版通义千问(Qwen3.8-Max-Preview)功能介绍
2026年7月,阿里云通义千问正式对外开放**Qwen3.8-Max-Preview旗舰预览模型**,作为目前千问系列规格最高、综合性能最强的新一代万亿级AI模型,该模型搭载2.4T超大参数架构,是阿里云首款突破万亿参数的原生多模态旗舰模型,全面覆盖文本、图像、视频、文档多维度处理能力。相较于前代热门Qwen3.7-Max版本,本次预览版实现全方位跨越式升级,在真实工程开发、多智能体长周期任务、全链路办公自动化、海量数据分析等高阶场景中,综合能力已达到全球顶尖模型水准。现阶段该模型已正式开放抢先体验通道,依托阿里云百炼Token Plan、Qoder编码平台、QoderWork办公终端三大专属
1721 0
|
6天前
|
人工智能 安全 测试技术
|
7天前
|
云安全 人工智能 安全
阿里云 Agentic SOC 位居 IDC MarketScape安全运营智能体2026领导者类别
以 Agentic AI 重构安全运营闭环,阿里云云安全在产品能力与市场份额
1199 3
|
2天前
|
人工智能
Qwen3.8抢先体验!正式版即将发布并开源!
千问Qwen3.8即将开源,参数达2.4T,进化速度以“天”计,实力媲美Fable 5。预览版Qwen3.8-Max已上线阿里Token Plan等平台,限时优惠:日间Credits低至1折,夜间更优,个人/团队版月付仅35元起!
454 18
|
2天前
|
人工智能 自然语言处理 数据挖掘
Qwen3.8-Max 预览版全解析:2.4 万亿参数旗舰模型,Token Plan 限时优惠指南
Qwen3.8-Max-Preview是通义千问Qwen3系列旗舰MoE大模型,参数达2.4万亿,综合推理能力居行业第一梯队。支持思考/快速双模式,擅长大模型五大高难场景。现于阿里云百炼Token Plan、Qoder及QoderWork上线体验,个人版低至39元/月。在阿里云百炼官网:https://t.aliyun.com/U/fPVHqY 免费领取千万Tokens
392 1
Qwen3.8-Max 预览版全解析:2.4 万亿参数旗舰模型,Token Plan 限时优惠指南

相关产品

  • 云消息队列 MQ