我在一个关系数据库中有一些批处理的数据,我想使用Flink将它们推送到消息总线上。由于Flink同时支持批处理和流模式,因此它看起来非常适合。话虽如此,我不知道这项任务是属于StreamingJob还是BatchJob,以及如何将两者联系起来。此任务是否更适合FlinkSQL环境?
这个是可能的吗?我需要注意什么?
发布于 2021-04-28 20:38:05
这真的取决于你实际想要做什么,数据的大小等等。如果您只想从数据库中读取数据并将其写入Kafka,那么您可能会想看看flink,因为它已经实现了here的源代码。
从技术上讲,您可以使用JDBC,但是它没有DataStream源代码AFAIK,所以它会更难,因为您需要自己实现它。
通常,Flink有两个主要的API来处理数据,DataSet和DataStream,您不能在它们之间进行转换。DataSet或多或少就是Spark中的DataSet,所以基本上Flink知道这是有界的、分区的数据,所以你可以排序或进行其他转换,利用数据有一定大小的事实。
DataStream是一个流式应用编程接口,它通常允许你处理技术上无限的数据流,你可以使用DataStream来创建有限的数据流,例如从文件读取。但是,通常在使用DataStream处理数据时,即使流中保存的数据是有限的,您也不能直接对其进行排序,或者做一些在处理DataSet时可能能够做的事情。
因此,对于范式之间的数据移动,您可以编写处理DataStream的应用程序,您将能够处理来自Kafka的无限事件流和来自CSV文件的10条记录,Flink将能够根据数据是否有限进行一些优化(在1.12IIRC中引入)。但是,如果不做一些额外的工作,例如将数据存储在文件中并将其作为DataStream再次读取,您将无法将文件读入DataSet排序分区,然后将其映射到DataStream。
https://stackoverflow.com/questions/67298921
复制相似问题