(可选)输入流(input stream):描述该任务依赖哪些数据流作为输入,是一个数据流名称列表;数据流产生源不会依赖其他数据流,可忽略该配置;
数据处理逻辑(process logic):描述该任务具体的处理逻辑,例如由独立进程进行的外部处理逻辑;
(可选)输出流(output stream):描述该任务产生哪个数据流,是一个数据流名称;数据流处理链末级任务不会产生新的数据流,可忽略该配置;
4)数据处理任务实例(task instance):对一个数据处理任务定义进行具体约束后,可推送到某个处理结点上运行的逻辑实体。附加下列属性:
数据处理任务定义:指向该任务实例对应的数据处理任务定义实体;
输入流过滤条件(input filting condition):一个 boolean 表达式列表,描述每个输入流中符合什么条件的数据记录可以作为有效数据交给处理逻辑;若某个输入流中所有数据记录都是有效数据,则可直接用 true 表示;
(可选)强制输出周期(output interval):描述以什么频率强制该任务实例产生输出流记录,可以用输入流记录个数或间隔时间作为周期;忽略该配置时,输出流记录产生周期完全由处理逻辑自身决定,不受框架约束;
5)数据处理结点(node):可容纳多个数据处理任务实例运行的实体机器,每个数据处理结点的IPv4地址必须保证唯一。
该流处理系统,采用分布式策略,由多个数据处理结点进行数据的处理过程;将流式数据的处理过程划分为不同的阶段,每个阶段伴随数据流的流入、任务的处理及数据流的流出;各个阶段会有若干个处理结点参与完成,其中,每个处理结点上会有若干个数据处理任务实例运行,每个数据处理任务实例则是对一个数据处理任务定义进行具体约束后,可推送到某个处理结点上运行的逻辑实体。在不同的处理结点之间,数据流根据配置信息进行传输;在处理结点内部,结点根据配置信息对流经该结点的数据进行处理。
下图为系统对于流式数据的基本处理流程:
498)this.width=498;'' onmousewheel = ''javascript:return big(this)'' alt="" src="/uploadfile/201301/12/85122814789.png" />
1)定义数据流:将流式数据的处理过程划分成不同的阶段,定义出不同的数据流名称;
2)定义数据处理任务:为数据流的处理过程定义相应的数据处理任务,其中,各个处理任务定义了外部处理逻辑,且其输入/输出数据流须从1)中预定义的数据流列表中选取;
3)定义数据处理结点:定义各个数据处理结点的名称及其IPv4地址信息;
4)定义数据处理任务实例:为3)中定义好的每个处理结点,分别定义运行在其上的数据处理任务实例,其中,每个任务实例所对应的数据处理任务实体须从2)中预定义的处理任务列表中选取;
5)加载数据流的相关配置信息及订阅信息(具体格式见“附录:配置信息格式”),然后开始从数据流产生源读取数据;
6)运行数据流源结点上的任务实例:数据流处理链源结点上的处理任务实例直接对数据流产生源的数据进行处理,然后产生新的输出数据流;
7)运行下一级结点上的任务实例:中间的处理结点上的处理任务实例依赖于上一级处理结点的输出数据流作为输入数据流,从中读取数据,进行处理,产生输出数据流,并传递到下一级处理结点;
8)判断是否到达数据流末级结点:
如果不是,则继续返回步骤7),按照数据流的流动关系,继续运行下一级结点上的任务实例;
否则为数据流末级结点,则进行步骤9)。
9)输出结果:数据流处理链末级结点上的处理任务不会产生新的数据流,完成最终的数据处理任务后将结果进行输出。
以上是数据流在不同处理结点之间的处理流程。每个处理结点作为流处理的一个环节,其结点内部的处理流程