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

news2024/11/25 13:27:34

文章目录

各大公司实时数仓实践

一、网易实时数仓实践

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

三、顺丰实时数仓实践

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

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


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

一、网易实时数仓实践

此架构是基于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.coloradmin.cn/o/2100757.html

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

相关文章

OpenHarmony编译开发:hiperf应用优化调试命令行工具实践

简介 hiperf 是 OpenHarmony 为开发人员提供的用于调试的命令行工具,用于抓取特定程序或者系统的性能数据,类似内核的 perf 工具,该工具支持在 Windows/Linux/Mac 等操作系统上运行。 架构 目录 /developtools/hiperf ├── demo # demo 程序 │ …

单片机-串口通信(二)

目录 一、串口概念 1.相关概念: 按数据传输方式分类: 按时钟分类 二、STM32F103ZET6中串口 USART特性: NRZ数据格式: 三、配置串口通信 查看硬件原理图 软件配置流程 USART相关的寄存器 新建my_usart1.c和my_usart1.h …

Python 中 9 种关键文件类型你了解几个?

当你遇到名称以 .ipynb、.pyi、.pyc 等结尾的 Python 文件时,你是否会感到困惑? 你想知道所有这些文件类型之间的区别吗?今天就和大家一起了解所有这些 Python 文件类型。🙂 .py文件:标准 Python 源代码 不用多说&a…

C++:this指针详解

目录 一、this指针 二、C和C语言实现Stack对比 一、this指针 • Date类中有 Init 与 Print 两个成员函数,函数体中没有关于不同对象的区分,那当d1调用Init和 Print函数时,该函数是如何知道应该访问的是d1对象还是d2对象呢?那么这…

【蔡英丽医生】颈动脉斑块:认识它,预防它,应对它

在我们日常的健康检查中,颈动脉斑块这个词可能会不经意间跃入眼帘,尤其是对于40岁以上的朋友们来说,它的出现率更是居高不下。据调查数据显示,我国40岁以上人群中,颈动脉斑块的检出率超过40%,而60岁以上的人…

【UE5】控件蓝图——树视图(TreeView)的基本使用

目录 前言 效果 步骤 一、显示根节点 二、显示子节点 前言 我们在视口中添加1个方块,2个球体,5个圆柱 它们在大纲视图中的层级关系如下,那么如何将这种层级关系显示在树视图中是本篇文章要解决的问题。 效果 步骤 一、显示根节点 1…

【靶场】Pikachu—XSS Cross-Site Scripting(前五关)

🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍收藏💗支持一下哦 【靶场】Pikachu—XSS Cross-Site Scripting(前五关) 第一关 反射型xss(get)第二关 反射型xss(post)第三关…

WeSiGJ的系列文章目录

文章目录 Cbasic 面试基础知识系列 23种 设计模式[创建式模式Creative Mode][结构型模式Structural pattern][行为模式Behavioral patterns] 关于作者支持作者 C basic 面试基础知识系列 abstractassertbit_fieldbit_operationCFeaturesconstdecltype 多态double_colon 冒号e…

宝塔官网下载地址

宝塔官网下载地址

启服云专利管理系统 高效管理创新成果

在知识经济时代,专利作为企业的核心竞争力和创新成果的重要载体,其管理效率与保护水平直接关系到企业的市场竞争力与未来发展。启服云管理软件作为一款集智能化、高效化、安全化于一体的为科技服务和知识产权领域设计的SaaS解决方案,旨在帮助…

采购火热!开学返校季这几类产品卖爆了!电商选品指南

9 月开学季,对于学生和家长来说,是一个充满新希望和新开始的时节。对于电商而言,这也是一个重要的销售节点,把握好开学季的需求,进行精准选品,能够带来丰厚的收益。 一、学生文具类 1、 笔记本 无论是传…

zhidianyun01/基于 ThinkPHP+Mysql 灵活用工+灵活用工源码+灵活用工平台源码

‌‌灵活用工‌是一种灵活形式的用工方式,它涵盖了多种形态,包括非全日制用工、‌劳务派遣、‌业务外包等。这种用工方式允许企业在不同需求下灵活地按需聘用人才,而不必建立正式的全职劳动关系。灵活用工的核心在于其灵活性和按需性&#xf…

使用 ELK Stack 进行云原生日志记录和监控:AWS 中的开发运营方法

使用 ELK Stack 进行云原生日志记录和监控 欢迎来到雲闪世界。在当今的云原生世界中,日志记录和监控是强大的 DevOps 策略的重要组成部分。监控应用程序性能、跟踪错误和分析日志对于确保无缝操作和主动识别潜在问题至关重要。在本文中,我们将指导您使用…

搞定——pip 升级失败!pip._vendor.urllib3.exceptions.ReadTimeoutError 这个闹心的问题

pip 升级失败的解决方法 由于网络原因,可能很多小伙伴们都遇到过pip 升级失败的这个问题把!提示如下: pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(hostfiles.pythonhosted.org, port443): Read timed out. 怎…

Java学习日记(day26)

一、MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范, 用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面&…

Java基础(8)- Java代码笔记5

目录 一、static关键字 1.概述:静态关键字 2.使用 a.修饰一个成员变量 b.修饰一个方法 3.调用静态成员:类名直接调用(不用new对象) 4.静态成员特点: 5.static修饰成员的访问特点 6.静态成员在开发中的使用场景…

搭建 canal 监控mysql数据到Elasticsearch(总结)

搭建 canal 监控mysql数据到 elasticsearch 中 需求: 要将 MySQL 数据库 info 中的 notice 和 result 表的增、删、改操作同步到 Elasticsearch 的 notice 和 result 索引,您需要正确配置 MySQL、Canal 、Canal Adapter 、 Elasticsearch 和 kibana 系统rocky9.2…

Django + websocket 连不上

看了网上的几个简单例子,一步一步做,但无一成功。都连不上websocket。 后来按一个视频教程的操作步骤来做,成功了。差别在于视频教程中加了 pip install daphne 和setting.py中 连不上的表现: 前端报错: WebSock…

如何打造在线音乐网站?java springboot架构,vue前端开发,音乐分享新体验

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

基于Prometheus 和K8S kubernetes 构建 搭建监控告警系统

目录 1、Prometheus介绍? 2、Prometheus特点? 2.1 样本 3、Prometheus组件介绍 4、Prometheus工作流程 4、Prometheus和zabbix对比分析 5、Prometheus的几种部署模式 5.1 基本高可用模式 5.2 基本高可用远程存储 5.3 基本HA 远程存储 联邦集群…