可以在 Flink 应用程序中访问 FlatMapFunction 中的数据库吗?



我正在使用一个kafka主题作为数据流,并使用FlatMapFunction来处理数据。处理包括使用更多数据来丰富来自流的实例,这些数据从数据库中获取,在其他数据库中执行查询以收集输出,但它认为这不是最佳方法。

阅读文档,我知道我可以从数据库查询创建数据集,但我只看到了批处理的示例。

我可以对数据流和数据集执行合并/减少(或其他操作)来实现这一点吗?

使用数据集而不是直接访问数据库是否可以获得任何性能改进?

可以使用 Flink 的 DataStream API 实现这种扩充。

(1)如果你只想一次性获取所有数据,你可以使用一个有状态的RichFlatmapFunction,它在其open()方法中执行查询。

(2)如果你想对每个流元素进行查询,那么你可以在FlatmapFunction中同步执行,或者查看AsyncIO以获得更高性能的方法。

(3) 为了获得最佳性能,同时从外部数据库获取最新值,请查看数据库更改流中的流式处理,并使用 CoProcessFunction 执行流式连接。像 http://debezium.io/这样的东西在这里可能很有用。

最新更新