如何初始化Flink广播状态?

问题描述 投票:0回答:1

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

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

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

在我的实验项目中,我有点难过,因为{processElement}只获得只读广播状态,但是在更新可能需要很长时间后才会调用processBroadcastElement。我的计划是存储数据库中使用的公式,并在工作(重新)开始时以某种方式读取它但我还没有找到使这项工作的方法。欢迎来自更多知识渊博的人的任何建议,这是我的第一个Flink项目,所以我试图找到自己的方式。

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

提前致谢。

apache-flink broadcast flink-streaming
1个回答
0
投票

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

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

现在常见的解决方案是在运算符中缓冲整数流(使用状态),直到获得初始值,但这可能会导致无限状态,具体取决于整数的进入速度以及需要等待的时间。

您可以尝试的其他任务是包装整数源(使其成为委托),并且在您知道某些内容已被广播之前不会发出任何值。例如。使广播成为可查询状态,并定期检查直到状态存在。

© www.soinside.com 2019 - 2024. All rights reserved.