Apache spark Samza/Flink/Spark:处理完成(“完成”标志)

Apache spark Samza/Flink/Spark:处理完成(“完成”标志),apache-spark,streaming,apache-flink,Apache Spark,Streaming,Apache Flink,你好 我的系统使用交易流,由多个处理步骤(作业)组成。从本质上讲,它处理交易流并计算它们的一些度量(VaR)。源流可以分割成某些区块(交易在投资组合中分组)。目前,我有自己的解决方案,并期待切换到Samza或Flink Trades Processors Output {<portfolio done>, t3, t2, t1} -> A->B->... -> Measure

你好

我的系统使用交易流,由多个处理步骤(作业)组成。从本质上讲,它处理交易流并计算它们的一些度量(VaR)。源流可以分割成某些区块(交易在投资组合中分组)。目前,我有自己的解决方案,并期待切换到Samza或Flink

Trades                               Processors       Output

{<portfolio done>, t3, t2, t1} ->    A->B->...  ->   Measure 
交易处理器输出
{,t3,t2,t1}->A->B->…->量
我面临的基本问题是——我需要了解投资组合何时被完全处理,输出中的数字何时完成。基本上,我需要将输出(聚合度量)与输入(在此度量中处理哪些交易)关联起来,这样就可以说“这个数字反映了这些交易”。理想情况下,在处理所有投资组合时,我需要记录最终数字

处理阶段非常重要,它们创建中间流(如返回向量),进行一些过滤等。因此简单的计数不起作用

我觉得我的问题应该是相当标准的,但在Samza或Flink中既找不到算法也找不到实现。
我发现的最接近的问题是:

看起来类似于我所需要的,可以通过Flink中的
水印功能来实现。我说的对吗?水印只带有时间戳。我怀疑你是否能利用它们——这种机制是相当内在的,因为你可以使用它。你有没有研究过Flink的高级窗口概念?可能是你的朋友。但这很难说清楚。如果我理解正确的话,你会在运行中“计算”收盘交易(即,收盘窗口)条件吗?这是如何工作的?基本上它的工作方式是源系统发出交易流,DAG处理它们并积累一些价值。在某个阶段,源系统会说“完成,不再交易”,我需要等到DAG完全赶上并将valueQuestion保存在窗口和触发器上-系统会在窗口打开期间处理源系统的数据吗?或者它会尝试缓冲所有传入的数据,等待窗口事件并将其作为一个批处理?如果您甚至从源获得此特殊信息,您可以定义一个自定义触发器,等待此事件关闭窗口。在内部,元组被缓冲,窗口关闭时应用窗口函数。(增量窗口已列入议事日程,但尚未提供。)看起来与我需要的类似,可以通过Flink中的
水印
功能来实现。我说的对吗?水印只带有时间戳。我怀疑你是否能利用它们——这种机制是相当内在的,因为你可以使用它。你有没有研究过Flink的高级窗口概念?可能是你的朋友。但这很难说清楚。如果我理解正确的话,你会在运行中“计算”收盘交易(即,收盘窗口)条件吗?这是如何工作的?基本上它的工作方式是源系统发出交易流,DAG处理它们并积累一些价值。在某个阶段,源系统会说“完成,不再交易”,我需要等到DAG完全赶上并将valueQuestion保存在窗口和触发器上-系统会在窗口打开期间处理源系统的数据吗?或者它会尝试缓冲所有传入的数据,等待窗口事件并将其作为一个批处理?如果您甚至从源获得此特殊信息,您可以定义一个自定义触发器,等待此事件关闭窗口。在内部,元组被缓冲,窗口关闭时应用窗口函数。(增量窗口已列入议程,但尚未可用。)