为什么并行度为1时执行Flink job是不好的?


0

在提交 job 之前,我需要考虑哪些重要的功能。

我的问题是并行数是多少,是否有一个上限(物理上)?并行性如何影响我的 job 绩效?

例如,我有一个CEP Flink job,它从unkeyed流中检测模式,除非我使用KeyBy运算符对数据流进行分区,否则并行性的数量总是1。

如果我错了请纠正我:

如果我对数据流进行分区,那么并行性的数量将等于不同 key的数量。但问题是模式匹配是为每个 key独立完成的,所以我不能定义一个模式,它需要来自具有不同 key的2个分区的信息。

1 答案


0

使用parallelism=1的Flink也不错。但它违背了使用Flink(能够缩放)的主要目的。

一般来说,您不应该拥有比 cores更高的并行性(物理或虚拟取决于用例),因为您希望尽可能多地饱和 cores。任何超过这一点的行为都会对您的性能产生负面影响,因为它需要更多的通信开销和上下文切换。通过向外扩展,您可以从网络中的分布式计算节点添加 core,这是使用大数据技术与手工编写应用程序相比的主要优势。

正如您所说,只有在对数据进行分区时才能使用并行性。如果你有一个需要所有数据的算法,你最终需要在一个 core上处理它。但是,通常在将数据 coalesce 到最后一个 core之前,可以并行地进行大量的预处理(过滤、 transformation)和部分聚合。例如,可以简单地计算所有事件。您可以对每个分区的数据进行计数,然后在最后一步中简单地将部分计数相加,这几乎可以完美地伸缩。

如果您的算法不允许将其拆分,那么您的用例可能不允许分布式处理。那样的话, Flink就不合适了。然而,值得探讨的是,替代算法(有时是近似算法)是否也足以满足您的用例。这是数据工程的艺术,把单片算法分成可并行的子算法。


我来回答

写文章

提问题

面试题