作者
袁小栋、程君杰
随着各行各业移动互联和云计算技术的普及发展,大数据计算已深入人心,最常见的比如flink、spark等。这些大数据框架,采用中心化的Master-Slave架构,依赖和部署比较重,每个任务也有较大的开销,有较大的使用成本。RocketMQStams着重打造轻量计算引擎,除了消息队列,无额外依赖,对过滤场景做了大量优化,性能提升3-5倍,资源节省50%-80%。
RocketMQStams适合大数据量-高过滤-轻窗口计算的场景,核心打造轻资源,高性能优势,在资源敏感场景中有很大优势,最低1co,1g可部署,建议的应用场景(安全,风控,边缘计算,消息队列流计算)。
RocketMQStams兼容Blink(Flink的阿里内部版本)的SQL,UDF/UDTF/UDAF,多数Blink任务可以直接迁移成RocketMQStams任务。将来还会发布和Flink的融合版本,RocketMQStams可以直接发布成Flink任务,既可以享有RocketMQStams带来的高性能、轻资源,还可以和现有的Flink任务统一运维和管理。
什么是RocketMQStams?
本章节从基础简介、设计思路和特点三方面对RocketMQStams进行整体介绍。
1、RocketMQStams简介
1)它是一个Lib包,启动即运行,和业务直接集成;2)它具备SQL引擎能力,兼容BlinkSQL语法,兼容BlinkUDF/UDTF/UDAF;3)它包含ETL引擎,可以无编码实现数据的ETL、过滤和转存;4)它基于数据开发SDK,大量实用组件可直接使用,如:Source、sink、script、filter、lease、scheduler、configurable不局限流的场景。
2、RocketMQStams的特点
RocketMQstams基于上述的实现思路,可以看到它有以下几个特点:
轻量
1核1g就可以部署,依赖较轻,在测试场景下用Jar包直接写个main方法就可以运行,在正式环境下最多依赖消息队列和存储(其中存储是可选的,主要是为了分片切换时的容错)。
高性能
实现高过滤优化器,包括前置指纹过滤,同源规则自动归并,hyperscan加速,表达式指纹等,比优化前性能提升3-5倍,资源节省50%以上。
维表JOIN(千万数据量维表支持)
设计高压缩内存存储数据,无java头部和对齐的开销,存储接近原始数据大小,纯内存操作,性能最大化,同时对于Mysql提供了多线程并发加载,提高加载维表的速度。
高扩展的能力
1)Source可按需扩展,已实现:RocketMQ,File,Kafka;2)Sink可按需扩展,已实现:RocketMQ,File,Kafka,Mysql,ES;3)可按Blink规范扩展UDF/UDTF/UDAF;4)提供了更轻的UDF/UDTF扩展能力,不需要任何依赖就可以完成函数的扩展。
提供了丰富的大数据的能力
包括精确计算一次灵活的窗口,双流join,统计,开窗,各种转换过滤,满足大数据开发的各种场景,支持弹性容错的能力。
RocketMQStams的使用
RocketMQStams对外提供两种SDK,一种是DSLSDK,一种是SQLSDK,用户可以按需选择;DSLSDK支持实时场景DSL语义;SQLSDK兼容Blink(Flink的阿里内部版本)SQL的语法,多数BlinkSQL可以通过RocketMQStams运行。接下来,我们详细地介绍一下这两种SDK。0
1、环境要求
1)JDK1.8版本以上;2)Maven3.2版本以上。
02
2、DSLSDK
利用DSLSDK开发实时任务时,需要做如下的一些准备工作:
依赖准备
dependencygroupIdorg.apache.rocketmq/groupIdartifactIdrocketmq-stams-clients/artifactIdversion1.0.0-SNAPSHOT/version/dependency
准备工作完成后,就可以直接开发自己的实时程序。
代码开发
DataStamSourcesource=StamBuilder.dataStam("namespace","pipeline");source.fromFile("~/admin/data/text.txt",false).map(message-message+"--").toPrint(1).start();
其中:
1)Namespace是业务隔离的,相同的业务可以写成相同的Namespace。相同的Namespace在任务调度里可以跑在进程里,也可以共享一些配置;
2)pipelineName可以理解成就是jobname,唯一区分job;
3)DataStamSource主要是创建Source,然后这个程序运行起来,最终的结果就是在原始的消息里面会加"--",然后把它打印出来。
丰富的算子
RocketMQstams提供了丰富的算子,包括:
1)source算子:包括fromFile、fromRocketMQ、fromKafka以及可以自定义source来源的from算子;
2)sink算子:包括toFile、toRocketMQ、toKafka、toDB、toPrint、toES以及可以自定义sink的to算子;
3)action算子:包括Filter、Expssion、Script、selectFields、Union、forEach、Split、Select、Join、Window等多个算子。
部署执行
基于DSLSDK完成开发,通过下面命令打成jar包,执行jar,或直接执行任务的main方法。
mvn-Please-all-DskipTestscleaninstall-Ujava-jarjarNamemainClass
03
3、SQLSDK
依赖准备
dependencygroupId