字节跳动数据湖技术选型的思考

字节跳动数据集成的现状

在2018年,我们基于Flink构造了异构数据源之间批式同步通道,主要用于将在线数据库导入到离线数仓,和不同数据源之间的批式传输。

在2020年,我们基于Flink构造了MQ-Hive的实时数据集成通道,主要用于将消息队列中的数据实时写入到Hive和HDFS,在计算引擎上做到了流批统一。

到了2021年,我们基于Flink构造了实时数据湖集成通道,从而完成了湖仓一体的数据集成系统的构建。

字节跳动数据集成系统目前支持了几十条不同的数据传输管道,涵盖了线上数据库,例如Mysql Oracle和MangoDB;消息队列,例如Kafka RocketMQ;大数据生态系统的各种组件,例如HDFS、HIVE和ClickHouse。

在字节跳动内部,数据集成系统服务了几乎所有的业务线,包括抖音、今日头条等大家耳熟能详的应用。

整个系统主要分成3种模式——批式集成、流式集成和增量集成。

  • 批式集成模式基于Flink Batch模式打造,将数据以批的形式在不同系统中传输,目前支持了20多种不同数据源类型。
  • 流式集成模式主要是从MQ将数据导入到Hive和HDFS,任务的稳定性和实时性都受到了用户广泛的认可。
  • 增量模式即CDC模式,用于支持通过数据库变更日志Binlog,将数据变更同步到外部组件的数据库。这种模式目前支持5种数据源,虽然数据源不多,但是任务数量非常庞大,其中包含了很多核心链路,例如各个业务线的计费、结算等,对数据准确性要求非常高。在CDC链路的整体链路比较长。首先,首次导入为批式导入,我们通过Flink Batch模式直连Mysql库拉取全量数据写入到Hive,增量Binlog数据通过流式任务导入到HDFS。由于Hive不支持更新操作,我们依旧使用了一条基于Spark的批处理链路,通过T-1增量合并的方式,将前一天的Hive表和新增的Binlog进行合并从而产出当天的Hive表。

随着业务的快速发展,这条链路暴露出来的问题也越来越多。

  • 首先,这条基于Spark的离线链路资源消耗严重,每次产出新数据都会涉及到一次全量数据Shuffle以及一份全量数据落盘,中间所消耗的储存以及计算资源都比较严重。
  • 同时,随着字节跳动业务的快速发展,近实时分析的需求也越来越多。
  • 最后,整条链路流程太长,涉及到Spark和Flink两个计算引擎,以及3个不同的任务类型,用户使用成本和学习成本都比较高,并且带来了不小的运维成本。

为了解决这些问题,我们希望对增量模式做一次彻底的架构升级,将增量模式合并到流式集成中,从而可以摆脱对Spark的依赖,在计算引擎层面做到统一。

改造完成后,基于Flink的数据集成引擎就能同时支持批式、流式和增量模式,几乎可以覆盖所有的数据集成场景。

同时,在增量模式上,提供和流式通道相当的数据延迟,赋予用户近实时分析能力。在达到这些目标的同时,还可以进一步降低计算成本、提高效率。

经过一番探索,我们关注到了正在兴起的数据湖技术。

关于数据湖技术选型的思考我们的目光集中在了Apache软件基金会旗下的两款开源数据湖框架Iceberg和Hudi中。Iceberg和Hudi两款数据湖框架都非常优秀。但两个项目被创建的目的是为了解决不同的问题,所以在功能上的侧重点也有所不同。

  • Iceberg:核心抽象对接新的计算引擎的成本比较低,并且提供先进的查询优化功能和完全的schema变更。
  • Hudi:更注重于高效率的Upsert和近实时更新,提供了Merge On Read文件格式,以及便于搭建增量ETL管道的增量查询功能。

一番对比下来,两个框架各有千秋,并且离我们想象中的数据湖最终形态都有一定距离,于是我们的核心问题便集中在了以下两个问题:

  • 哪个框架可以更好的支持我们CDC数据处理的核心诉求?
  • 哪个框架可以更快速补齐另一个框架的功能,从而成长为一个通用并且成熟的数据湖框架?

经过多次的内部讨论,我们认为:Hudi在处理CDC数据上更为成熟,并且社区迭代速度非常快,特别是最近一年补齐了很多重要的功能,与Flink的集成也愈发成熟,最终我们选择了Hudi作为我们的数据湖底座。

01 – 索引系统

我们选择Hudi,最为看重的就是Hudi的索引系统。

这张图是一个有索引和没有索引的对比。在CDC数据写入的过程中,为了让新增的Update数据作用在底表上,我们需要明确知道这条数据是否出现过、出现在哪里,从而把数据写到正确的地方。

在合并的时候,我们就可以只合并单个文件,而不需要去管全局数据。如果没有索引,合并的操作只能通过合并全局数据,带来的就是全局的shuffle。在图中的例子中,没有索引的合并开销是有索引的两倍,并且如果随着底表数据量的增大,这个性能差距会呈指数型上升。

所以,在字节跳动的业务数据量级下,索引带来的性能收益是非常巨大的。Hudi提供了多种索引来适配不同的场景,每种索引都有不同的优缺点,索引的选择需要根据具体的数据分布来进行取舍,从而达到写入和查询的最优解。下面举两个不同场景的例子

日志数据去重场景

在日志数据去重的场景中,数据通常会有一个create_time的时间戳,底表的分布也是按照这个时间戳进行分区,最近几小时或者几天的数据会有比较频繁的更新,但是更老的数据则不会有太多的变化。冷热分区的场景就比较适合布隆索引、带TTL的State索引和哈希索引

CDC场景

第二个例子是一个数据库导出的例子,也就是CDC场景。这个场景更新数据会随机分布,没有什么规律可言,并且底表的数据量会比较大,新增的数据量通常相比底表会比较小。在这种场景下,我们可以选用哈希索引、State索引和Hbase索引来做到高效率的全局索引。这两个例子说明了不同场景下,索引的选择也会决定了整个表读写性能。Hudi提供多种开箱即用的索引,已经覆盖了绝大部分场景,用户使用成本非常低。

02 – Merge On Read表格式

除了索引系统之外,Hudi的Merge On Read表格式也是一个我们看重的核心功能之一。这种表格式让实时写入、近实时查询成为了可能。在大数据体系的建设中,写入引擎和查询引擎存在着天然的冲突:

  • 写入引擎更倾向于写小文件,以行存的数据格式写入,尽可能避免在写入过程中有过多的计算包袱,最好是来一条写一条。
  • 查询引擎则更倾向于读大文件,以列存的文件格式储存数据,比如说parquet和orc,数据以某种规则严格分布,比如根据某个常用字段进行排序,从而做到可以在查询的时候,跳过扫描无用的数据,来减少计算开销。

为了在这种天然的冲突下找到最佳的取舍,Hudi支持了Merge On Read的文件格式。

MOR格式中包含两种文件:一种是基于行存Avro格式的log文件,一种是基于列存格式的base文件,包括Parquet或者ORC。log文件通常体积较小,包含了新增的更新数据。base文件体积较大,包含了所有的历史数据。

  • 写入引擎可以低延迟的将更新的数据写入到log文件中。
  • 查询引擎在读的时候将log文件与base文件进行合并,从而可以读到最新的视图;compaction任务定时触发合并base文件和log文件,避免log文件持续膨胀。在这个机制下,Merge On Read文件格式做到了实时写入和近实时查询。

03 – 增量计算

索引系统Merge On Read格式给实时数据湖打下了非常坚实的基础,增量计算则是这个基础之上的Hudi的又一个亮眼功能:

​增量计算赋予了Hudi类似于消息队列的能力。用户可以通过类似于offset的时间戳,在Hudi的时间线上拉取一段时间内的新增数据。在一些数据延迟容忍度在分钟级别的场景中,基于Hudi可以统一Lambda架构,同时服务于实时场景和离线场景,在储存上做到流批一体。

结语在选择了基于Hudi的数据湖框架后,我们基于字节跳动内部的场景,打造定制化落地方案。我们的目标是通过Hudi来支持所有带Update的数据链路。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/269284.html<

(0)
管理的头像管理
上一篇2025-05-07 06:56
下一篇 2025-05-07 06:57

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注