为满足前端业务决策分钟级需求响应,顺丰科技建立了实时数据湖,实现了整个数据体系的巨大提升。我们采访了顺丰科技大数据架构负责人林国强,请他就云原生实时数据湖实践进行了分享。本文为采访整理文~
InfoQ:顺丰科技科技为什么要建立实时数据湖?云原生实时数据湖有哪些优势?
林国强:顺丰科技以前的数仓,是基于 Hive/Spark 架构,指标时效是 T+1 天,而前端的业务决策和业务运营给科技侧提出了更高的需求,希望指标时效能够做到分钟级,这是顺丰要建立实时数据湖的缘由。实时数据湖的优势非常简单,就是快,能够大大提高整个数仓体系的指标时效,为后续的业务提供更快的支撑。
InfoQ:顺丰科技科技实时数据湖是基于哪项数据湖框架开发的?
林国强:顺丰科技主要基于 Hudi 体系构建实时数据湖,同时修改了开源 Hudi 的一些内核,比如全增量混合状态的并行读,Parquet 块级别索引,读写的性能优化等。同时也修复了很多社区的 bug,让它能在大规模生产环境运行。
InfoQ:实时数据湖规模化落地过程中,遇到了哪些挑战?面对这些挑战,顺丰科技科技的解决方案是什么?
林国强:实时数据湖落地过程中,一个是技术层面的挑战,一个是业务层面挑战;
就技术方面而言,首先是写入性的问题。目前 Hudi 开源最新的版本乐观锁的优化,并没有解决读时混合状态的并发问题。比如,有一张 TestA 表,Hudi 先会读取此表的全量,再读此表的增量,如果这时候有一张 TestB 表进来,那么 Hudi 会先读 B 表的全量,然后才会去处理 TessA 表的增量。也就是说,即便这个时候 Test A 的增量在处理中了,它也会停下来先去读 TestB 表的全量,然后再去处理这个增量。Hudi 需要所有的表状态都到增量这个环节,它才会去做增量的同步。这对于多端混合状态的并发影响比较大。
其次是,Hudi 并没有搞定 Parquet 文件“块级别”的索引,我们使用 Hfile 去做。这样做的优势是,你在写的时候,可以直接定位到指定块进行更新,大家不需要对整个 Parquet 文件涉及到的块进行更新,这个时候,你的 I/O 的提高至少 10 倍以上;另外是 Hudi 本身对 Parquet 序列化与反序列化的问题。Hudi 会把某行所有列都序列化出来,然后再更新到对应的列之后,它全部都会反序回去。但实际上,我们可能只更新某行或者某列。我们做了一个优化,可以针对特定列进行更新,节省了许多 CPU 的计算性能。
最后,我们自研了 SQL 引擎,引擎针对 Hudi 进行了一些下推与优化,包括做了很多一些逻辑减值的优化。相较开源版本而言,读性能提升 3~5 倍。
就业务的挑战层面,主要是从传统数仓到实时数据湖迁移涉及的业务方较多,涉及的改造点集中在数据接入,这部分是需要找到愿意配合的业务方,逐步改造,形成示范效应后,再进行全面推广。Hudi 数据集成环节需要进行很多改造,比如,我们需要将原来 Insert overwrite 的语法,修改成 Merge into 语法,最后,我们从市场线开始合作,因为他们对于市场指标支撑的时效性要求比较高,最终完成了整个改造。
InfoQ:通过数据湖来构建实时数仓,大致分为了哪几个过程?
林国强:第一个阶段,顺丰最开始做数仓的时候,并非是用 Hudi 这种方式去做,我们使用用 Flink+Spark 这种架构去做数据仓库。本质上讲,实时计算方面,我们仍然在使用 Flink,离线方面还是在用 Spark,只是我们在工具层开发了批流合一工具。这些工具可以使得我们使用统一的分析入口,既同时做实时,又同时做离线,整个方案相当于是工具层统一,引擎层仍然是混合结构,这种方式有两个较大的问题。
一方面是指标一致性问题,顺丰每天约有 200TB 数据,通过实时和离线链路出来的指标,总会有一些细微的差别,哪一条链路的数据值得信赖是个较大的问题;另外一方面是计算资源的消耗问题,我们需要重复计算相关指标,算力消耗非常大。
第二个过程,我们研究了整个行业大数据架构的发展,发现实时数仓、实时数据湖是一个比较好的方式。从业务角度来看,并非所有的指标都需要毫秒级别,99%的指标可能需要 10 分钟以内,可能只有 1%的指标需要达到毫秒级,针对这部分需求,我们引入了实时数仓的技术,从对于指标时效性要求比较高的业务线来进行合作。将所有生产线的实时与离线指标放到了 Hudi 体系,这样做之后,指标完全一致,能耗也降了下来,并且整个的分析性能比原来还要快一倍,时效性也可以满足市场线进行商业驱动的需求。
第三阶段,除了将之使用在市场线之外,我们会在运营线、人机线、财务线等都进行复制。我们希望未来整个集团的绝大部分指标,都能够放到实时数据湖体系里面。
InfoQ:顺丰科技云原生实时数据湖发展的未来规划有哪些?
林国强:主要是会从存算分离、实时数仓、湖仓一体三个方向进行深化。存算分离,是为了解决资源弹性伸缩问题,这个也是传统大数据遗留的问题,通过它可以实现大数据成本优化,按需伸缩;实时数仓,主要是提高数据从接入到应用的整体时效,希望未来能够达到 10 秒以内,这样,很多场景,很多架构会形成统一,不需要那么多异构集群;湖仓一体,主要是希望实时数据湖,未来在查询响应速度和并发能力这两部分能跟上现在的传统数仓,同时,在数据管理能力也能提上来,这样,一个湖就能覆盖一个企业的所有跟数据有关的场景,这是一个美好的未来。
InfoQ:顺丰科技是否输出此项技术对外服务,以什么方式输出?
林国强:顺丰科技目前是有做大数据 ToB 市场的,我们是以私有化产品和公有云 PaaS 两种方式提供云原生实时数据湖能力,同时提供一些企业构建实时数据湖所需要的咨询和架构设计服务。
嘉宾介绍:
林国强,顺丰科技科技大数据架构负责人,曾任职深信服及新华三大数据总监,中国最早一批大数据和人工智能玩家,拥有超过 10 项大数据发明专利,负责过 10 亿级超大规模大数据项目,全国实施超过 10000 个大数据节点,承载和分析超过 1000PB 以上数据。在云原生实时数据湖方面有深入研究和落地实践,致力于简单、易用、高效的大数据基础设施技术,推动大数据赋能全球产业数字化底盘。
活动推荐:
ArchSummit全球架构师峰会(北京站)即将在 8 月 18-19 日落地,我们设置了【云数据库架构设计】【微服务治理之基础架构】【微服务治理之业务架构】【数据库与存储技术】等专题,点击蓝色超链,可查看具体议题。
评论