【问题标题】:Differences between parallelism and multiple apps in FlinkFlink 中并行与多应用的区别
【发布时间】:2019-09-25 19:32:33
【问题描述】:

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

由于应用程序的“预热”需要几分钟(缓存...)并且更改并行度级别涉及重新启动,因此我更喜欢提交(放大)或终止(缩小)任务,而不是更改并行度级别.

不知道从性能、逻辑和执行计划来看,这种方式和 Flink 内置的并行执行有什么区别吗?

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

【问题讨论】:

    标签: apache-flink flink-streaming


    【解决方案1】:

    如果任务是Redistributing or not

    ,并行数会受到影响
    • 一对一的流(例如在 Source 和 map() 之间) 上图中的运算符)保留分区和排序 的元素。这意味着 map() 运算符的 subtask1 将以相同的顺序看到相同的元素,因为它们是由 Source 运算符的 subtask1
    • 重新分配流(如上面的 map() 和 keyBy/window 之间,如 以及 keyBy/window 和 Sink 之间)改变分区 流。每个算子子任务将数据发送到不同的目标 子任务,具体取决于所选的转换。例子是 keyBy()(通过散列密钥重新分区)、broadcast() 或 rebalance() (随机重新分区)。在重新分配 交换元素之间的顺序仅保留在 每对发送和接收子任务(例如,subtask1 map() 和 keyBy/window 的 subtask[2] 的。所以在这个例子中, 每个键中的顺序被保留,但并行性确实 引入关于聚合顺序的不确定性 不同键的结果到达接收器。

    【讨论】:

      猜你喜欢
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多