如何初始化Flink广播状态



我们正在尝试构建一个用例,其中通过计算公式运行来自流的数据,但是公式本身也应该(很少)可以更新。通过阅读文档,在我看来,Flink广播状态对于这样的情况很自然。

作为一个实验,我构建了一个简化的版本:假设我有一个整数流,第二个流包含这些整数的乘法因子(我可以随意发送值)。第二个流的频率非常低,很容易在事件之间的几天或几周的时间内。目前,这些都用作简单的套接字服务器,最终产品将使用kafka。

在我的示例应用程序中,这一切都起作用,但是我遇到了一个问题:当系统启动并且在广播流上没有发生什么?在哪里可以从哪里获得默认因素(或最后使用的)因子?在我的示例中,我现在通过硬编码值来解决它,但这不是我可以使用的。

在我的实验项目中,我对此有些困惑,因为{processElement}只能获得一个仅读取的广播状态,但是直到有一个更新可能需要很长时间之前,processBroadcastElement才会被调用。我的计划是将使用的公式存储在数据库中,并以某种方式在作业(RE)启动时以某种方式阅读它,但我还没有找到使这项工作的方法。欢迎更多知识渊博的人提出的任何建议,这是我的第一个弗林克项目,所以我试图找到自己的出路。

工作示例在这里:https://github.com/tonvanbart/flink-broadcast-example/tree/mapstate-attemptFlink代码在BroadcastState中。

预先感谢。

如果系统正在从检查点/保存点重新启动,那么您的最后一个因素是广播(通过状态),对吗?所以我认为问题是最初启动时该怎么做。

如果是这样,那么这是您使用的模式的常见问题,您实际上想阻止整数流,直到您从广播流获得初始值。

现在,常见的解决方案是缓冲操作员(使用状态)中的整数流,直到您获得该初始值,但这可能会导致无限状态,具体取决于整数进度的速度,以及您必须多长时间等待。

您可以尝试的其他方法是包装整数源(使其成为代表),并且在您知道某事已广播之前,请不要发出任何价值。例如。将其广播到可查询状态,并进行定期检查,直到状态存在为止。

相关内容

  • 没有找到相关文章

最新更新