为什么 flink 批处理作业将 print(), count() 作为单个作业

why flink batch job make print(), count() as single job

我正在编写一个 flink 批处理作业,并向我的 DateSet<> 添加了许多 print() 以进行调试。然后使用作业管理器是k8s job的作业集群模式将作业部署在k8s中,并在第一次打印完成时停止。

最后我在本地环境中打开了一个ExecutionEnvironment.createLocalEnvironmentWithWebUI(config),我发现flink用不同的作业id一个一个地执行作业,这些作业是我完整作业的子作业。

如果是的话,flink为什么要设计这个机制呢?我需要删除生产环境中的所有 print() 函数吗?

根据 DataSet.print documentation:

This method immediately triggers the program execution, similar to the collect() and count() methods

所以不,您不能在整个工作流程中散布 print() 语句。您可以创建一个 FilterFunction (a) 从不过滤任何内容,并且 (b) 使用日志记录语句来记录传递给它的数据。请注意,您需要注意不要处理太多数据,否则您可能会用日志输出填满节点的磁盘。