【问题标题】:Apache Flink Stream with feedback loop带有反馈循环的 Apache Flink Stream
【发布时间】:2018-10-27 04:46:11
【问题描述】:

如何在 Flink 流中实现反馈循环。换句话说,我怎样才能写一个 SinkFunction 也是 SourceFunction?

DataStream<Control> controlSignal = ..
DataStream<Data> dataStream = ...

DataStream<Output>  outputStream = controlSignal
.connect(dataSignal)
.flapMap(FlatMapFunction)

现在,我想将 outputStream 发送到接收器,并且还基于一些逻辑将数据发送到 ControlStream。

一种方法是让 ControlStream 从外部系统(如 Kafka)读取数据,我可以将输出流输出到 Kafka 主题,这样就可以完成这项工作。但是如果我只想从流的末尾反馈到流的开头,那么使用外部系统似乎很奇怪。

【问题讨论】:

    标签: apache-flink


    【解决方案1】:

    您需要使用iteration。迭代控制信号的一种常见方法是使用 side output 和来自函数的 Control 数据(在您的情况下,它必须是 CoProcessFunction),然后您可以使用它来关闭迭代。

    一个挑战通常是控制流想要被广播,而数据流被分割以进行并行处理。 Flink 1.5 支持连接键控和广播流,旧版本不支持。

    【讨论】:

    • 迭代确实有一个重大缺陷,那就是 Flink 不能为带有迭代器的作业提供处理保证,因为检查点机制不能保证正确捕获所有状态。有关详细信息,请参阅ci.apache.org/projects/flink/flink-docs-release-1.4/dev/stream/…
    • 使用侧面输出是一个很好的建议,我会使用它。我仍然不确定是否应该使用迭代或只是将带有控制数据的侧面输出发送到作为控制流源的 kakfa 主题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 2015-04-12
    • 2015-07-22
    • 2010-12-09
    相关资源
    最近更新 更多