【问题标题】:How to organize a complex Apache Flink app如何组织一个复杂的 Apache Flink 应用程序
【发布时间】:2019-04-30 15:17:21
【问题描述】:

我正在为我的用例评估 Apache Flink。 我的问题是关于如何组织“复杂”流的代码。

用例是一个物联网流程。传感器产生事件 - 这是我的流的输入。我的流应用程序输出警报。 我的流的第一步是处理这些数据的一些聚合特征(窗口平均值、最小值、最大值等)。我的流的第二步是对输入数据和聚合数据运行一些“决策”过程。第二步由 2 个并行进程组成:

  • 第一个是一组用户定义的规则(例如:如果温度传感器平均值 >50°,但最近一个低于 30°,则生成警报)
  • 二是运行一些机器学习模型

我想做什么的图表:

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

我应该如何组织我的 Flink 应用程序?

我想到了 3 种方法:

1) 将我所有的代码放在一个项目中

优点:

  • 这会将所有代码放在同一个位置,无需切换到数十个应用程序即可了解其工作原理和作用
  • 我不需要将中间结果存储在任何其他主题中 - 我可以直接使用它们。
  • 易于部署

缺点:

  • 应用程序的主文件很快就会变得一团糟(会吗?)。
  • 每次更新某些内容(新规则、新聚合等)时,我都必须重新部署所有内容

2) 将扩充部分放在一个项目中,将所有用户定义的规则放在另一个项目中,将机器学习部分放在另一个项目中

优点:

  • 做同样事情的代码在同一个地方
  • 看起来很容易部署。只需部署 3 个应用程序

缺点:

  • 我必须使用代理,以便生产者和消费者可以通信(聚合被写入主题,然后用户规则读取它们以使用它们),我必须加入流

3) 每个要处理的聚合都是一个项目,每个规则都是一个项目,每个 ML 模型都是一个项目

优点:

  • 轻松更新。可以很好地与团队一起扩展。
  • 新人写东西而不破坏一切的简单方法
  • 似乎可以很好地扩展 - 耗时的用户定义规则不会影响其他人

缺点:

  • 跟踪部署的内容及其版本一团糟
  • 我必须使用代理,以便生产者和消费者可以通信(聚合被写入主题,然后用户规则读取它们以使用它们),我必须加入流
  • 大量冗余代码/可能需要创建库
  • 如果我获得成百上千的聚合和规则,部署可能会变得一团糟

我很怀念 Flink 和 Streaming 的体验,不知道什么是最适合我的用例的方式。我正在考虑从第二种解决方案开始,这似乎是最好的折衷方案。

【问题讨论】:

    标签: apache-flink


    【解决方案1】:

    您可能要考虑的一种方法是流入一些缓慢变化的组件,而不是编译它们。例如,用户规则,甚至是聚合定义和机器学习模型。这将增加实现的复杂性,但允许更改而无需重新部署。

    RBEA from KingING's work on streaming ML models 是这种模式的早期示例。有了广播状态,现在可以更轻松地使用 Flink 构建这种动态规则引擎。

    【讨论】:

    猜你喜欢
    • 2011-10-20
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 2012-03-12
    • 2011-05-19
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多