我正在评估Apache Flink的用例。 我的问题是关于如何组织“复杂”流的代码。
用例是一个物联网过程。传感器产生事件-这是我的信息流的输入。我的流应用程序输出警报。 我的流的第一步是处理这些数据上的一些聚合特征(整个窗口的平均值,最小,最大等)。我的数据流的第二步是对输入数据和聚合数据运行一些“决策”过程。第二步由2个并行过程组成:
我想做什么的图形:
+-----------------+
+----------------+ | User rules |------> Alerts
| |-------->| (multiple) |
| Aggregates | +-----------------+
Sensors ------->| |
| (multiple) | +-----------------+
| |-------->| ML rules |-------> Alerts
+----------------+ | (multiple) |
+-----------------+
我应该如何组织Flink应用程序?
我想到3种方法:
1)将我所有的代码放在一个项目中
优点:
缺点:
2)将扩充部分放在一个项目中,将所有用户定义的规则放在另一个项目中,将机器学习部分放在另一个项目中
优点:
缺点:
3)要处理的每个集合都是一个项目,每个规则都是一个项目,每个ML模型都是一个项目
优点:
缺点:
我错过了Flink和一般流媒体方面的经验,以了解哪种方法最适合我的用例。我正在考虑从第二个解决方案开始,这似乎是最好的折衷方案。
答案 0 :(得分:1)
您可能要考虑的一种方法是流式传输一些缓慢变化的组件,而不是将它们编译进去。例如,用户规则,甚至是聚合定义和机器学习模型。这将增加实施的复杂性,但无需重新部署即可进行更改。
RBEA from King和ING's work on streaming ML models是这种模式的早期示例。通过广播状态,现在可以使用Flink轻松构建这种动态规则引擎。