开发者社区> 问答> 正文

Flink的并行度是什么

已解决

Flink的并行度是什么

展开
收起
提个问题 2024-05-28 13:11:17 15 0
1 条回答
写回答
取消 提交回答
  • 开发者社区问答官方账号
    官方回答
    • Flink 并发(Parallelism)介绍及作用
        Parallelism指的是并行度的意思。在 Flink 里面代表每个任务的并行度,适当的提高并行度可以大大提高 job 的执行效率,比如job是消费kafka数据过慢导致延迟增大,适当调大 Source 并发(源表并发不建议大于源表 partition 数)延迟即可正常了。

    • Flink 调整并发(Parallelism)优先级说明
      • SQL作业:(除特殊Connector:CDC 等受参数限制外),默认是按资源配置的并行度。
      • DataStream作业:代码的算子并行度设置优先级会高于VVP资源配置页面配置的并行度。

    • Flink如何合理的设置并行度
      • Source端并行度的配置:
        例如数据源端是Kafka这种消息队列,建议作业的并行度和 Kafka 的分区数一致;
        当下游没有 backpresure 反压的情况下,任务延迟大,那么可以增大并行度至Kafka的分区数,然后再观察Flink消费速度能否跟上数据生产速度;
        如果已经等于 Kafka 的分区数了,可以考虑扩大Kafka分区数或者增加fetch.max.bytes等 with 参数提升一次性拉取的数据量。
      • 中间 Operator 并行度的配置:
        数据从Source端流入后,通常会进行一定的数据转换、聚合才能够满足需求,在数据转换中可能会和第三方系统进行交互,在交互的过程中可能会因为网络原因或者第三方服务原因导致有一定的延迟,从而导致这个数据交互的算子处理数据的吞吐量会降低,可能会造成反压,从而会影响上游的算子的消费。那么在这种情况下这些与第三方系统有交互的算子得稍微提高并行度,防止出现这种反压问题。
        除了这种与第三方服务做交互的外,另外可能的性能瓶颈也会出现在这类算子中,比如 Kafka 过来的数据是JSON串的String,然后需要转换成对象,在大数据量的情况下这个转换也是比较耗费性能的。所以数据转换中间过程的算子也是非常重要,如果哪一步算子的并行度设置的不合理,可能就会造成各种各样的问题。
      • Sink 端并行度的配置:
        Sink端是数据流向下游的地方,可以根据Sink端的数据量进行评估,可能有的作业是Source端的数据量最大,然后数据量不断的变少,最后到Sink端的数据就一点点了,那么在最后的这个地方就可以将并行度设置的小一些。
        另外 Sink 端也是要与下游的服务进行交互,并行度还得根据下游的服务抗压能力来设置,如果在 Flink Sink 这端的数据量过大的话,然后在Sink处并行度也设置的很大,但是下游的服务完全撑不住这么大的并发写入,也是可能会造成下游服务直接被写挂的,下游服务可能还要对外提供一些其他的服务,如果稳定性不能保证的话,会造成很大的影响,所以最终还是要在 Sink 处的并行度做一定的权衡。
      • Operator Chain:
        对于一般的作业(无特殊耗性能处理),尽量让算子的并行度从Source端到Sink端都保持一致,这样可以尽可能的让Job中的算子进行Chain在一起,形成链,数据在链中可以直接传输,而不需要再次进行序列化与反序列化,这样带来的性能消耗就会得到降低。
    2024-05-28 13:11:18
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Flink CDC Meetup PPT - 龚中强 立即下载
Flink CDC Meetup PPT - 王赫 立即下载
Flink CDC Meetup PPT - 覃立辉 立即下载