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
> > >> > >
> > >> >
> > >>
> > >
> >
>

回复