热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DLink流批一体技术架构及优势|滴普科技FastData系列解读

一、引言在上期的两篇连载文章中,我们分析了Lambda和Kappa架构固有的一些问题,同时也引出了流批一体架构的优势,本文就FastDa

在这里插入图片描述
一、引言

在上期的两篇连载文章中,我们分析了Lambda 和 Kappa 架构固有的一些问题,同时也引出了流批一体架构的优势,本文就 FastData流批一体大数据平台DLink ,如何基于 Flink + Iceberg 流批一体技术及其实践进行初步探讨。

二、需求背景

传统的基于离线(比如 Hive)数仓有很高的成熟度和稳定性,但在一些时延要求比较高的场景,则需要借助实时数仓 Flink 的帮助,将延时降低到秒级(或分钟级),但两套并存的数仓架构,势必带来双倍的资源消耗和开发维护工作量。那么,是否存在可以将离线和实时任务、批处理和流式任务,统一放在一套架构中调度和运行的架构呢?答案自然是肯定的。这就是 Dlink 的统一技术栈。

三、DLink 流批一体技术架构

(1)统一技术栈
DLink整体技术方案的核心理念就是“统一”。从底层Data Stack 的角度看,包括5 个部分:

  1. 数据存储:首先是数据存储格式的统一。利用 Iceberg 基于快照的读写分离和回溯(backfill)、流批统一的写入和读取、不强绑定计算存储引擎、ACID 语义及数据多版本、表schema和 partition evolution 等能力。
  2. Catalog Manager:统一Data Catalog,兼容 Hive Meta Store 接口,可实现 Flink、Trino、Hive 等常用大数据分析、计算引擎的无缝接入和良好的互操作性。
  3. 计算引擎:Unified DataStream,Flink 引擎在 DataStream 和 Table API 中均支持 batch 和 streaming 两种执行模式。
  4. 调度引擎:流批一体调度器,同时支持流批调度模式。在调度器内部通过 DAG 的合并和拆解、资源的细粒度配置等规则,对物理执行计划进行自适应调优。
  5. SQL引擎:统一了流式计算 SQL 与分析、点查等 Serving 类SQL 语义(兼容 ANSI SQL 标准)。所有的 SQL 类操作使用统一的 SQL 引擎。
    在这里插入图片描述
    图一 DLink 统一技术栈

关于 DLink的技术特点,在第四节会重点介绍一下。

实时数仓建设最重要的环节就是 ETL 任务,接下来我们结合实际场景和需求,看一下 Dlink 实时数仓是如何解决传统 Lambda架构在 ETL 场景中遇到的各种问题。

(2)实时数仓 ETL 场景
下图是DLink 流批一体数据平台在实时数仓场景(典型的 ETL 场景)的一个数据流图:
在这里插入图片描述
图二:DLink 数据流图

2.1 客户需求
客户之前完全使用 Oracle 搭建他们的数仓系统,在数据量达到一定规模之后,ETL 和数据分析的效率越来越低,亟需进行架构升级。对此,客户提出以下需求:一,实时抽取和写入:实时将 Oracle 的增量数据抽取并写入 Iceberg 中,业务数据的并发量在3000 行 / 秒,端到端时延要求在1至5分钟内;二,OLAP 统计分析:支持 DM 层数据的查询分析。

总之,对数据处理的实时性和数据的分析提出了要求。

2.2 实时数仓数据流程
结合客户的具体需求和 Dlink 的产品特性,我们设计了图二的流批一体实时数仓架构,从数据生命周期的角度,数据流程可以分为以下三个部分:

数据采集消费(Extract & Transform)
FastData DCT组件(类似 Debezium)负责 Oracle binlog 的抓取并转换成 dct-json 格式存储在 Kafka,实现增量数据入到 Iceberg 实时数仓。

数据统一存储(Unified Storage)
统一采用 iceberg 表格式存储全量数据,包括数仓的 ODS、DWD、DWS 和 DM 层数据,并实现各层之间增量数据的流转和处理。

数据实时处理(Transform & Load)
Flink 实际上在实时数仓 ETL 的以下阶段发挥了作用:

  1. 实时数据入湖:使用 Flink Kafka Source Connector 从 Kafka 拉取数据,并使用 Iceberg sink connector 将数据写入到 ODS 层;
  2. 增量数据读取: 当 ODS 层有新增数据时,触发 iceberg source connector 的增量读取事件,经过 Flink 计算将增量数据通过 Iceberg sink connector写入下面的 DWD 层,实现历史数据的更新;
  3. 更新下游数据:针对上游 ODS 明细数据的偶尔变更,触发DLink计算任务对小批量数据进行准实时的重新计算,更新下游统计数据,并将变更继续向下游传播。

接下来,我们从数据的采集、转换、存储和分析的角度继续来看:FastData DLink 流批一体大数据平台集成了从数据采集到最终的数据计算、分析能力。结合图二来看,具体涉及的流程如下:

数据采集
采集流程中使用了FastData DCT 以及 Kafka 组件,实现了Oracle增量数据的实时采集。

数据转换
转换环节主要涉及数仓离线链路的处理。类似往期文章中提到的 Lambda 架构,我们实际上可以通过 Flink 批处理读取某个 Iceberg 表的快照做全局分析,得到的结果可供不同场景(如Ad Hoc查询、数据科学、机器学习)下的用户读取和分析。

数据存储
Iceberg 作为通用的表格式存储,很好地分离了计算引擎(Flink、Spark、Hive、Presto等) 和底下的存储层,这样就可以很好地兼容多种计算引擎和文件格式(Parquet、ORC、Avro 等),正在成为数据湖上Table Format 层的事实标准。

Iceberg manifest和snapshot的设计,有效地隔离了不同transaction的变更,非常方便批处理和增量计算。

同时,Apache Iceberg 的社区资源也非常丰富,Netflix、Apple、LinkedIn、Adobe等公司都有PB级别的生产数据,运行在Apache Iceberg之上。

数据分析
由于底层 Iceberg 存储格式的打通,Trino 可实时读取 Flink 写入的 Iceberg 快照,从而实现了端到端近实时(1 分钟之内)的分析。

四、DLink技术亮点

那么,为了支撑以上产品特性,DLink 平台中又引入了哪些创新的技术呢?

在构建 DLink 流批一体大数据平台的过程中,基于 Iceberg、Flink 和 Trino 技术栈,结合客户的实际场景和需求,我们在元数据管理、数据存储格式和数据分析性能上做了一些工作,总结如下:

(1)统一元数据存储(Catalog Manager)
基于 DLink 统一的 Catalog Manager (简称 CM)和 统一元数据模型,实现了 Flink 和 Trino 引擎在catalog、database、表、视图(包括物化视图)和数据类型的统一和 良好的互操作性,彻底解决大数据引擎元数据格式不同造成的各种问题,用户无需代码开发,真正实现 Define Once,Query Anywhere!

同时,DLink CM可对外提供标准的 Hive Meta Store 接口。通过 HMS 接口,我们也计划将 DLink 的内部托管数据源暴露给外部第三方数据引擎(Hive、Spark 等),实现 DLink与大数据生态的打通。

在这里插入图片描述
图三 统一元数据存储

对于数据源和 Catalog 的管理,有三种情况:

  1. 结构化元数据:可对接开源 Hive Meta Store;
  2. 半结构化元数据:对于以 CSV、JSON等格式存储在对象存储和分布式文件系统上的元数据信息,可通过 Crawler 任务自动探索和解析,从而自动生成元数据信息;
  3. JDBC:支持MySQL、PostgreSQL、Oracle 等数据源的接入。

(2)统一数据存储(Iceberg)
Apache Iceberg 作为一个开放的数据湖表格存储,接口定义清晰,支持Flink、Spark等各种大数据引擎,兼容性比较好。虽然有不少优点,社区也比较活跃,但目前还存在点查、更新性能差的问题,DLink 目前联合Iceberg社区在索引和维表等技术之上做了增强和优化:

Clustering 技术
通过z-order实现多维数据重新聚合排序,提升多维聚合性能,大幅提升查询性能。

二级索引
增加了 Bloom Filter 索引,文件级别的过滤性能大大提升,从而加速点查性能。

MOR(Merge On Read)优化
通过后台自动调度的 Job,合并delete file 和 data file。避免在读取时,查询完data file后,还需要临时合并 delete file 的结果,从而提升了读性能。

小文件合并
类似 MOR Job 的后台任务。基于 Iceberg 的快照隔离和读写分离的优秀特性,我们开发了小文件自动合并功能。后台 Job 自动合并小文件,持续优化读取性能。基于多版本的快照隔离能力,文件合并操作不阻塞用户正常读写。

Lookup Table
维度表在流式计算的应用很广,通过 SQL 的 join 操作实现数据的补全。比如, source stream 是MySQL Binlog 日志中的订单信息,但日志中仅记录了商品的 ID,这样当订单信息入仓,我们进行日志流 Join 的时候,就可以通过查询维表的方式,补全商品名称的信息。

DLink Lookup Table 将热数据高效缓存在本地,冷数据存储在 Iceberg,同时基于数据局部性原理和统计分析,我们加入了自研的缓存替换算法,缓存命中率较高。同时,查询维表时,通过 Projection 与 Filter push down 极大降低缓存的数据量,进一步提高了缓存的命中率。我们初步测试 Streaming Join 维表性能较 Flink 原生 Lookup Table 性能提升2倍以上。

(3)统一 SQL引擎
在统一元数据之后,为了进一步提升易用性,我们在 Trino 和 Flink 之上构建了统一的 ANSI SQL 层,提供了一致的使用体验。数据入湖,DML、DDL等 SQL 操作均由一套 SQL 实现。在统一的 SQL 引擎及其优化器之上,我们做了如下优化:

Dynamic Filtering技术
Dynamic Filtering 技术早在 2005 年就在 Oracle中实现。借鉴数据库的思路,我们基于 Trino 引擎在Iceberg connector 上实现了 Dynamic Filtering 技术,大大减少了 tableScan 算子扫描的数据量。对于Dynamic filtering 技术感兴趣的同学可以参考:Dynamic filtering 。

五、未来展望

在FastData DLink统一元数据与存储的架构之上,FastData DLink将继续优化流式计算和数据入湖的性能,优化端到端时延,秉承简单、高效、易用的理念,构建流批一体、湖仓一体的实时大数据平台。

2022 年,DLink 将在 Flink、Iceberg、Trino 等开源组件上的优化和新特性逐步回馈开源社区,与国内外同行共建良好的大数据生态。

由于本文篇幅的限制,对于DLink大数据流批一体处理、流式计算、多维分析和湖仓一体等,大家关心的下一代大数据平台核心技术,后续我们会持续和大家分享,敬请期待!


推荐阅读
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • Presto:高效即席查询引擎的深度解析与应用
    本文深入解析了Presto这一高效的即席查询引擎,详细探讨了其架构设计及其优缺点。Presto通过内存到内存的数据处理方式,显著提升了查询性能,相比传统的MapReduce查询,不仅减少了数据传输的延迟,还提高了查询的准确性和效率。然而,Presto在大规模数据处理和容错机制方面仍存在一定的局限性。本文还介绍了Presto在实际应用中的多种场景,展示了其在大数据分析领域的强大潜力。 ... [详细]
  • 如何使用mysql_nd:Python连接MySQL数据库的优雅指南
    无论是进行机器学习、Web开发还是爬虫项目,数据库操作都是必不可少的一环。本文将详细介绍如何使用Python通过 `mysql_nd` 库与 MySQL 数据库进行高效连接和数据交互。内容涵盖以下几个方面: ... [详细]
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 投融资周报 | Circle 达成 4 亿美元融资协议,唯一艺术平台 A 轮融资超千万美元 ... [详细]
  • 本文深入解析了通过JDBC实现ActiveMQ消息持久化的机制。JDBC能够将消息可靠地存储在多种关系型数据库中,如MySQL、SQL Server、Oracle和DB2等。采用JDBC持久化方式时,数据库会自动生成三个关键表:`activemq_msgs`、`activemq_lock`和`activemq_ACKS`,分别用于存储消息数据、锁定信息和确认状态。这种机制不仅提高了消息的可靠性,还增强了系统的可扩展性和容错能力。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 本文详细探讨了Oracle数据库中Number和Float数据类型的特性和使用方法。通过对比分析,解释了Number类型在精度和范围上的优势,以及Float类型在处理科学计算时的灵活性。文章还介绍了Number数据类型的语法结构及其在实际应用中的最佳实践,帮助读者更好地理解和选择合适的数据类型以满足不同的业务需求。 ... [详细]
  • 美团优选推荐系统架构师 L7/L8:算法与工程深度融合 ... [详细]
  • 机器学习中的标准化缩放、最小-最大缩放及鲁棒缩放技术解析 ... [详细]
  • 在处理遗留数据库的映射时,反向工程是一个重要的初始步骤。由于实体模式已经在数据库系统中存在,Hibernate 提供了自动化工具来简化这一过程,帮助开发人员快速生成持久化类和映射文件。通过反向工程,可以显著提高开发效率并减少手动配置的错误。此外,该工具还支持对现有数据库结构进行分析,自动生成符合 Hibernate 规范的配置文件,从而加速项目的启动和开发周期。 ... [详细]
author-avatar
可可伦-惊叹号
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有