分享嘉宾:马进 网易杭研 技术专家

编辑整理:张满意

出品平台:DataFunTalk

导读:随着大数据技术的进步,各种计算框架的涌现,数据仓库相关技术难题已经从离线数仓逐渐过渡到实时数仓,越来越多的企业对数据的实时性提出了严格的要求,如何满足企业的低延时的数据需求,如何看待批量处理和实时处理的关系,实时数仓应该如何分级,各家可能都有自己的理解,本文主要介绍网易的实时计算平台的建设实践以及网易对于实时数仓方面的一些规划及展望,希望能够起到抛砖引玉的作用。01实时计算平台实践

1. 网易实时计算平台:Sloth

网易的实时计算平台Sloth译成中文是树懒的意思,继承了网易喜欢用动物系命名大数据组件的风格,如果你看过《疯狂动物城》,一定会对剧中的flash印象深刻。Sloth平台的建设始于2017年12月份,至今已有3年的时间,期间平台的弹性计算单元(ECU)规模一直呈现指数级增长,目前ECU已经突破50000个,运行的CPU数量已经达到15110核,内存超过了34T。

2. 平台架构

从功能的角度来看,Sloth平台主要分成两大块:

  • Admin:主要负责一些异步的服务,比如说任务的监控,告警,恢复和诊断。

  • Server:主要完成一些应用层面的服务,同时它也是一个无状态的PAAS服务,既面向我们web的终端用户,也面向大数据平台内部的其他模块。从功能上来看,它负责资源的管理,任务的开发及运维,同步事件的管理等任务。

从数据层面来看,我们实时数仓的架构主要分为四个层面:

① Source层

关系型数据:NDC是公司专门处理关系型数据的组件,它会将mysql等关系型数据库的binlog日志解析成特殊的数据格式然后插入到我们的kafka消息队列。

日志型数据:datastream是公司的专门负责日志收集的平台,它会将收集的日志信息插入到我们的消息队列。

② 消息队列

目前我们选用的是kafka。

③ 计算层

目前我们选用的是flink来完成数据的清洗,转换及聚合。

④ Sink层

kudu是我们主推的存储格式,kudu不仅可以提供一个高效的用于数据分析的列存格式,同时也支持数据实时的upsert及delete。当体量比较小的时候,也可以选用mysql或者redis这种可以实时变更的存储组件。

3. 一站式实时计算开发IDE

我们主推的开发模式是sql模式,同时我们也支持jar包模式。

我们提供高度集成的IDE,支持代码的离线调试,线上调试,版本管理,版本比对及配置管理。

4. 一站式实时任务运维

运维我们主要分为三大版块,分别是任务的运维,服务器监控及异常告警,下面我们分别看一下:

① 任务的运维

我们提供丰富的界面和菜单来支持任务的运维工作,通过页面的菜单点击我们可以轻松的查看任务信息,运行时的参数,高级的配置,运行记录,操作记录及运行日志。

② 服务器压力的监控

我们在grafana的基础上进行了二次开发,图形化的展示平台的吞吐量,延迟,IO,QPS等关键信息。

③ 告警的设置

在Sloth平台设置告警非常简单,你可以在界面上配置多个规则,比如说任务失败次数,数据延迟超多少阀值,报警间隔,告警的接收人,发送方式等。

5. 统一元数据中心

无论是离线数仓还是实时数仓,都需要做好元数据的管理工作,Sloth平台也有统一的元数据中心,下面简单介绍一下我们的元数据管理方式,元数据登记以及统一元数据所带来的好处。

元数据管理:

Hive metastore元数据管理体系是业界公认的标准,包括flink在1.10版本之后也开始打造自己的catalog机制,网易也遵循了这套逻辑,将数据统一分成了instance-> database -> table 的层级。

数据源登记:

  • 对于关系型数据库,本身就有schema信息,比如说mysql本身就有schema,database和table的概念,那么我们只需要把mysql登记进来,赋予一个instance_name,那么以后就可以通过instance_name.database.table 的方式来访问。

  • 对于NOSQL类的数据源,有些数据源没有database的概念,比如说hbase,我们可以指定一个default的database。

  • 对于消息队列,本身没有元数据,平台本身提供一个default的catalog可以直接使用,同时用户需要自定义database和table。

统一元数据所带来的好处:

  • 简化了开发流程,节省了代码量,规避了先定义DDL然后在定义DML的开发流程

  • 一次登记,多处复用

  • 允许字段发生变更,通过set设置属性,可以实现相同的元数据在不同的任务中具有一定的多样性

6. 其他工作

  • 混合部署,开展基于yarn和k8s的混合部署实践,改善资源利用率

  • 上游整合:对上游的数据库,只需要对数据库地址做一次性登记,就可以将数据库的表作为批表和流表source和flink实现无缝接合。省去用户在不同系统之间的跳转

  • 自动伸缩:根据业务流量,数据量自动调整内存和并发度,以适配业务流量的峰谷模型。

  • 增强诊断功能,提升运维效率,减小运维压力

02实时数仓规划与展望

1. 现状及痛点分析

下面我们以一个百度热词统计案例来分析一下流式处理与批量处理的成本消耗及网易目前遇到的一个存储痛点。

① 流式处理与批量处理

熟悉大数据的人都知道统计百度热词的过程相当于一个wordcount + topn 操作,这个任务既可以用spark跑批模式实现,也可以用flink流式计算实现,下面我们来分析一下跑批模式和流式计算模式完成这个统计的消耗情况。

跑批模式:

流式计算模式:

结果对比:

② Kudu痛点

目前市面上的支持实时读写的大数据存储基本上采用的都是PDT tree或者LSM tree这种数据结构,这种数据结构主要采用的是写优化策略,首先数据会有一个基线版本,当对数据进行修改时,不会立即修改基线版本的数据,而是写入一个新版本的数据,这种写入是采用append的模式实现的,所以写延迟非常低,那么读取的时候我们就需要合并多个版本的数据返回最新版本的数据,它的读延迟就会比较高。所以为了照顾到读延迟问题,隔一段时间就需要执行一次合并版本的操作形成一个新的基线版本,这个过程叫compaction。这种机制会带来一个问题,就是当一秒钟之内发生大量的修改时,这时数据就会有很多个版本,compaction的过程就会带来大量的cpu和内存消耗,这个问题我们称之为写放大问题。

因为compaction的存在,kudu成了一个存算不分离的存储系统,它需要去综合考虑写延迟,读延迟和compaction的性能,虽然他可以实时upsert或者delete,但是极端情况下它会遇到写放大的问题,而且网易线上也确实经历过这样的事故。

③ 实时规模与成本的负相关

根据前面的分析,我们得到了一个结论:

  • 批计算的成本和数据体量是呈现线性关系的,因为数据体量大的情况下,由于是顺序IO,我们只需要增加机器就可以解决。

  • 而流计算的成本却随着数据体量的增长呈现指数级增长,原因是流式计算过程中会遇到随机IO的问题,流式计算框架的checkpoint的瓶颈,存储组件的写放大问题,存算不分离的问题,以及小文件问题等等。

2. 展望:流批一体的配套存储

基于之前的提出的这些问题,我们展望一下如何实现一个流批一体的配套存储:

首先,我们需要实现存算分离,核心思路是:

  • 把kudu的compaction操作从存储端剥离出来。

  • 把compaction操作交给外部的定时调度来完成,比如说我们正在做的arctic服务,提供分钟级甚至是小时级的调度,牺牲掉一部分的实时性,但是提高了服务的稳定性。拿百度热词这个例子,我们可以看出热词每秒钟都在更新,但是我们没有必要每秒钟更新一下数据,我一分钟更新一下数据完全是可以的。

  • 对于一些数据准确性特别高的,我们应该提供一种同步的compaction机制,在读取数据的时候执行,比如说用flink读取数据的时候执行compaction后再返回,这种情况我们称之为merge on read。

  • 同时也可以提供一个异步的compaction机制,这种情况下,你读取的时候,读取到的是上一次compaction执行完成之后的结果,这种情况我们称之为copy on write。

其次,我们应该提供一个流批一体的API:

批量读取的api其实很好解决,我们的hdfs上的存储结构像parquet,kudu本身就是可以批量读取的,那么什么是流式读取的api呢?试想一下我们的消息队列,像kafka提供了一个时间戳,我可以随时回到这个时间戳对应的偏移,然后消费之后的数据,所以我们的想法是只要我们给定一个起始时间就能增量的读取某个时间点之后的数据就可以了,这个也类似mysql的binlog。

无论是批量的读取还是流式的读取,它们的存储应该是同一套。

3. 数仓分级

我认为数仓可以根据实时性的要求分成不同的等级:

  • 毫秒-秒级:实时性要求最高的等级,没有调度延迟,我们把这种场景比喻成私家车,这种情况下,道路治理是最关键的,要避免堵车,结合我们的实时计算来讲的话,私家车就是一个单独的事件,处理过程中要防止产生数据堆积,该级别更加注重端到端的情况,通常是一个特定的任务或者路线。

  • 分钟级:实时性高,有一定的调度延迟,我们把这种场景比喻成地铁,吞吐量比私家车交通要更高,是一种小批量运输,地铁交通注重的是换乘和复用,注重优化线路和站点,就和我们的workflow比较类似。

  • 小时-天级:实时性要求低,调度延迟高,我们把这种场景比喻成高铁,吞吐量大,执行速度最快的交通工具,你准备数据的时间可能超过真正执行的时间,这种就是我们传统的离线数仓的模式。

最后概括一下,如果把数仓比喻成交通的话,实时数仓就好比是城市交通,离线数仓就好比是城际交通。

4. 实时数仓trade off

在构建实时数仓时,我们通常需要考虑三个重要的环节:

  • 实时性,这个需要根据业务来确定延迟的等级,是秒级呢?还是分钟级?

  • 可用性,因为越高的实时性意味着对可用性的要求越高,对异常恢复的时间要求更短,比如说百度词条的案例,你的实时性要求如果是分钟级的,那么你发生故障了,一分钟内恢复不会产生太大的问题,但是如果是秒级的话,一分钟可能就会酿成事故。同时低延迟的这种随机IO更容易造成文件碎片化的问题,所以我们需要对小文件进行一个治理;在可用性方面,缓冲能力也尤为重要,我们的系统总会出现一定的峰值,比如说双十一0点的时候,流量可能是一年的峰值,但是出于成本考虑,我们不可能根据峰值无限的扩容,因此我们要具备很强大的消息缓冲能力。

  • 成本,实时计算的成本与数据体量是呈指数级增长的,其中一个主要的原因就是写放大问题,为了解决写放大问题,我们展望了一个存算分离的存储体系,降低compaction的频率,并提供流批一体的API来提升效能。

03总结

本文主要讲述了网易的实时数仓的产品形态,并结合实际的案例分析了网易实时数仓目前面临的难点,一方面剖析了批计算与流计算各自的消耗情况,一方面剖析了现有存储体系的存算不分离问题,从而得出流计算的成本随数据体量呈指数级增长的结论,紧接着我们提出了一种存算分离且批流一体的存储架构,通过剥离compaction,把compaction交给外部服务或者计算框架来实现存算分离,以及提供统一的API来同时支持批计算和流计算,最后我们浅谈了数据仓库的等级划分以及建设实时数仓时需要考量的三个重要环节。

今天的分享就到这里,谢谢大家。


在文末分享、点赞、在看,给个三连击呗~~

写在最后:

另外,还有一些朋友一直在问,数据仓库、数据湖、数据中台都有啥区别啊?这些也都很火啊,能不能讲讲?这些也早已分享过了,

点击查看:辨析数仓、大数据、数据中台的实质(内附21张架构图),数据库、数据仓库、数据湖、数据中台全给你讲清楚了。

点击查看:漫谈 | 大牛带你从0到1构建数据仓库实战,给你完整的数仓建设流程。

点击查看:系列 | 漫谈数仓第二篇NO.2 数据模型(维度建模),给你所有建模方法。

点击查看:数据仓库(离线+实时)大厂优秀案例汇总(建议收藏),给你业务梳理、指标体系梳理、维度梳理、事实表梳理、命名规范、数据仓库设计文档,外加数仓维度建模电子书和大厂数仓建设实战经验。

升职加薪,天天开心!

您的在看和转发是对我们最大的支持,O(∩_∩)O:

往期精彩回顾

往期推荐

数据湖VS数据仓库之争?阿里提出大数据架构新概念:湖仓一体!

深度 | 一文带你了解Hadoop大数据原理与架构(文末赠书)

详解数据仓库的实施步骤

进阶 |Hive 复杂数据类型

Flink系列 - 实时数仓之ETL实战(二)

Flink系列 - 实时数仓之热门商品统计-TopN(三)

欢迎加入 数仓中台交流群,跟同行零距离交流。如想进群,请加v:iom1128,备注:数仓,审核通过自主入群。

入群请联系小助手:iom1128『紫霞仙子』

关注不迷路~ 各种福利、资源定期分享

如果你觉得有用,就请帮忙分享一下,码字不易,我需要您的鼓励!

数仓 调度_网易实时数仓实践相关推荐

  1. 网易实时数仓实践与展望

    分享嘉宾:马进 网易杭研 技术专家 编辑整理:张满意 出品平台:DataFunTalk 导读:随着大数据技术的进步,各种计算框架的涌现,数据仓库相关技术难题已经从离线数仓逐渐过渡到实时数仓,越来越多的 ...

  2. 深度学习核心技术精讲100篇(三十二)-网易实时数仓实战应用

    前言 随着大数据技术的进步,各种计算框架的涌现,数据仓库相关技术难题已经从离线数仓逐渐过渡到实时数仓,越来越多的企业对数据的实时性提出了严格的要求,如何满足企业的低延时的数据需求,如何看待批量处理和实 ...

  3. 数据查询和业务流分开_滴滴实时数仓逐层剖解:实时与离线数据误差0.5%

    原标题:滴滴实时数仓逐层剖解:实时与离线数据误差< 作者介绍 潘澄,资深软件开发工程师.负责实时数据仓库建设,多年数据相关工作经验,专注数据建模.数据仓库.实时数据技术等领域. 朱峰,高级软件开 ...

  4. 实时数仓入门训练营:实时数仓助力互联网实时决策和精准营销

    简介:<实时数仓入门训练营>由阿里云研究员王峰.阿里云高级产品专家刘一鸣等实时计算 Flink 版和 Hologres 的多名技术/产品一线专家齐上阵,合力搭建此次训练营的课程体系,精心打 ...

  5. 网易实时数仓 | 流式ETL实践方案

    点击上方 "肉眼品世界"关注, 深度价值体系传递 摘要:网易游戏资深开发工程师林小铂为大家带来网易游戏基于 Flink 的流式  ETL 建设的介绍.内容包括: 业务背景 专用 E ...

  6. 实时数仓:咸鱼的实时数仓经验分享

    文章目录 简介 数仓调研 数据模型 整体架构 技术难点 其他 简介 闲鱼作为一款闲置交易 APP,在二手交易市场中是当之无愧的佼佼者.闲鱼从 2014 年诞生到现在七整年间持续增长,在这高速增长的背后 ...

  7. hive增量表和全量表_基于 Flink + Hive 构建流批一体准实时数仓

    基于 Hive 的离线数仓往往是企业大数据生产系统中不可缺少的一环.Hive 数仓有很高的成熟度和稳定性,但由于它是离线的,延时很大.在一些对延时要求比较高的场景,需要另外搭建基于 Flink 的实时 ...

  8. 数据仓库—stg层_数据仓库之Hive快速入门 - 离线实时数仓架构

    数据仓库VS数据库 数据仓库的定义: 数据仓库是将多个数据源的数据经过ETL(Extract(抽取).Transform(转换).Load(加载))理之后,按照一定的主题集成起来提供决策支持和联机分析 ...

  9. adb实时获取屏幕_实时数仓 | 你需要的是一款合适且强大的OLAP数据库(上)

    欢迎扫码关注我的公众号,回复[JAVAPDF]可以获得一份200页秋招面试题! 前言 今年有个现象,实时数仓建设突然就被大家所关注.我个人在公众号也写过和转载过几篇关于实时数据仓库的文章和方案. 但是 ...

最新文章

  1. Vscode 过滤.pyc文件
  2. 动态slimmable网络:高性能的网络轻量化方法!对比slimmable涨点5.9%
  3. c# load xml 中文报错
  4. 百度搜索与推荐引擎的云原生改造
  5. MVC全局用户验证之HttpModule
  6. kafka可靠数据传递
  7. java 0xf0_用java做一个最小的操作系统内核
  8. Android开源代码解读のOnScrollListener实现ListView滚屏时不加载数据
  9. 【问题7】集群部署时的分布式 session 如何实现?
  10. 《21天学通Java》(ppt+习题答案+源代码)
  11. 二次规划(QP)求解与序列二次规划(SQP)求解非线性规划问题
  12. qmh(qtmediahub)插件研究
  13. Git通过SSH拉取报错kex_exchange_identification
  14. 50道C/C++编程练习题 复习必备(1-10)
  15. php微信支付mch_id参数格式错误,在.net core上,Web网站调用微信支付-统一下单接口(xml传参)一直返回错误:mch_id参数格式错误...
  16. Ubuntu下利用docker安装微信
  17. 华为软件测试工程师无线产品线实习生第一次视频面试
  18. 华为云服务-申请基础云服务
  19. lbs多城市切换php源码,多省份多城市多区县切换 专业版(dicky_multicityswitch) dz插件分享,可以随意切换到其它地区分站功能...
  20. 浏览器数据库 IndexedDB

热门文章

  1. ibatis3 一对一搞定
  2. 温斯顿英语 PHP,温斯顿英语
  3. 中计算散度的函数_荷畔微风 - 在函数计算FunctionCompute中使用WebAssembly
  4. 中怎么构建ebug模式_自动挡中的“手自一体”,该怎么用?多少人把手动模式当成摆设?...
  5. 【MM模块】Blocking Reasons 冻结原因
  6. 【Classification】分类的进阶
  7. SAP上传Excel文档字符限制处理
  8. 卡号身份证过期的影响
  9. SAP发布S4/HANA 意义超过R3
  10. 新站优化最应该考虑哪些方面