欢迎来到cep-china!以下文章翻译
https://docs.wso2.com/display/SP430/Quick+Start+Guide
仅供学习参考,未经许可不得转载。
WSO2流处理引擎(SP)是一个轻量级、精简、基于流SQL的处理平台,可以毫秒级响应收集事件、分析事件、模式识别、反馈影响并传递结果。它由Siddhi提供动力,性能极佳。
首先,让我们理解在快速开始中用到的概念:
流引擎和复杂事件处理简介
让我们通过一个例子了解什么是事件。如果我们将通过ATM进行的交易视为数据流,则可以将其中的一次取款认为是一个事件。此事件包含相关的金额、事件、账户等数据。许多次这样的交易形成了一个流。
流处理引擎允许你创建一个处理图并将事件注入其中。每个操作处理这个事件并向下一个处理器发送事件。
一个复杂事件是汇总、展现或表示一系列其他事件的事件。复杂事件处理是流处理的子集,其涉及实时分析多个事件流,识别特定序列或模式,从相关事件推断出重要的业务事件。
WSO2 SP的流处理能力允许你抓去大量数据流并实时处理他们,并以流式方式呈现结果,同时其复杂事件处理功能通过Siddhi支持的模式和序列来模式检测和趋势预测。
Siddhi概览
WSO2 SP使用Siddhi查询语言来编写Siddhi应用程序的处理逻辑。Siddhi可以:
1.从多种不同类型的数据源接受事件输入
2.处理事件并产生观点(信息)
3.推送观点(信息)到多种类型的接收器
你需要用Siddhi流SQL语言来编写Siddhi应用程序的逻辑,在编写并启动Siddhi应用程序以后,它
1.逐个获取数据作为事件
2.处理每个事件中的数据
3.根据目前的处理生成新的高等级事件
4.将新生成的事件作为输出发送到流
在开始之前,你需要准备:
a.安装Oracle Java SE Development Kit (JDK) version 1.8
b.设置JAVA_HOME环境变量
c.解压下载的zip压缩包到/bin目录(是解压目录)
d.运行如下命令来开始WSO2 SP编辑器
Windows:editor.bat
Linux:./editor.sh
WSO2 SP成功开始后,在CLI中会打印出一条相似的log
服务的log将SP编辑器的URL打印在初始化log中:
译者注:可以按照How to install WSO2 Stream Processor进行安装
剧本
在这个剧本下,您正在为一家虚构的大型航运公司Shipping Wave创建一个应用程序。货运经理Smith需要跟踪在任何制定事件段内装载到船上货物的总重量。当货箱装载到船上时测量货箱的重量被认为是一个事件。
让我们开始吧!你可以哪找如下步骤写一个简单的Siddhi应用程序来计算装载到船上每个货箱的总重量:
1.创建一个Sddhi应用程序
2.模拟事件
3.编辑Siddhi应用程序来处理执行时间处理
4.为编辑过的应用程序来模拟事件
5.下一步?
Step 1:创建一个Siddhi应用程序
Smith 需要计算每当有货物装入船上后货物总重量。为了这个结果,让我们创建一个Siddhi应用程序,如下所示:
1.通过http://
注:默认地址为http://localhost:9390/editor
SP Studio打开后如下
2.输入你的Siddhi应用程序的名字,在这个剧本中,给这个应用用CargoWeightApp来命名,如下:
@App:name("CargoWeightApp")
3.定义输入流。流需要有一个名字和模式,来定义每个传入事件应包含的数据。事件数据属性表示为名称和类型。在这个例子中:
a.输入流的名称:CargoStream
b.诶个事件中数据的名称:weight
c.接收到weight的数据类型:int
define stream CargoStream(weight int);
4.定义一个输出流。它与先前定义的信息相同,并有一个额外的totalWeight属性,来表示迄今为止总的重量。这里,我们需要添加接收器来记录输出流中的事件,方便我们观察输出值。
注:通过Siddhi,接收器定义了一个方法将流推送到其他额外的系统。在这个场景下,接收器增加了log类型,它将输出流以log的形式推送到CLI。
@sink(type='log',prefix='LOGGER')
define stream OutputStream(weightint,totalWeight long);
5.输入按照如下方式的Siddhi查询:
a.查询的名称(例如cargoWeightQuery)
b.被处理事件的输入流(例如CargoStream)
c.需要被发送到输出流的数据(例如weight和totalWeight)
d.输出需要如何被计算(例如计算所有事件的总和)
e.输出数据需要被发送到的流(例如OutputStream)
这个查询如下:
@info(name='CargoWeightQuery')
fromCargoStream
selectweight,sum(weight)astotalWeight
insertintoOutputStream;
Siddhi最终的文件如下:
App:name("CargoWeightApp")
define stream CargoStream(weightint);
@sink(type='log',prefix='LOGGER')
define stream OutputStream(weightint,totalWeight long);
@info(name='CargoWeightQuery')
fromCargoStream
selectweight,sum(weight)astotalWeight
insertintoOutputStream;
6.保存Diddhi文件,点击File=>Save。这将打开Save to Workspace对话框,点击Save来保存这个文件在/wso2/editor/deployment/workspace路径(这个事默认的Siddhi应用保存地址)
Step 2:模拟事件
SP Studio内置支持模拟事件。为了测试创建的CargoWeightApp是否按照预期工作,请按照下面给出的步骤模拟事件。
1.开始CargoWeight的Sddhi应用程序,点击开始按钮
如果应用程序成功开始,在SP Studio console中会打出如下日志:
2.在SP Studio点击下面的标志 来打开事件模拟面板。
3.在面板的Single Simulation tab中,选择如下值:
因此,CargoStream流的Weight属性显示如下:
4.在weight栏中,输入1000然后点击Start开始Siddhi程序。然后点击Send发送事件。这个事件在CLI中输出日志如下:
5.用下面的数据发送5个更多的事件
事件输出日志如下:
每个新增的重量都会添加到重量中。因此,发送6个事件之后,总重量为10500.
Step 3:编辑Siddhi应用程序执行时间处理
本节演示如何使用Siddhi执行时间窗口处理。
在上一个场景中,通过仅在内存中运行累加值处理,这个过程中没有存储任何时间。
口处理事一种允许我们在内存中存储在给定时间段或指定数量的事件,以便我们可以执行平均数、最大值等操作。
考虑一下Simth有一个额外计算每次装载货物最后三个货箱的平均重量,以平衡船上的重量。在这里,我们正考虑一个由三个事件组成的窗口,如下图所示:
为了实现这个,按照下面步骤编辑应用程序
a.将名为averageWeight的新属性添加到OutputStream流定义中,以便除了加载心旷的权重和总重量,每个输出事件还显示平均权重。
define stream OutputStream(weight int,totalWeight long,averageWeightdouble);
b.为了定义如何计算平均值,在select语句中对weight属性使用Siddhi的avg方法。这表示对传入事件的weight属性计算平均值。
select weight,sum(weight)as totalWeight,avg(weight) as averageWeight
c.要指定此查询仅应用于收到的最后三个事件,需要长度窗口应用于输入流,如下所示:
from CargoStream#window.length(3)
注:这个窗口应用于所有从CargoStream stream提取的事件之行的所有计算。因此,添加此窗口还会导致居于最后三个事件计算总weight值。
完整的查询语句如下:
@info(name='CargoWeightQuery')
from CargoStream#window.length(3)
select weight, sum(weight) as totalWeight, avg(weight) as averageWeight
insert into OutputStream;
完整的CargoWeight Siddhi 应用程序如下:
@App:name("CargoWeight")
define stream CargoStream (weight int);
@sink(type='log', prefix='LOGGER')
define stream OutputStream(weight int, totalWeight long, averageWeight double);
@info(name='CargoWeightQuery')
from CargoStream#window.length(3)
select weight, sum(weight) as totalWeight, avg(weight) as averageWeight
insert into OutputStream;
Step 4:为编辑后的Siddhi应用程序模拟输入
在这步中,开始编辑后的Siddhi应用程序然后模拟6个事件。
输出的日志如下:
下一步?
了解更多Siddhi以及如何对于你的用户场景更有用,请参看Tutorials
学习如何开发部署管理Siddhi应用,请参看User Guide