数仓基础(九):各大公司实时数仓实践

文章目录

各大公司实时数仓实践

一、网易实时数仓实践

二、汽车之家实时数仓实践

三、顺丰实时数仓实践

四、​​​​​​​腾讯实时数仓实践

五、​​​​​​​​​​​​​​滴滴实时数仓实践


​​​​​​​​​​​​​​各大公司实时数仓实践

一、网易实时数仓实践

此架构是基于Kudu的实时数据数仓,通过Data Stream自己写的数据采集工具来采集日志数据写入Kafka,使用NDC(类似CDC)服务可以将binlog数据推送到Kafka,通过Flink读取Kafka数据结果写入Kudu,基于Kudu构建实时数仓好处就是延迟低(毫秒/秒级);支持upsert;支持水平扩展。但是也存在一些问题,例如:突然数据量增多,基于内存会有很大的Compaction操作,会造成数据服务不可用;数据孤岛问题,Kudu很难与HDFS中的数据做贯通,形成数据孤岛;不支持更新主键。 

二、​​​​​​​​​​​​​​汽车之家实时数仓实践

在2016年汽车之家使用Storm构建实时平台,存在很多痛点,例如:纯编码方式开发,开发成本高;Storm不支持状态,当有状态业务是借助Redis实现,计算效率低,假设数据扩增多,Redis集群扩容不及时容易产生问题;Storm不支持SQL开发,对数仓不友好等。

2019年之后所有实时业务转向Flink处理,使用以上架构,以上架构中数据接入包含三部分:Client log 、Server log 、DB CDC,三部分数据内容如下:

Client log:在汽车之家大部分数据都是端的数据,例如:用户手机端,PC端,数据包含用户行为数据,例如:浏览数据,播放数据时长日志。

Server log:包含数据质量监控的日志,服务端的日志,主要用来做一些监控报警,例如:Nginx日志,各种web应用的日志,各种中间件的日志,大数据各种应用的底层日志。

DB CDC:  各种实时大屏,日志看板,例如:实时订单展示。

在上面架构中数据接收后通过Flink处理写入Kafka主要原因是来自Client log 、Server log 、DB CDC 数据格式是不统一的,通过Flink处理后,将格式统一成规范的json数据再写入Kafka。数据写入Redis和ES的主要作用是做实时数据缓存。最终这些Flink处理后的数据用来BI展示、推荐、风险控制、实时监控。

三、顺丰实时数仓实践

顺丰是国内领先的快递物流综合服务商, 顺丰使用大数据服务支撑了高质量的物流服务,其快递流转过程如下:

正是由于复杂的业务所以构建数仓。早期采用了Lambda架构构建数仓,随着实时业务增多,Lambda架构的弊端也慢慢凸显,后期改为实时数仓。

实时数仓和离线数仓实际上解决的都是相同的业务问题,最大的区别在于时效性,离线数仓有小时级和天级的延迟,而实时数仓则是秒级和分钟级的延迟,其他部分都相似,例如:数据源、数据存储、数据开发都是比较相近。为了解决开发者的割裂感,将离线和实时业务进行统一,并且可以通过实时的引擎来加速离线报表产出。 顺丰实时数仓架构如下:

以上架构中 使用Hudi来加速宽表数据,这个是如何实现的?

Hudi的关键特性如下:

  • 可回溯历史数据
  • 在大规模数据集中更新删除
  • 根据主键更新删除
  • 在数据写入时支持复制
  • 在数据读取时支持聚合
  • 支持视图,增量视图和实时视图
  • Hudi可以作为数据源发出增量数据
  • 异步压缩小文件,合并小文件

以ODS层为例,在ODS层引入Hudi可以使原来ODS层T+1抽取数据变为实时抽取数据,同时使用Flink消费Kafka中的数据,获取增量数据,通过Hudi将数据增量更新到Hive DWD等宽表中,将离线增量转变为实时增量。

注意:Hudi写入的过程是批处理的过程,且Hudi强依赖于Spark,顺丰对Hudi进行了修改完善。 

四、​​​​​​​​​​​​​​腾讯实时数仓实践

腾讯内部有QQ音乐、腾讯广告、腾讯看点、小程序、视频号等业务线每天数据量在万亿级别,这些服务线在构建各自的数据分析平台时采用的数据平台架构如下:

以上数据平台架构中,常常会使用一些离线调度系统定期调度Spark任务进行数据接入、ELT、展示过程,例如针对腾讯看点业务线,数据前方会有埋单,通过数据服务将数据接入到数据仓库,再通过ES/MySQL/ClickHouse对外提供数据展示。整个过程中,对于离线平台,数据接入、处理数据延迟一般是小时级别或者T+1级别,为了一些实时性需求,最初采用的是Lambda架构,分为批流两条线路,在实时链路中采用Flink处理,离线中使用Spakr进行处理,Lambda架构有一些痛点,例如:大大增加数据仓库阶段中组件复杂度、运维成本增加、数据不一致等,所以后期转换到基于Flink+Kafka的Kappa架构,在Kappa架构中也有痛点,例如:

  • 对消息队列存储要求高,消息队列的回溯能力不及离线存储
  • 消息队列本身对数据存储有时效性,且当前无法使用OLAP引擎直接分析消息队列中的数据
  • 全链路依赖消息队列的实时计算可能因为数据的时序性导致结果不正确

 最后决定升级改造Kappa架构,基于Flink+Iceberg来针对实时数据流构建实时数仓,架构如下:

腾讯采用的是Flink+Iceberg方式构建实时数仓,其架构图如上,即将原有Kappa架构中的Kafka替换成了Iceberg,有如下好处:

  1. 实现了存储层的流批统一,存储成本降低
  2. 中间层支持OLAP分析,可以基于Iceberg针对实时数仓中的某些层做一些OLAP分析,将结果输出到下游。
  3. Iceberg底层存储依赖于HDFS并且支持列式存储,可以基于中间某些层使用Flink做一些计算,那么可以将原来Kappa架构中离线链路中天级别延时降低到小时级别或者分钟级别。

将Kappa架构改造之后实际上也带来了一些缺点,例如:向Kafka中写数据与向HDFS中写数据相对比,肯定是向Kafka中写数据更快,所以将Kafka替换成Iceberg之后,数据延迟从实时变成近实时;Iceberg对接其他数据系统需要额外的开发工作,不如Kafka完善。这些缺点可以认为是Iceberg目前发展不完善导致,随着Iceberg的发展,这些问题也会一一得到解决。

五、​​​​​​​​​​​​​​滴滴实时数仓实践

在2019年之前,滴滴内部都是自建的实时服务,没有统一规定实时引擎,这些自建服务中包含Spark和Flink任务,开发成本比较高,使用低级api的方式进行业务开发。这个阶段更多的是业务驱动,没有专门的实时数仓概念,大家都是分散建设。

在2019年之后,公司内部统一了实时计算的引擎为Flink,并且对Flink引擎内部做了一些增强,实时数仓正式在某些业务上进行实践。在2020年下半年,公司内部对实时开发平台进行升级,实时数仓建设主要集中在任务统一规划和数仓规范性建设方面。目前,在滴滴中每日运行核心作业150+,覆盖的核心指标有200+(包括了公司各个业务线的产品),资源总量10000+(core),各个业务线产品包含:滴滴出行(网约车,拼车各个业务线)、滴滴顺风车独立业务线、DIDI广告业务独立业务线、橙心优选独立业务线,体系架构如下:

以上体系架构图就是滴滴整体业务架构图,底层是数据源,中间也做了数据仓库分层,包括ODS层,DWD明细层是将ODS层数据库binlog、Public Log、Topic、消息队列同步过来,DWD包含三类数据:业务数据(订单交易),流量数据(主要是埋点获取用户行为数据,用作用户分析),维度数据(用户数据、司机数据、车辆行驶数据、拍照数据等维度数据),DWM层就是指标汇总层,对一些核心的指标做一些汇总,包括:冒泡、呼单、完单、PV、UV、财务、安全等。APP层更多是关于数据展现,包括数据看板,数据产品,还包含实时接口服务(主要提供给数据使用方,例如数据监管,保证数据一致性等),OLAP分析(数据检验,临时性业务分析)等。最上面是面向某些特定用户提供平台使用,如:高管、运营、业务、分析、开发。左侧数据体系建设规范包括表命名规范,字段命名规范,任务调度规范,数据规范、运维规范等。右侧是内部开发计算引擎平台。

滴滴整体数据链路架构图如下:

数据链路最左侧是数据源,通过平台任务汇集到ODS层Kafka、DDMQ(滴滴内部自研消息队列) ,后经Flink进行数据清洗和维度建设,维度存入HBase,数据经过清洗落入DWD层,再经过一些核心Flink任务,数据落入DWS层,在这两层有一些OLAP任务(部分核心任务基于DWD、DWS层进行OLAP查询分析),针对DWS层再经过一些Flink任务数据还会做一些指标汇总形成DM汇聚层,这一层对外提供数据服务形成APP层,APP层主要是一些产品、看板、报表、接口调度服务,主要是数据应用,包括构建指标体系,帮助业务同学看清业务发展情况、针对营销活动(补贴,营销活动),看到活动效果,快速进行策略调整、针对反作弊场景,构建算法策略,快速识别风险。目前消息队列使用的是Kafka和DDMQ,维度数据存入HBase,OLAP引擎正在由Druid向ClickHouse迁移。


  • 📢博客主页:https://lansonli.blog.csdn.net

  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉

  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1522527.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Opencv实现提取卡号(数字识别)

直接开始 实行方法 解析命令行参数:使用argparse库来解析命令行输入,确保用户提供了输入图像和模板图像的路径。 读取模板图像:使用cv2.imread()函数读取模板图像的路径,并显示原始图像。 图像预处理: 将图像转换为…

Promises - 从零开始(万字详解)

目录 前言 为何这样设计 回调函数 介绍Promises 使用Promises 创建自己的Promises Promise 链 传递数据 错误处理Promises async / await 结语 ❤️❤️❤️ 前言 在学习JavaScript的过程中往往会面临很多挑战,其中最让人头疼的要数Promises了。想真正理…

【CF补题数学裴蜀定理】 div969 C Dora and C++

Dora and C 分析: 对于两个数x,y 我们想要通过如下操作使得他们的差变得尽可能小 我们要如何操作? 这个操作也就是相当于 d e l ∣ y − x ∣ − k 1 ∗ x − k 2 ∗ y del|y-x|-k_1*x-k_2*y del∣y−x∣−k1​∗x−k2​∗y,让这个差值最小…

【网络安全】IDOR之敏感数据泄露

未经许可,不得转载。 文章目录 正文正文 在测试“添加到收藏夹”功能时,我拦截了发送到服务器的请求,请求体如下: {“uriTemplate”:“asset/{assetId}/favorite”,“version”:“v2”,“type”:“POST”,“req_service”:“pict”,“url”:“asset/VICTIMS_ASS…

Android Google Maps

Android 谷歌地图 前言正文一、设置Google Cloud 项目二、项目配置① 设置SDK② 配置API密钥③ 配置AndroidManifest.xml 三、添加地图四、定位当前① 请求定位权限② 我的位置控件③ 获取当前位置 五、配置地图① xml配置地图② 代码配置地图③ 地图点击事件④ 管理Marker 六、…

薛定谔的空气墙?一文带你了解其背后的技术原理

封面图 悟空来了都得撞墙? 目前,被称作“村里第一个大学生”的国产3A游戏《黑神话:悟空》发售已经有一段时间了,游戏采用虚幻引擎4技术,仿佛将传统与现代的界限模糊,玩家游玩时沉浸感极强。然而&#xff…

自然语言处理系列五十三》文本聚类算法》文本聚类介绍及相关算法

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列五十三文本聚类算法》文本聚类介绍及相关算法K…

四、基本电路设计笔记——4.1 DC-DC稳压电路

目录 4.1 DC-DC稳压电路 4.1.1 基于MT2492的DC-DC稳压电路 (1)芯片参数 (2)芯片引脚 (3)输出电压设置 4.1.2 基于MT2499A的DC-DC稳压电路 (1)芯片参数 (2&#xf…

多模态生成发文量大涨!最新成果统一Transformer和Diffusion,含金量超高

最近多模态生成领域也在“神仙打架”,比如Meta的全新训练方法Transfusion,用单个模型就能同时生成文本和图像! 还有之前华为、清华提出的个性化多模态内容生成技术PMG,生成的内容可“量身定制”,更能满足偏好。 这些…

深入解析Linux轻量级进程:线程的概念、原理、优缺点及其与进程的关系与区别

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 📚Linux线程📕什么是线程*可以使用多进程去并发的执行一个进程的代码,那为什么要由线程呢&#x…

搭子小程序开发,让社交更加有趣

如今,搭子成为了年轻人社交的新兴方式,它作为一种连接年轻人的社交纽带,深受大众的欢迎!各式各样的旅游搭子、健身搭子、游戏搭子等,让年轻人享受到社交的魅力。 随着互联网的发展,寻找搭子也发展到了线上…

一个好用的Maven依赖冲突解决插件:Maven Helper

在项目开发,或项目Maven需要新增依赖、项目依赖组件升级时,经常会出现添加后,因为各个模块中有相同的依赖、不同的版本而导致依赖冲突,从而导致项目启动不起来,这种冲突非常恶心,因为是传递依赖所以会看不出…

Hackme靶场渗透攻略

步骤一,注册登录进去 步骤二,点击search 我们发现有很多书 步骤三,搜索一本书抓包发放到重放器 步骤四,数据改为1*,复制数据包到1.txt,然后打开sqlmap 步骤五,sqlmap查看当前数据库 python s…

多模态AI:原理、应用与未来展望

随着人工智能技术的飞速发展,多模态AI逐渐成为构建智能系统的重要方向。传统的AI系统通常依赖于单一模态的数据,如文本、图像或音频。而多模态AI通过结合多种数据类型,能够在更复杂的场景下提供更智能的解决方案。本文将深入探讨多模态AI的原…

Android 11 (R)AMS Activity内部机制

一、AMS是如何被管理的 如我们在Android 11(R)启动流程中介绍的一样,AMS和ATMS是在SystemServer中被启动的 ActivityTaskManagerService atm mSystemServiceManager.startService(ActivityTaskManagerService.Lifecycle.class).getService(); mActivityManagerSe…

使用vscode debug cpp/python混合编程的程序(从python调用的C++编译的dll)

使用vscode debug cpp/python混合编程的程序(从python调用的C编译的dll) 1. 安装插件 Python C Debugger https://marketplace.visualstudio.com/items?itemNamebenjamin-simmonds.pythoncpp-debug 2. 在.vscode/launch.json中增加配置 拷贝自 https:…

默默的学python——两个重要的函数dir()、help()

一、dir()函数 dir()函数在Python中用于返回一个对象的所有属性和方法的列表,当你对一个函数使用dir()时,它会返回函数对象的所有可访问的属性和方法的名字列表。 具体的说,dir()函数获取的内容包括: 1.特殊方法和魔法方法 如…

Kettle 锁表原因及解决办法【源码级分析】

文章目录 背景源码分析锁表场景1:资源库锁表锁表场景2:写日志锁表在哪里配置的kettle_log_table?官方解释自增 SQL 获取 BatchI 原理解决自增 SQL 获取 BatchID背景 Kettle 7.1.0 经常出现锁表的情况,体现为在数据库里有一条锁表 SQL,然后整个 Kettle 都无法运行。😂�…

App推广新姿势:Xinstall一键下载唤起,轻松提升用户体验!

在App推广和运营的道路上,你是否遇到过这样的困扰:用户点击下载链接后,却无法直接唤起App,导致用户体验不佳,甚至造成用户流失?别担心,今天我们就来科普一个神器——Xinstall,它能帮…

【GIT】idea中实用的git操作,撤回commit,撤回push、暂存区使用

IDEA中最常见的UI操作:【GIT】Idea中的git命令使用-全网最新详细(包括现象含义) 文章目录 问题一: idea撤回仅commit错误的代码(仅本地仓库,因为还没推送到远程)问题二: idea撤回Com…