Hello, 这段时间我们针对 LuNing 反馈的问题进行了深入的分析调研,在此将结论同步给社区。特别感谢 LuNing 反馈这一问题并与我们一起进行分析排查。
根据我们的分析,造成 Flink 1.14 在 TPCDS 10G 数据集、2 节点集群规模的情况下,与 Trino 359 性能差距较大的原因主要包括以下 3 点: 1. 使用 SQL Client 提交 Flink 作业的耗时较长(单 query 约需要 4s)。在需要频繁提交作业的 OLAP 场景下,我们建议使用 Flink SQL Gateway 提交作业,避免重复创建 Client 进程、建立网络链接等额外开销。我们目前使用的是 Ververica 开源的 SQL Gateway [1],此外社区也正在准备推出官方的 SQL Gateway,详见 FLIP-91 [2]。 2. 测试使用的数据集比较小(10GiB),导致 Hive Source 根据数据量划分出的 Split 数也比较少。而 Split 是 Source 处理数据的最小单位,这就导致虽然看起来 Source 有 32 个并发,实际读取并处理数据的往往只有 1~2 个并发。此外,由于测试配置中关闭了 Hive Source 的自动推断并发度功能 [3],导致上下游的并发数相同并且被 chain 在一起,间接导致了下游算子实际处理数据的并发数也受到了影响。这一问题我们此前也发现过 [4],但没有像在 10GiB 这么小的数据集上影响这么大。 3. 目前对于部分 TPCDS 测试集的 Query,Flink SQL 生成的执行计划不是最优,导致 Flink 实际处理的数据量比 Trino 要大。这与我们在大规模数据集上的观察是一致的,目前社区 SQL 模块的小伙伴们也在继续对这些 case 进行优化。 总的来看,上述 3 点中,第 2 点对 Flink 性能的影响是最大的。我们针对这一问题做了一定优化。打了 patch 后,尽管实际读取并处理数据的 Hive Source 并发仍达不到配置的 32 并发,但与 Trino 的差距已大幅缩短,详见 [5]。 目前在 OLAP 场景下 Flink 与 Trino 确实还存在差距,社区目前也正在针对这一场景进行优化 [6]。我们目前在阿里内部的开发分支上,已经追平了 Trino 的性能,相关优化预计会在 Flink 1.16、1.17 两个版本中陆续贡献回社区。 Best, Zhilong Hong [1] https://github.com/ververica/flink-sql-gateway [2] https://cwiki.apache.org/confluence/display/FLINK/FLIP-91%3A+Support+SQL+Gateway [3] https://nightlies.apache.org/flink/flink-docs-master/docs/connectors/table/hive/hive_read_write/#source-parallelism-inference [4] https://issues.apache.org/jira/browse/FLINK-27338 [5] https://www.yuque.com/docs/share/b89479ab-9c24-45c8-9390-77299ae0c4cd?#AkK9 [6] https://issues.apache.org/jira/browse/FLINK-25318 On Tue, Apr 19, 2022 at 5:43 PM LuNing Wang <wang4lun...@gmail.com> wrote: > https://www.yuque.com/docs/share/8625d14b-d465-48a3-8dc1-0be32b138f34?#lUX6 > 《tpcds-各引擎耗时》 > 链接有效期至 2022-04-22 10:31:05 > > LuNing Wong <gfen...@gmail.com> 于2022年4月18日周一 09:44写道: > > > 补充,用的Hive 3.1.2 Hadoop 3.1.0做的数据源。 > > > > LuNing Wong <gfen...@gmail.com> 于2022年4月18日周一 09:42写道: > > > > > Flink版本是1.14.4, > Trino是359版本,tm.memory.process.size和CPU资源我都和Trino对齐了。都是32G > > > 16核 16线程,2台计算节点。 > > > > > > Zhilong Hong <zhlongh...@gmail.com> 于2022年4月15日周五 18:21写道: > > > > > >> Hello, Luning! > > >> > > >> > > >> > > > 我们目前也正在关注Flink在OLAP场景的性能表现,请问你测试的Flink和Trino版本分别是什么呢?另外我看到flink-sql-benchmark中所使用的集群配置和你的不太一样,可能需要根据集群资源对flink-conf.yaml中taskmanager.memory.process.size等资源配置进行调整。 > > >> > > >> Best, > > >> Zhilong > > >> > > >> On Fri, Apr 15, 2022 at 2:38 PM LuNing Wang <wang4lun...@gmail.com> > > >> wrote: > > >> > > >> > 跑了100个 TPC-DS SQL > > >> > 10 GB 数据、2个Worker(TM)、每个32G内存,16个核心。 > > >> > Flink平均用时 18秒 > > >> > Trino平均用时 7秒 > > >> > > > >> > 我看字节跳动和阿里的老师测试,Flink和presto > > >> OLAP性能接近,但是我测的差距很大。想进一步和老师交流下,是不是我Flink设置的有问题。 > > >> > 我基本上是按照下面这个项目里模板配置的Flink相关参数。 > > >> > https://github.com/ververica/flink-sql-benchmark > > >> > > > >> > > > >> > LuNing Wang <wang4lun...@gmail.com> 于2022年4月15日周五 14:34写道: > > >> > > > >> > > 跑了100个SQL > > >> > > > > >> > > > >> > > > > > >