检查点和有界流
Flink 的检查点机制最初只能在应用程序 DAG 中的所有任务都在运行时创建检查点。这意味着同时使用有界和无界数据源的应用程序实际上是不可能的。此外,当某些任务完成时,以流方式(而不是以批处理方式)执行的有界输入上的应用程序在处理结束时停止检查点。如果没有检查点,则不会提交最新的输出数据,从而导致恰好一次接收器的数据挥之不去。
对于很多小槽来说,专用TaskManagers的开销非常高(JVM开销,Flink控制数据结构)。时隙共享通过在所有运算符类型之间共享时隙来隐式地解决这个问题,这意味着在轻量级运算符(需要小时隙)和重量级运算符(需要大时隙)之间共享资源。然而,这仅在所有操作符共享相同的并行性时才有效,这并非最佳。此外,某些算子在单独运行时效果更好(例如需要专用 GPU 资源的 ML 训练算子)。