【问题标题】:what is the difference between parallelism and parallel computing in Flink?Flink 中的并行和并行计算有什么区别?
【发布时间】:2020-07-23 03:17:42
【问题描述】:

我对在 Flink 中可以并行工作的任务数量感到困惑,

谁能给我解释一下:

  • 分布式系统中的并行数是多少?及其与 Flink 术语的关系
  • 在 Flink 中,是不是和我们说的 2 个并行 = 2 个任务并行工作一样?
  • 在 Flink 中,如果 2 个算子分别工作,但每个算子的并行数为 1,这算不算并行计算?
  • 在 KeyedStream 中,最大并行数是键数是真的吗?
  • Flink 中的 Current CEP 引擎是否能够处理多个任务?

谢谢。

【问题讨论】:

    标签: parallel-processing apache-flink flink-streaming flink-cep


    【解决方案1】:

    Flink 以非常标准的方式使用术语并行——它指的是在多个处理器上同时运行相同计算的多个副本,但数据不同。当我们谈到 Flink 的并行性时,它可以应用于具有并行实例的算子,也可以应用于管道或作业(由多个算子组成)。

    在 Flink 中,多个算子可以单独和同时工作。例如,在这个工作中

    source ---> map ---> sink
    

    源、映射和接收器都可以在单独的处理器中同时运行,但我们不会将其称为并行计算。 (分布式,是的。)

    在典型的 Flink 部署中,任务槽的数量等于作业的并行度,每个槽都在执行应用程序的一个完整的并行切片。算子链的每个并行实例将对应一个任务。因此,在上面的简单示例中,源、映射和接收器都可以链接在一起并在单个任务中运行。如果您以两个并行度部署此作业,那么将有两个任务。但是您可以禁用链接,并在其自己的任务中运行每个运算符,在这种情况下,您将使用六个任务以两个并行度来运行该作业。

    是的,对于 KeyedStream,不同键的数量是并行度的上限。

    如果 CEP 在 KeyedStream 上运行,它可以并行运行(在这种情况下,模式匹配是为每个键独立完成的)。

    【讨论】:

    • 感谢您的回答,我在理解并行性对我的应用程序的影响方面存在问题。我目前正在 Flink 之上实现一个模式匹配引擎,它需要 N 个输入流和 M 个输出流。所有算子都是 n-artery,这意味着有机会对超过 2 个 Streams 应用操作。我可以联合流然后应用状态操作,所以我必须有可能的解决方案:1)创建虚拟键来对流进行分组并匹配每个流上的模式。 2) 创建一个统一的流,将所有数据收集到一个任务中。
    • 我认为问题归结为:您能否对总数据流进行有意义的分区,还是许多模式需要查看所有 N 个输入中的每个事件?
    • 没错,假设:用户定义了来源、模式(复杂或简单)。并且引擎发出匹配模式。如果一个模式需要 4 个输入流,我需要以某种方式将 4 个流收集到一个地方以检测模式,那么最佳方法是什么?当我可以为所有 4 个流共享内存并同时可以并行计算事物时,是否有解决方案?据我所知,唯一可能的解决方案是将所有 4 个流合并并创建一个虚拟密钥以使用 KeyedState,但这在并行性和扩展方面会产生什么影响?
    • 联合是将输入流组合在一起的明显方式。对于并行进行模式匹配,您可以通过 patternId 对联合流进行键控,这将让您扩大模式匹配。
    猜你喜欢
    • 2017-04-25
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    相关资源
    最近更新 更多