Apache Flink:在运行时从外部更改状态参数

Posted

技术标签:

【中文标题】Apache Flink:在运行时从外部更改状态参数【英文标题】:Apache Flink: changing state parameters at runtime from outside 【发布时间】:2016-07-21 13:25:03 【问题描述】:

我目前正在开发流式 ML 管道,并且只需要一次事件处理。我对 Flink 很感兴趣,但我想知道是否有任何方法可以从外部更改/更新执行状态。

ml 算法状态由 Flink 保存,这没关系,但考虑到我想在运行时更改一些执行参数,我找不到可行的解决方案。基本上,一个外部 webapp(在 GO 中)用于调整参数,变化应该反映在 Flink 中以供后续事件使用。

我想过:

与 pub/sub 共享的 Redis(因为轮询每个事件会降低吞吐量) 在 Go 中编写自定义解决方案:D ...

状态将通过密钥保存,与来自 Kafka 的多个事件流之一的源相关。

谢谢

【问题讨论】:

【参考方案1】:

您可以使用CoMapFunction/CoFlatMapFunction 来实现您所描述的。其中一个输入是正常数据输入,而在另一个输入上您会收到状态更改命令。这可能是通过专门的 Kafka 主题最容易获取的。

【讨论】:

看起来很有希望,我正在考虑向 Flink 发送“控制事件”,但由于我在互联网上没有找到任何东西,所以我认为我可能只是在滥用一些不符合目的的东西。 ..我的意思是也许 Flink(和朋友)不是这个应用程序的最佳选择?我的情况有那么不寻常吗? 我认为 co 函数正是为这类用例而设计的,在这些用例中,您有多个输入流但仍希望访问元素到达的相同状态。 谢谢 Till,我会试试看的!

以上是关于Apache Flink:在运行时从外部更改状态参数的主要内容,如果未能解决你的问题,请参考以下文章

初识Apache Flink - 数据流上的有状态计算

Apache Flink系列-④有状态函数

Flink:如何在 flink 中处理外部应用配置更改

Apache Flink - 外部 Jar

从 Apache Flink 查询数据

在复选框状态更改时从回收器视图适配器更新 sqlite 数据库