我可以在同一个 Flink 作业中使用 DataSet API 和 DataStream API 吗?

Posted

技术标签:

【中文标题】我可以在同一个 Flink 作业中使用 DataSet API 和 DataStream API 吗?【英文标题】:Can I use the DataSet API and the DataStream API in the same Flink job? 【发布时间】:2017-07-12 06:35:46 【问题描述】:

我正在使用 Flink 流从 Kafka 读取数据并处理数据。在应用程序启动时从 Kafka 消费之前,我需要使用 DataSet API 读取文件并根据某些标准对文件进行排序并从中创建一个列表。然后开始以流式方式从 Kafka 消费。我编写了一个逻辑来使用 DataSet API 从文件中读取和排序数据。但是当我尝试调整程序时,它永远不会执行,并且 Flink 立即开始从 Kafka 消费。有什么方法可以先处理数据集,然后在 Flink 中流式传输?

【问题讨论】:

【参考方案1】:

不,不能混合使用 DataSet 和 DataStream API。但是,您可以从相同的 main() 方法启动两个程序,但必须将 DataSet 程序的排序结果写入 DataStream 程序使用的文件中。

【讨论】:

@ F*** Hueske 我从同一个 main() 方法启动了两个程序,但是现在当我在 flink 仪表板中运行作业时,流式作业永远不会被触发,只有数据集程序被执行,然后 flink说工作完成了。为什么数据集节目后没有触发流媒体节目?你能指导我吗 @F*** 你能帮我解决这个问题吗? ***.com/questions/46282692/…【参考方案2】:

为您的 DataSet 操作创建另一个 Flink Job,并将结果发送到您的 Streaming Job 正在消费的 Kafka。

【讨论】:

以上是关于我可以在同一个 Flink 作业中使用 DataSet API 和 DataStream API 吗?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在流式 flink 作业中创建批处理 flink 作业?

Flink 1.13,面向流批一体的运行时与 DataStream API 优化

是否可以从 flink 作业中触发 spark 作业并从中获取数据?

在一个 flink 作业中使用 collect() 和 env.execute()

如何在 Flink 独立集群上的 Flink 作业中使用两个 Kerberos 密钥表(用于 Kafka 和 Hadoop HDFS)?

如何通过在 Apache Flink 中使用上传的 jar 来提交作业?