在 Flink 应用程序中访问 FlatMapFunction 内部的数据库是否可以?

Is it ok to Access database inside FlatMapFunction in a Flink App?

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

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

我可以使用 DataStream 和 DataSet 执行 merge/reduce(或其他操作)来完成吗?

我可以使用 DataSet 而不是直接访问数据库来提高性能吗?

使用 Flink 的 DataStream 可以采用多种方法来完成这种丰富 API。

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

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

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