flink复杂分析流设计与挑战

xv8emn3q  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(346)

问题陈述:尝试评估apache flink对高级实时低延迟分布式分析的建模
用例摘要:提供复杂的分析工具i1,i2,i3。。。etc,每个都有产品定义p1、p2、p3;配置用户参数(动态)u1,u2,u3&需要流媒体市场数据m1,m2,m3。。。仪器分析功能(a1,a2)在计算复杂度方面比较复杂,其中一些可能需要300-400ms,但可以并行计算。显然,市场数据流比分析功能快得多(<1ms),需要使用最新的一致的市场数据进行计算。下一个挑战是将流式市场数据与工具分析结果(如价格或收益率)相结合的多个依赖性富集函数e1、e2、e3(如风险/pnl)。最后一个挑战是计算的一致性,因为函数a1可能比a2更快,并且需要给定市场输入的一致的所有工具结果。
计算图相关性示例(将其扩展到数百个工具和10-15个市场数据源):

如果上面的图像不可见,则图形依赖流如下所示:
-m1+m2+p1=>a2
-m1+p1=>a1
-a1+a2=>e2
-a1=>e1
-e1+e2=>结果编号
问题:
这些计算数据流的正确设计/模型,目前我使用(p1+m1)的connectedstreams,另一种方法是使用迭代模型将相同的仪器静态数据再次输入自身?
由于分析功能(a1)比市场数据(m1)流式传输慢得多,因此在计算中仅使用最新的市场数据事件面临问题。因此,需要为下一次迭代收回过时的市场数据,保留那些没有可用值的数据(类似于lru缓存)
需要同步/关联不同时间复杂度的函数执行,以便迭代2仅在迭代1中的所有内容完成时开始

rks48beu

rks48beu1#

这是一个相当广泛的问题,要更准确地回答这个问题,我们需要更多的细节。
下面是一些想法,我希望它们能为您指明一个好的方向,并帮助您接近您的用例:
按键连接的流( a.keyBy(...).connect(b.keyBy(...)) 是最强大的连接-或联盟一样的原始。使用 CoProcessFunction 在一个连接的流上,您可以根据需要灵活地关联或连接值。例如,您可以在等待来自另一个流的匹配事件到达时将来自一个流的事件存储在状态中。
始终保存一个输入的最新数据很容易,只要将该值放入 CoFlatMapFunction 或者 CoProcessFunction . 对于输入1中的每个事件,将事件存储在状态中。对于流2中的每个事件,您可以查看状态以查找流1中的最新事件。
要按时同步,实际上可以考虑使用事件时间。事件时间也可以是“逻辑时间”,意思是版本号、迭代号或任何东西。您只需要确保分配的时间戳和生成的水印一致地反映了这一点。
如果按事件时间设置窗口,则将获得该版本的所有数据,而不管一个操作符是否比其他操作符快,或者事件是否通过延迟不同的路径到达。这就是实时事件处理的美妙之处:-)

相关问题