版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 菜鸟实时数仓技术架构演进目 录 TOC o 1-3 h z u HYPERLINK l _Toc60751045 一以前的实时数据技术架构 PAGEREF _Toc60751045 h 3 HYPERLINK l _Toc60751046 二数据模型升级 PAGEREF _Toc60751046 h 5 HYPERLINK l _Toc60751047 三计算引擎的提升 PAGEREF _Toc60751047 h 7 HYPERLINK l _Toc60751048 四数据服务的升级 PAGEREF _Toc60751048 h 13 HYPERLINK l _Toc60751049 五其
2、他技术工具的探索和创新 PAGEREF _Toc60751049 h 16 HYPERLINK l _Toc60751050 六未来发展与思考 PAGEREF _Toc60751050 h 17导读:在开源盛世的今天,实时数仓的建设已经有了较为成熟的方案,技术选型上也都各有优劣。菜鸟作为物流供应链的主力军,时效要求已经成为了核心竞争力,离线数仓已不能满足发展的需要,在日益增长的订单和时效挑战下,菜鸟技术架构也在不断发展和完善,如何更准更高效的完成开发和维护,变得格外重要。本文将为大家分享菜鸟技术团队在建设实时数仓技术架构中的一些经验和探索,希望能给大家带来启发。本文主要包括以下内容:以前的实时
3、数据技术架构数据模型、计算引擎、数据服务的升级其他技术工具的探索和创新未来发展与思考以前的实时数据技术架构数据模型:业务线内部模型层次混乱,数据使用成本特别高需求驱动的烟囱式开发,完全没有复用的可能性,计算成本居高不下各业务线横向或者纵向的交叉,导致开发过程中数据一致性偏差较大纵向的数据模型,导致 BI 使用时比较困难实时计算:我们之前使用阿里云的 JStorm 和 Spark Streaming 进行开发,这两部分能满足大部分的实时数据开发,但是应用到物流供应链场景当中,实现起来并不简单,甚至无法实现很难同时兼顾功能、性能、稳定性以及快速故障恢复能力数据服务:开发过程中,实时数据下沉到 My
4、SQL,HBase 等数据库中,查询和保障方面不灵活BI 权限控制和全链路保障不可靠数据模型升级1. 模型分层参考离线数仓,将实时数据进行分层,第一层是数据采集,将从 MySQL 等数据库中采集到的数据放到 TT 消息中间件中,然后基于 TT 消息中间件和 HBase 的各种维表关联产生事实明细宽表,再将生成的数据写到 TT 消息中间件中。通过订阅这个消息产生轻度汇总层和高度汇总层两层。轻度汇总层主要按照多个维度沉淀数据,高度汇总层主要用于大屏场景。2. 预置分流左边公共数据中间层是将所有业务线整合在一起,然后进行分层。右边的业务数据中间层是各个业务基于横向的公共数据中间层的基础上,去分流自己
5、业务的数据中间层,然后根据这些实时的消息,个性化的产出自己业务的数据中间层。比如不同的订单,可以横向分流成进口供应链和出口供应链。这样实现了上游只需要一个公共分流作业完成,节约了计算资源。3. 菜鸟供应链实时数据模型左边是公共的数据中间层,里面包含整个大盘的订单数据,大盘的物流详情,汇总的公共粒度数据等,在这个基础之上做了个分流任务,然后从物流订单,物流详情等里面拆分出我们自己个性化的业务,比如国内的供应链,进口的供应链以及出口的供应链等。经过这些步操作之后,可以轻易的区分哪些表是大屏的数据,哪些表是统计分析的数据,在数据易用性方面有了很大的提升。计算引擎的提升一开始,我们采用了 JStorm
6、 和 Spark Streaming 进行实时开发。这两个计算引擎在满足大部分的场景时,没有特别大的问题,但是在应用到供应链或者物流场景时,不是那么简单。所以我们在17年切换到了 Flink 上,Flink 提供了一些很实用的功能,而这些功能在一些供应链的场景下比较适用。首先是内部 Flink 支持一套完整的 SQL 写法,提高了开发效率。第二点是 Flink 内置的基于 State 的 retraction 机制,很好的支持了供应链当中的取消订单,换配等这种操作,而且非常简单。Flink 的 CEP 功能,方便的实现了超时统计的功能,还有目前正在推的 AtoScaling 方案,比如数据倾斜
7、,资源配置等。另外一点是 Flink 在批流混合问题的处理,有很好的支持。1. 神奇的 Retraction左边有4列数据,第1列数据是物流订单,第2列的数据是物流订单的创建时间,第3列数据是这个订单是不是被取消,第4个数据是计划配送公司,就是订单分配给哪个配送公司。这个业务需求看上去非常简单,其实就是统计每个配送公司计划履行的有效单量有多少。但是有两个点需要注意一下,第一点,有一个订单 LP3,在开始的时候是有效的,然后在最后一条时取消了,就变成了一个无效订单,但这一条订单不应该统计在内,因为业务需求统计的是有效订单。第二点,配送公司的转变,LP1 这个订单在一分钟时是 tmsA 来配送,后
8、来变成了 tmsB,再过了一段时间,这个订单又变成 tmsC 配送。如果基于 Storm 增量计算,得出的结果显然是错误的,这时要按照最后一次消息给我们传过来的数据统计。这样的场景在 Flink 中是如何实现的呢?Flink 也提供了一些非常好的回撤机制,下面是伪代码的实现:第一段代码使用 Flink 的 last_value 函数,获取这个订单最后一个消息非空的值,在这个基础上进行汇总。一旦 last_value 中字段发生变化,都会触发撤回机制,得到最后正确的值。2. 实时超时统计这个案例发生在菜鸟实际物流场景中,第1个表格是一个日志的时间,第2个是物流订单,第3个字段是出库时间,最后一个
9、字段是揽收时间,现在需要统计的是出库超6个小时没有被揽收的单量。这里涉及到全链路时效问题,全链路时效指从下单到仓库发货到快递揽收到签收的整体时间,这个场景放在离线中是非常容易实现的,但是放到实时中来不是很简单, 比如 LP1 在00:05分的时候没有揽收,现在如果当下时刻是12点的话,也没有揽收,理论上应该计算这个订单,但是没有揽收就意味着没有消息进来,没有消息进来我们又要统计,其实我们用 Flink 是没法统计的,那这种情况我们怎么处理呢?我们的解决方案是如果没有这条消息我们用 Flink 来制造这条消息。这种超时消息统计我们想到了几种方法:包括引入消息中间件 ( kafka ) 和 Fli
10、nk 的 CEP。最终选择了 Flink 的 Timer Service,因为这种消息不是特别多,中间件又特别重。而 CEP 会丢掉一些回传不准确的消息,导致数据计算不准确,针对这些情况,我们在调研之后选择了 Timer Service,同时我们对它底层的 ProcessElement 和 OnTimer 两个方法进行了改写。ProcessElement 告诉 Flink 存储什么样的数据,然后启动针对每一个超时的事件的 Timer Service。OnTimer 方法会在每个超时的时刻读这个超时的消息,并把这个超时的消息下发下来。基于下游跟正常流的关联操作之后就能计算超时消息的单量。伪代码如
11、下:先构造一个 process funcation 到 state 存数据,并为每一个超时的数据注册一个 Timer Service。然后执行 OnTimer 这个方法,读取并把这个超时的消息下发下去。3. 从手动优化到智能优化关于数据倾斜的问题,左图显示在 map 阶段 shuffer 之后数据倾斜到了红色的 Agg 上,这时就出现热点了,原来我们是对这个 lg_order_code 进行 hash 取值操作,然后再针对散列的结果进行二次的聚合,这样操作后在一定程度上减轻了数据的倾斜。在最近的 Flink 的版本中已经实现了规避数据倾斜的方法,我们内部的 Blink 版本,有几个功能去优化热
12、点的问题,第一个就是 MiniBatch,之前来一条数据,我们就去 State 里面查询然后写入,MiniBatch 的作用是把所有的数据先聚合一次,类似一个微批处理,然后再把这个数据写到 State 里面,或者在从 State 里面查出来,这样可以大大的减轻对 State 查询的压力。第二个办法就是 LocalGlobal,类似于在 hive 中 map 阶段中的 combiner,通过设置这个参数可以在读的时候先聚合。第三个办法是 PartialFinal,类似于散列的方式,分两次聚合,相当于 hive 中两个入 reduce 操作。通过设置这三个参数,可以在大部分场景规避数据倾斜的问题。
13、智能化功能支持的另一个场景是资源配置。在进行实时 ETL 过程中,首先要定义 DDL,然后编写 SQL,之后需要进行资源配置。针对资源配置问题,菜鸟之前的方案是对每一个节点进行配置,包括并发量、是否会涉及消息乱序操作、CPU、内存等,一方面配置过程非常复杂,另一方面无法提前预知某些节点的资源消耗量。Flink 目前提供了较好的优化方案来解决该问题:大促场景:该场景下,菜鸟会提前预估该场景下的 QPS,会将其配置到作业中并重启。重启后 Flink 会自动进行压测,测试该 QPS 每个节点所需要的资源。日常场景:日常场景的 QPS 峰值可能远远小于大促场景,此时逐一配置 QPS 依然会很复杂。为此
14、 Flink 提供了 AutoScaling 智能调优的功能,除了可以支持大促场景下提前设置 QPS 并压测获取所需资源,还可以根据上游下发的 QPS 的数据自动预估需要的资源。大大简化了资源配置的复杂度,使得开发人员可以更好地关注业务逻辑本身的开发。数据服务的升级在开发的过程中常用的数据库比较少,因此统一数据库连接标准是有必要的。我们开发的叫天工,它可以提供整个数据库统一的接入标准,提供统一的权限控制,提供统一的全链路的保障。这个中间件将 SQL 作为 DSL,并且提供一些标准化的 HSF 的服务方式。作为菜鸟数据服务的践行者,天工也提供了一些非常贴近业务的,非常实用的功能,下面是几个案例。
15、1.NoSQL To TgSQL对于 HBase 这种 NoSQL 数据库,BI 或者运营来说用代码来实现需求是比较困难的,所以开发天工的时候第一件事情就是把一些 NoSQL 转化成天工 SQL,包括我前面说的一个人员的表转化成一个二维表,这里是逻辑的转换,不是实际物理上的转化,大家通过运行这个 SQL,后台的中间件会自动转化成查询的语言,去查询后台的数据。2.跨源数据转化在开发数据产品的过程中,我们发现实时跟离线有时候分不开,比如有一个比较大的场景,需要统计实时 KPI 的完成率,它的分子是实际单量,分母是已经计划好的单量,数据源是来自两个部分,第一个部分来自已经做好的 KPI 的一个表,然
16、后第二部分是一个实时计算出来的表。对于这种场景,之前我们是用 Java 去计算这两部分数据,然后在前端去运算,比较麻烦。现在通过天工 SQL 直接取这两部分数据关联,做到跨源数据的操作。3.服务保障升级原来在整个服务的保障比较缺失,比如某个数据服务出了问题,我们直到运营反馈的时候才发现有问题,或者数据量比较大的时候,要去做限流和主备切换。所以在数据服务的这一层中也把数据服务保障加到了天工的中间件里面。还有主备双活,将流量大的放在主库,流量适中的放在备库上。针对一些复杂的查询,在执行的时候很慢,我们会自动识别这些慢查询,然后进行阻断,等待资源充足后再执行,当然,也可通过添加白名单用户进行限流。上
17、面这些功能在天工里面都有实现。其他技术工具的探索和创新除了前面讲的,我们在技术工具上也和阿里云计算平台的事业部进行了探索。每年遇到大促都要进行压测,大家要去启动数据,模拟大促流量,看看我们的实时作业能不能满足预期,比如有延迟,或者 QPS 过高,在原来我们会重启作业,然后把 source 和 sink 改成压测 source 和 sink,操作起来非常的麻烦。后来我们做了一个实时的压测工具,可以做到一键启动所有重要的压测任务,并且会生成压测报告。我们只需要看压测本报告有没有满足我们的预期就行。基于 Flink 之后,我们开始做基于作业进度的监控,比如延迟监控、checkpoint 的监控、TP
18、S 的预警等。未来发展与思考菜鸟目前在实时数仓方面更多的是基于 Flink 进行一系列功能的开发,未来的发展方向计划向批流混合以及 AI 方向演进。Flink 提供了 batch 功能。菜鸟很多中小型的表分析不再导入到 Hbase 中, 而是在定义 source 的时候直接将 MaxCompute 的离线维表读到内存中,直接去做关联,如此一来很多操作不需要再进行数据同步的工作。针对一些物流的场景。如果链路比较长,尤其是双十一支付的订单,在十一月十七号可能还存在未签收的情况,这时候如果发现作业中有一个错误,如果重启的话,作业的 State 将会丢失,再加之整个上游的 source 在 TT 中只允许保存三天,使得该问题的解决变得更加困难。菜鸟之后发现 Flin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广东阳江市阳西县残疾人康复中心就业见习岗位信息招聘1人备考题库及答案详解参考
- 2026北京市朝阳区将台社区卫生服务中心招聘备考题库含答案详解(综合题)
- 2026恒丰银行济南分行社会招聘36人备考题库带答案详解(完整版)
- 2026四川甘孜州上半年考核招聘事业单位工作人员43人备考题库附答案详解(模拟题)
- 2026广东佛山市南海区丹灶中心幼儿园招聘1人备考题库及答案详解(夺冠系列)
- 2026贵州省疾病预防控制中心第十四届贵州人才博览会引进高层次人才2人工作备考题库含答案详解(基础题)
- 2026年教育检测智能硬件合同
- 2026年法律承运采购供应合同
- 2026年广告承运外包服务合同
- 2026广西北海市第二中学(北京八中北海分校)临聘教师招聘2人考试模拟试题及答案解析
- 2025高考冲刺 预测 化学一 热点11 水溶液中的离子平衡(含解析)
- 陕西2025年高中学业水平合格考试英语试卷试题(含答案详解)
- 建设工程质量检测标准化指南•技术示范文本 检测专项检测报告和原始记录模板 -(二)主体结构大类
- 2025年中考语文复习阅读专题 名著勾连整合及综合训练 课件
- 吕不韦列传课件
- 年轻人让你的青春更美丽吧!(2024年浙江省中考语文试卷记叙文阅读试题)
- 第5课 中古时期的非洲和美洲(教学课件)-【中职专用】《世界历史》同步课堂(同课异构)(高教版2023•基础模块)
- 新入职运营副总工作计划书
- 第十一章:公共管理规范
- 第五章有机过渡金属化合物和过渡金属簇合物教材课件
- 统编版五年级道德与法治下册全册完整版课件
评论
0/150
提交评论