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版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
消息中间件 存储 自然语言处理
RocketMQ 5.0: 存储计算分离新思路
Apache RocketMQ 自 2012 年开源以来,因其架构简单,业务功能丰富,具备极强的可扩展性等特点被广泛采用。RocketMQ 在阿里巴巴集团内部有着数千台的集群规模,每天十万亿消息的规模。在阿里云上,RocketMQ 的商业化产品也以弹性云服务的形式为全球数万个用户提供企业级的消息解决方案,被广泛应用于互联网、大数据、移动互联网、物联网等领域的业务场景,成为了业务开发的首选消息中间件。 尽管消息中间件 RocketMQ 在阿里巴巴和开源社区已经走过了十多个年头,但在云原生浩浩荡荡的浪潮下(《云原生时代消息中间件的演进路线》),我们对 RocketMQ 的架构有了一些新的思考。
316 0
RocketMQ 5.0:  存储计算分离新思路
|
消息中间件 云安全 缓存
RocketMQ Streams 1.1.0: 轻量级流处理再出发
作为一套全新的流式处理框架,RocketMQ Streams 如何实现流计算拓扑图构建呢?一起来了解下它的实现原理以及数据流转过程和过程中的状态变化吧~
211 0
RocketMQ Streams 1.1.0: 轻量级流处理再出发
|
消息中间件 存储 云安全
RocketMQ Streams 1.1.0:轻量级流处理再出发
一、背景流处理是数据集成领域一个重要话题,他能显著减少数据输入和结果输出之间延迟,在对时间延迟敏感的商业场景,例如安全、智能运维、实时推荐,有大量的需求。RocketMQ作为一款消息中间件,已经在业务集成领域展现出巨大价值,但是在数据集成领域还有较大拓展空间。通过支持流处理可以带动RocketMQ进入数据集成领域,拓展RocketMQ的使用范围。RocketMQ Streams是一款基于Rocke
288 0
RocketMQ Streams 1.1.0:轻量级流处理再出发
|
消息中间件 存储 弹性计算
RocketMQ 5.0: 存储计算分离新思路
在阿里云上,RocketMQ 的商业化产品也以弹性云服务的形式为全球数万个用户提供企业级的消息解决方案,被广泛应用于互联网、大数据、移动互联网、物联网等领域的业务场景,成为了业务开发的首选消息中间件。
1099 9
RocketMQ 5.0: 存储计算分离新思路
|
消息中间件 边缘计算 运维
阿里云云原生-基于 RocketMQ 的轻量级流计算创新应用|学习笔记
快速学习阿里云云原生-基于 RocketMQ 的轻量级流计算创新应用
阿里云云原生-基于 RocketMQ 的轻量级流计算创新应用|学习笔记
|
消息中间件 存储 运维
RocketMQ 5.0: 存储计算分离新思路
尽管消息中间件 RocketMQ 在阿里巴巴和开源社区已经走过了十多个年头,但在云原生浩浩荡荡的浪潮下,我们开始对 RocketMQ 的架构有了一些新的思考。本文我们将对其展开详细的讲解。
RocketMQ 5.0: 存储计算分离新思路
|
消息中间件 SQL 存储
RocketMQ Streams:将轻量级实时计算引擎融合进消息系统
随着各行各业移动互联和云计算技术的普及发展,大数据计算已深入人心,最常见的比如 flink、spark 等。这些大数据框架,采用中心化的 Master-Slave 架构,依赖和部署比较重,每个任务也有较大开销,有较大的使用成本。RocketMQ Streams 着重打造轻量计算引擎,除了消息队列,无额外依赖,对过滤场景做了大量优化,性能提升 3-5 倍,资源节省 50%-80%。
688 0
RocketMQ Streams:将轻量级实时计算引擎融合进消息系统
|
消息中间件 大数据 Apache
解锁事务消息,发力大数据流计算,Apache RocketMQ 开发者再聚深圳,干货满满获开源爱好者好评
7月29日,阿里中间件(Aliware)联合阿里巴巴技术协会,在深圳举办了Apache RocketMQ毕业后的第二次线下Meetup。当天现场的700名和线上三个直播平台的开源技术爱好者一起,与活动现场的Committer及Contributor就RocketMQ的CI/CD、最终一致性事务、金融领域的最佳实践、流计算生态、以及开源社区生态建设等话题展开深入探讨。本次活动不仅促进了开源社区的发展壮大,也推进了消息技术及规范的进一步发展。据统计,报名活动页面浏览量58000次,报名人数达2034人,线上3大平台直播,总PV超过17000,UV接近7500。
3773 0
解锁事务消息,发力大数据流计算,Apache RocketMQ 开发者再聚深圳,干货满满获开源爱好者好评
|
23天前
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
63 5
|
18天前
|
消息中间件 存储 Kafka
MQ 消息队列核心原理,12 条最全面总结!
本文总结了消息队列的12个核心原理,涵盖消息顺序性、ACK机制、持久化及高可用性等内容。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。

相关产品

  • 云消息队列 MQ