与Shopee实时计算负责人聊聊湖仓一体
本文为“高可用架构”对 Shopee 实时计算负责人 Lin 的采访,在即将举办的 GIAC 大会中,Lin 将进一步分享基于 Hudi 的湖仓一体技术在 Shopee 的实践。
Q1:老师您好,很高兴能采访到您,请简单介绍一下自己。
Lin:我 2012 参加工作,一直在进行大数据平台和引擎相关的开发工作。曾经参与离线任务调度系统和数据 Ingestion 系统的建设,目前主要从事基于 Flink 的实时计算平台的建设工作。在这个过程中,见证了 Hadoop 三件套在企业数据平台领域的强势崛起,经历了流式数据处理从小范围试用到企业数据处理的核心范式的风雨历程。对于流批一体融合,并结合湖仓一体技术对企业数据处理的再一次革新有非常大兴趣。
Q2:能否分别简单介绍一下数据湖和数据仓库,以及它们对应的技术栈?
传统的数据仓库技术栈面向 SQL 的结构化数据,所以它的实现更多是以传统的数据库为核心,或者是以 Hive 为核心来构建。
而数据湖的技术栈则在传统数仓技术栈的基础上,扩展了流式处理、ACID 的支持和时间语义等,它使得数据处理与业务本身更加贴近。
Q3:湖仓一体是数据湖和数据仓库的整合方案吗?请简单介绍一下湖仓一体要解决的行业痛点以及可能的技术方案。
Lin:湖仓一体技术不应该简单地理解成数据湖和数据仓库的简单整合,它是两者在数据管理和应用上的深度融合。
传统的数据仓库面向的数据时效性不足、储存浪费大、不具备 ACID 语义等所导致的数据表现能力离业务需求远的问题,都可以在数据湖技术上得到解决。而传统的数仓技术在面对高度结构化、相对静态的数据集的处理上,在传统的数据管理上的能力,我们都可以很好地复用,并推广到数据湖。
基于数据湖技术,结合消息流和批数据集来构建流批统一的数据仓库,同时满足不同时效性的数据处理需求。我们也可以使用数据湖的增量处理语义来减少传统数据仓库的存储开销。
Q4:大数据技术发展了十多年,能否结合您在 Shopee 的经验,谈一谈大数据给行业带来了哪些价值和变化?
Lin:首先,它让企业数据处理的时效性得到了极大的发展,它让业务同事能够更加及时地通过数据了解业务。例如报表,在流式处理相关技术没有出现之前,数据的时效性最好在小时级别,当数据量太大时,甚至连小时级别也不能满足。在流式处理、数据湖这些技术出现后,数据的时效性可以做到秒级。
数据的处理使用方式也变得更加多样化。传统基于数据库的数仓,更多是基于报表,而大数据技术的出现,使得数据可以应用到机器学习和复杂事件处理等领域。
Q5:大数据领域的技术发展很快,包含了 Hadoop、Storm、Spark、ELK、数据仓库、Flink、数据湖、湖仓一体等等各种技术栈,不同规模的公司应该怎么样做好技术选型?又该如何保障技术更迭?
Lin:我认为一个公司的技术选型可以参考公司的需求与业务规模进行。
在实时场景下,Kafka 与 Flink 结合可以满足毫秒级低延迟的业务需求,此时 Storm 的更新迭代不活跃,所以不在选择之列。
当公司的业务场景出现实时流与离线流复用时,可以引入数据湖相关的技术实现两者的统一。去年,Shopee 开始进行流批一体的业务数据仓库建设,所以我们选择 Hudi 作为数据湖的组件,实现实时数据集成,满足业务需求。
技术是为业务需求服务的,技术的更迭也是以业务需求的发展为前提渐进式进行。比较好的保障技术更迭的方式是:选择满足业务需求的先进成熟技术,进行迭代式发展。我们之所以选择 Hudi 作为数据湖组件,就是因为它事务、索引和流批一体的存储能满足我们的业务在数据存储性能、查询时效性上和流批一体的需求。而在技术更迭的过程中,我们也是根据业务需求逐步落地。
Q6:大数据发展过程中细分出很多的方向,作为新人,想要进入大数据行业有一定的门槛。能否结合您的亲身经验,介绍一下想要进入大数据领域的人需要掌握哪些知识?
Lin:作为新人想要进入大数据领域,首先需要有良好的计算机基础理论知识,例如掌握 Java、Scala、SQL、网络和数据库等;其次需要掌握工作需要的基础组件的应用实践知识,例如 Spark、Flink 任务开发、Kafka 与 HDFS 的应用。做好以上这两点就可以满足基本的大数据应用开发工作。
最后,可以根据自己掌握的基础理论知识,类比到同类性的组件上,分析同类型组件上的差异,做到触类旁通的效果。我们将 Flink 的数据一致性实现与 Spark 的数据血缘的原理对比分析,可以更加清晰地了解 Flink Runtime 层的设计与 Spark Runtime 层设计的差异产生的原因。
Q7:毕业季,尤其是在疫情的大背景下,您对毕业生的方向选择方面有什么样的建议?对初入职场的职场新人有什么样的建议?
Lin:疫情确实改变了很多事情,这里面有机会有挑战。建议大家对个人的职业发展有一个长远的视野,选自己有兴趣的事情。不要被短期的眼前困难所阻碍,也不要被看上去很吸引人的“风口”所迷惑,而去从事自己不喜欢也不想长期投入的工作。
对于刚进入职场的新人,我认为个人能力的提升是最重要的。所以在进入职场后,首先需要做好当前的工作,然后不断学习总结工作领域中的知识来提升自己。因为职业发展的过程永远是胜任工作、能力提升、参与更加复杂的工作,这样一个不断循环往复的过程。计算机行业的每一份工作背后都是领域知识与实际需求相互结合的过程,我们需要通过上述的往复过程,理解业务需求,学习领域知识来实现个人能力的提升。