我有这个数据管道: 流.地图(..(.keyBy((.addSink(...( 如果我有这个,当它到达接收器时,我是否保证每个键都保证由接收器操作中的单个任务管理器操作?
我在网上看到过很多例子,他们先做 keyBy,然后做一些窗口然后减少,但从不做 keyBy 的分区,然后在水槽上粘住。
Flink 不提供任何关于"由单个任务管理器操作"的保证。一个任务管理器可以有 1...n 个插槽,而你的 Flink 集群有 1..N 个任务管理器,你无法控制操作员子任务将使用哪个插槽。
我想你要问的是每条记录是否会写出一次——如果是这样,那么是的。
附带点 - 无需keyBy()
即可将记录分发给并行接收器运算符。如果map()
的并行度与接收器相同,则数据将在这两者之间流水线化(无网络重新分发(。如果并行度不同,则网络上将发生随机分区。