在 Flink 的范式之间移动数据

Moving data between paradigms in Flink

我在关系数据库中有一些批处理数据,我想使用 Flink 将其推送到消息总线。由于 Flink 同时支持 Batch 和 Streaming 范式,因此它似乎非常适合。话虽如此,我无法判断此任务属于 StreamingJob 还是属于 BatchJob 以及如何连接两者。这个任务是否更适合 FlinkSQL 环境?

这可能吗?我需要注意什么?

这真的取决于你实际想做什么,数据的大小等等。如果您只想从数据库中读取数据并将其写入 Kafka,您可能想看看 flink here,因为它已经实现了 JDBC 的源代码。

从技术上讲,您可以使用 DataStream API,但它没有 JDBC 源 AFAIK,因此会更难,因为您需要自己实现它。

一般来说,Flink处理数据的主要有两个API,DataSetDataStream,不能相互转换。 DataSet 或多或少是 Spark 中的 DataSet ,所以基本上 Flink 知道这是有界的、分区的数据,所以你可以对它进行排序或进行其他利用数据这一事实的转换有一些定义的大小。

DataStream 是一个 Streaming API,它通常允许您处理技术上无限的数据流,您可以使用 DataStream 创建有限流,例如从文件。但是,通常在使用 DataStream 处理数据时,您将无法直接对其进行排序或做一些您在处理 DataSet 时可能可以做的事情,即使流中保存的数据是有限的.

因此,对于在范式之间移动数据,您可以编写处理 DataStream 的应用程序,您将能够处理来自 Kafka 的无限事件流和来自 CSV 文件的 10 条记录, Flink 将能够根据数据是否有限(在 1.12 IIRC 中引入)进行一些优化。但是您将无法将文件读入 DataSet 排序分区,然后将其映射到 DataStream,而不做一些额外的工作,例如将数据存储在文件中并再次读取为 DataStream .