Flink中并行性和多个应用程序之间的区别

时间:2019-09-25 08:54:55

标签: apache-flink flink-streaming

我计划动态放大/缩小Flink应用程序。该应用程序使用kafka-flink连接器使用来自Kafka的事件。

由于应用程序的“热身”需要几分钟(缓存...),并且更改并行度级别涉及重启,因此我宁愿提交(按比例放大)或杀死(按比例缩小)任务,而不是更改并行度

我从性能,逻辑和执行计划中怀疑,这种方法与Flink内置的并行执行之间是否有任何区别?

换句话说,10个相同的Flink任务与并行度= 10(env.setParallelism(10))的一个任务之间有什么区别?

1 个答案:

答案 0 :(得分:1)

如果任务为 Redistributing or not

,并行性的数量将减少。
  • 一对一流(例如,在Source和map()之间) 上图中的运算符)保留分区和排序 的元素。这意味着map()运算符的子任务1 将会看到与它们产生的顺序相同的元素 源运算符的子任务1
  • 重新分配流(在map()和上面的keyBy / window之间,作为 以及在keyBy / window和Sink之间)更改 流。每个操作员子任务将数据发送到不同的目标 子任务,具体取决于所选的转换。例子是 keyBy()(通过散列键重新分区),broadcast()或 rebalance()(随机重新分区)。在重新分配 在元素之间交换顺序仅保留在内部 每对发送和接收子任务(例如,子任务1 map()和keyBy / window的subtask [2])。所以在这个例子中 每个键中的顺序都保留下来,但是并行性确实可以 引入关于聚合顺序的不确定性 不同键的结果到达接收器。