如何组织一个复杂的apache flink应用程序

xam8gpfp  于 2021-06-21  发布在  Flink
关注(0)|答案(1)|浏览(432)

我正在评估apache flink的用例。我的问题是如何组织“复杂”流的代码。
用例是一个物联网过程。传感器产生事件-这是我的流的输入。我的流应用程序输出警报。我的流的第一步是处理这些数据上的一些聚合特性(窗口上的平均值、最小值、最大值等)。我的流的第二步是对输入数据和聚合数据运行一些“决策”过程。第二步由两个并行过程组成:
第一个是一组用户定义的规则(例如:如果温度传感器的平均值>50°, 但最新的是30岁以下°, 然后生成警报)
第二个是运行一些机器学习模型
我想做什么的图表:

+-----------------+               
                  +----------------+         |   User rules    |------>  Alerts
                  |                |-------->|   (multiple)    |               
                  |   Aggregates   |         +-----------------+               
  Sensors ------->|                |                                           
                  |   (multiple)   |         +-----------------+               
                  |                |-------->|    ML rules     |-------> Alerts
                  +----------------+         |   (multiple)    |               
                                             +-----------------+

我应该如何组织我的flink应用程序?
我想到了三种方法:
1) 把我所有的代码放在一个项目中
赞成的意见:
这将把所有的代码放在同一个地方,不需要切换到几十个应用程序来了解它的工作原理和作用
我不需要在任何其他主题中存储中间结果—我可以直接使用它们。
易于部署
欺骗:
应用程序的主文件可能会很快变得一团糟(会吗?)。
每次我更新一些东西(新规则、新聚合等)时,我都必须重新部署所有内容
2) 将扩展部分放在一个项目中,将所有用户定义的规则放在另一个项目中,将机器学习部分放在另一个项目中
赞成的意见:
做同样事情的代码在同一个地方
看起来很容易部署。只需部署3个应用程序
欺骗:
我必须使用一个代理,这样生产者和消费者才能进行交流(聚合被写入一个主题,然后用户规则去读取它们来使用它们),我还必须加入流
3) 要处理的每个聚合都是一个项目,每个规则都是一个项目,每个ml模型都是一个项目
赞成的意见:
轻松更新。能很好地适应团队。
新来者写东西而不是破坏一切的简单方法
似乎它可以很好地扩展-耗时的用户定义规则不会影响其他规则
欺骗:
一团混乱,无法跟踪部署的内容及其版本
我必须使用一个代理,这样生产者和消费者才能进行交流(聚合被写入一个主题,然后用户规则去读取它们来使用它们),我还必须加入流
大量冗余代码/可能需要创建库
如果我使用成百上千的聚合和规则,部署可能会变得一团糟
我错过了flink和流媒体的经验,想知道什么是最适合我的用例的方式。我正在考虑从第二个解决方案开始,这似乎是最好的妥协。

nhaq1z21

nhaq1z211#

您可能需要考虑的一种方法是将一些缓慢变化的组件流化,而不是编译它们。例如,用户规则,甚至是集合定义和机器学习模型。这将增加实现的复杂性,但允许在不必重新部署的情况下进行更改。
king和ing在流媒体ml模型上的工作中的rbea就是这种模式的早期例子。有了广播状态,用flink构建这种动态规则引擎就更容易了。

相关问题