在4.3版本之前,TranswarpDataHub(TDH)上的流处理应用必须用Java或者scala开发,这将流处理应用的开发门槛设置得非常高。从TDH4.3开始,TranswarpSlipstream允许用户通过SQL的方式实现业务逻辑,大大降低了流应用开发的门槛。所以,星环科技推荐多数用户采用Slipstream开发流应用。Slipstream几乎可以应用于所有业务场景,包括ETL工具,规则报警工具等简单业务场景。对于更复杂的业务逻辑,用户可以选择使用PLSQL,属于Slipstream的高级功能。从4.8开始,Slipstream新增了基于事件驱动模式的流处理功能,在低延迟处理方面的性能表现更为出色。
1.微批模式和事件驱动模式的一体化
在同一套系统里,用户可以根据业务需求,灵活切换微批模式的流处理和事件驱动模式的流处理。
2.极高的易用性
以往的流处理平台有较高的入门门槛,比如SparkStreaming,Storm,必须对框架以及流处理本身,甚至是底层技术比较熟悉的情况下,才能写出高效的流处理程序。这大大地限制了流处理的推广和应用。而使用Slipstream,用户只需要有编写普通SQL的经验,就可以写出高效、安全、稳定的流处理应用。
3.性能提升
在一些条件下,采用Slipstream的方式甚至比编程方式获得更高的性能提升。这是因为Slipstream做了一些特殊优化,在编程模式下无法轻易实现。比如,多条针对同一个输入流的SQL只需读取一份数据;增加迭代框架,使得原本无法利用SparkAPI进行优化的迭代计算效率大大提升。
4.产品化程度高
通过编程的方式来实现流处理的另一个问题是产品化程度非常低。由于编程有较高的自由度,出现问题的可能性很大;而又由于编程的方式将流处理平台和用户程序绑定在一起,用户没办法很好地区分是自己代码的问题还是平台的问题,导致无法及时地分析出错原因。SQL作为一个通用的接口将大大地提高产品化程度。
5.迁移成本低
用户原有的业务逻辑很多是通过SQL实现的,如果通过编程的方式迁移到流上,迁移成本非常高,还不能保证迁移后的逻辑是否正确。而一旦采用Slipstream的方式,用户只需要修改少量SQL,迁移成本几乎接近零。
1.支持率
99%的ANSI SQL 2003的支持率;
95%的PLSQL Oracle以及PLSQL DB2的支持率。
2.强大的优化器提升性能
3.支持按数据字段时间切分滑动窗口和跳动窗口。
4.支持多种输出方式
包括Hyperbase,Hive以及Holodesk等。
5.支持企业数据总线
6.支持运行时隔离
7.Slipstream与ANSI SQL 2003无缝兼容
Input Stream
直接用于接收数据源传来的Stream;
Input Stream定义了如何从数据源读取数据。
Derived Stream
对已有Stream进行变形得到的新的Stream。
Window Stream
Window Stream是Derive Stream的一种, 是对一个stream中在一定时间窗口(window)内的数据进行转化。
两个重要的参数
Length:窗口的持续时间;
Slide:执行窗口操作的间隔。
要让Slipstream执行计划,需要有相应的 Action 操作(比如将结果插入结果表,或者执行一个临时查询)来触发StreamJob。
StreamJob从逻辑上讲是运行时概念,然而为了方便错误恢复或者用户使用,Slipstream也支持将其序列化。
定义:一组业务逻辑相关的StreamJob的集合。
功能:权限控制、全局配置、资源共享、资源隔离。
1. DML SQL背景运行
对于普通SQL,当敲完SQL回车后用户需要等待SQL执行结束后得到结果或者得到出错信息;
执行Slipstream的DML语句时用户会立即得到返回结果。
2. 结果输出
对于普通SQL,执行"select …"查询,查询结果将显示在用户命令行或者通过JDBC读取;
在Slipstream中,用户必须显式地指定将结果输出到哪个地方。
SlipStream登录
beeline -u jdbc:hive2://tdh-1:10010
beeline -u jdbc:hive2://tdh-1:10010,tdh-2:10010,tdh-3:10010 --color=true
scv格式
beeline -u jdbc:hive2://tdh-4:10010 --showHeader=false --outputformat=csv
建kafka producer并发布消息
执行下面命令,运行kafka/bin目录下得kafka-console-producer.sh脚本:
./kafka-console-producer.sh --broker-list tdh-1:9092 --topic demo
登录集群中的任意一个节点,连接到Slipstream
beeline -u "jdbc:hive2://tdh-1:10010"
建一个Stream
create stream demo_stream(name STRING,age INT,addr STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' TBLPROPERTIES("topic"="demo","kafka.zookeeper"="tdh-1:2181","kafka.broker.list"="tdh-1:9092");
查看Stream
show streams;
创建并触发一个streamjobs
建一张新表demo_table,它需要和demo_stream有相同的schema
create table demo_table(name STRING,age INT,addr STRING);
向demo_table插入demo_stream中的数据,这个操作会触发streamjob的执行
insert into demo_table select * from demo_stream;
列出正在执行的streamjob
list streamjobs;
切换到正在运行向demo发布数据的kafka producer的页面,在命令行输入一些数据
./kafka-console-producer.sh --broker-list tdh-1:9092 --topic demo
切换回Slipstream命令行的窗口,现在查看demo_table中的数据
select * from demo_table;
现在可以在demo_table上进行一些查询
select * from demo_table order by age;
停止streamjob
stop streamjob <streamjobID>;
Slipstream支持以Kafka为数据源,从4.8开始,与Slipstream对接的Kafka版本为0.10.2。
查询topic,进入kafka目录
bin/kafka-topics.sh --list --zookeeper localhost:2181
启用producer
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic topicName
消费topic内容
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topicName --from-beginning