来电科技:基于 Flink + Hologres 的实时数仓演进之路
简介: 本文将会讲述共享充电宝开创企业来电科技如何基于 Flink + Hologres 构建统一数据服务加速的实时数仓
作者:陈健新,来电科技数据仓库开发工程师,目前专注于负责来电科技大数据平台离线和实时架构的整合。
深圳来电科技有限公司(以下简称 “来电科技”)是共享充电宝行业开创企业,主要业务覆盖充电宝自助租赁、定制商场导航机开发、广告展示设备及广告传播等服务。来电科技拥有业内立体化产品线,大中小机柜以及桌面型,目前全国超过 90% 的城市实现业务服务落地,注册用户超 2 亿人,实现全场景用户需求。
一、大数据平台介绍
1. 发展历程
来电科技大数据平台的发展历程主要分为以下三个阶段:
1)离散 0.X Greenplum
为什么说离散?因为之前没有一个统一的大数据平台来支持数据服务,而是由每个业务开发线自行取数或者做一些计算,并用一个低配版的 Greenplum 离线服务来维持日常的数据需求。
2)离线 1.0 EMR
之后架构升级为离线 1.0 EMR,这里的 EMR 指的是阿里云由大数据组成的弹性分布式混合集群服务,包括 Hadoop、HiveSpark 离线计算等常见组件。
阿里云 EMR 主要解决我们三个痛点:
- 一是存储计算资源的水平可扩展;
- 二是解决了前面各个业务线异构数据带来的开发维护问题,由平台统一清洗入仓;
- 三是我们可以建立自己的数仓分层体系,划分一个主题域,为我们的指标系统打好基础。
3)实时、统一 2.0 Flink + Hologres
当前正经历的 “Flink + Hologres” 实时数仓,这也是本文分享的核心。它为我们大数据平台带来了两个质的改变,一是实时计算,二是统一数据服务。基于这两点,我们加速知识数据探索,促进业务快速发展。
2. 平台能力
总的概括来说,2.0 版本的大数据平台提供了以下能力:
- 数据集成
平台现在支持使用实时或者离线的方式集成业务数据库或业务数据的日志。
- 数据开发
平台现已支持基于 Spark 的离线计算以及基于 Flink 的实时计算。
数据服务
数据服务主要由两部分组成:
- 一部分是由 Impala 提供的分析服务和即席分析的能力;
- 另一部分是 Hologres 提供的针对业务数据的交互式分析能力。
- 数据应用
同时平台可以直接对接常见的 BI 工具,业务系统也能快速地集成对接。
3. 取得成就
大数据平台提供的能力给我们带来了不少成就,总结为以下五点:
- 横向扩展
大数据平台的核心就是分布式架构,这样我们能够低成本地水平扩展存储或者计算资源。
- 资源共享
可以整合所有服务器可用的资源。以前的架构是每个业务部门自己维护一套集群,这样会造成一些浪费,难以保证可靠性,而且运费成本较高,现在由平台统一调度。
- 数据共享
整合了业务部门所有的业务数据以及业务日志等其他异构数据源数据,由平台统一清洗对接。
- 服务共享
数据共享之后就由平台统一对外输出服务,各个业务线无需自行重复开发,就能快速得到平台提供的数据支撑。
- 安全保障
由平台提供统一的安全认证等授权机制,可以做到对不同人进行不同程度的细粒度授权,保证数据安全。
二、企业业务对数据方面的需求
随着业务的快速发展,构建统一的实时数仓迫在眉睫,综合 0.x、1.0 版本的平台架构,综合业务的现在发展和未来趋势判断,构建 2.x 版本数据平台的需求主要集中在以下几个方面:
- 实时大屏
实时大屏需要替换旧的准实时大屏,采用更可靠、低延迟的技术方案。
- 统一数据服务
高性能、高并发和高可用的数据服务成为企业数字化转型统一数据门户的关键,需要构建一个统一的数据门户,统一对外输出。
- 实时数仓
数据时效性在企业运营中的重要性日益凸现,需要响应更快更及时。
三、实时数仓和统一数据服务技术方案
1. 整体技术架构
技术架构主要分为四个部分,分别是数据 ETL、实时数仓、离线数仓和数据应用。
- 数据 ETL 是对业务数据库和业务日志进行实时处理,统一使用 Flink 实时计算,
- 实时数仓中数据实时处理后进入 Hologres 存储与分析
- 业务冷数据存储在 Hive 离线数仓,并同步到 Hologres 做进一步的数据分析处理
- 由 Hologres 统一对接常用的 BI 工具,如 Tableau、Quick BI、DataV 和业务系统等。
2. 实时数仓数据模型
如上所示,实时数仓和离线数仓有一些相似的地方,只不过少一些其它层的链路。
- 第一层是原始数据层,数据来源有两种类型,一种是业务库的 Binlog,第二种是服务器的业务日志,统一用 Kafka 作为存储介质。
- 第二层是数据明细层,将原始数据层 Kafka 里面的信息进行 ETL 提取,作为实时明细存储至 Kafka。这样做的目的是为了方便下游不同消费者同时订阅,同时方便后续应用层的使用。维表数据也是通过 Hologres 存储,来满足下面的数据关联或者条件过滤。
- 第三是数据应用层,这里除了打通 Hologres,还使用了 Hologres 对接了 Hive,由 Hologres 统一提供上层应用服务。
3. 整体技术架构数据流
下面的数据流图可以具象加深整体架构的规划和数仓模型整体的数据流向。
从图中可以看出,主要分为三个模块:
- 第一个是集成处理;
- 第二个是实时数仓;
- 第三块是数据应用。
从数据的流入流出看到主要的核心有两点:
- 第一个核心是 Flink 的实时计算:可以从 Kafka 获取,或者直接 Flink cdt 读取 MySQL Binlog 数据,或者直接再写回 Kafka 集群,这是一个核心。
- 第二个核心是统一数据服务:现在统一数据服务是由 Hologres 完成,避免数据孤岛产生的问题,或者一致性难以维护等,也加速了离线数据的分析。
四、具体实践细节
1. 大数据技术选型
方案执行分为两个部分:实时与服务分析。实时方面我们选择了阿里云 Flink 全托管的方式,它主要有以下几方面优点:
- 状态管理与容错机制;
- Table API 和 Flink SQL 支持;
- 高吞吐低延迟;
- Exactly Once 语义支持;
- 流批一体;
- 全托管等增值服务。
服务分析方面我们选择了阿里云 Hologres 交互式分析,它带来了几点好处:
- 极速响应分析;
- 高并发读写;
- 计算存储分离;
- 简单易用。
2. 实时大屏业务实践落地
上图为业务实时大屏新旧方案对比。
以订单为例,旧方案中的订单是从订单从库通过 DTS 同步到另一个数据库,这虽然是实时的,但是在计算与处理这方面,主要是通过定时任务,比如调度间隔时间设为 1 分钟或者 5 分钟来完成数据的实时更新,而销售层、管理层需要更实时地掌握业务动态,,因此并不能算真正意义上的实时。除此之外,响应慢且不稳定也是很大的问题。
新方案采用的是 Flink 实时计算 + Hologres 架构。
开发方式完全是可以利用 Flink 的 SQL 支持,对于我们之前的 MySQL 计算开发方式,可以说是一个无缝的迁移,实现快速落地。数据分析和服务统一使用 Hologres。还是以订单为例,比如今日订单营收额,今日订单用户数或者今日订单用户量,随着业务多样性的增加,可能需要增加城市维度。通过 Hologres 的分析能力,可以完美支撑营收额、订单量、订单用户数以及城市维度的一些指标做快速展示。
3. 实时数仓和统一数据服务实践落地
以某块业务场景为例,比如量级比较大的业务日志,日均数据量在 TB 级别。下面先来分析一下旧方案的痛点:
- 数据时效性差:由于数据量较大,所以在旧方案中使用了每小时离线调度的策略进行数据计算。但是该方案时效性较差,无法满足众多业务产品的实时需求,例如硬件系统需要实时知道设备当前状态,如告警、错误、空仓等,以及时做出相应的决策行动。
- 数据孤岛:旧方案使用 Tableau 对接大量业务报表,报表用于分析过去一个小时或者过去一天,设备上报有多少数量,哪些设备上报出现异常等。针对不同的场景,会将之前通过 Spark 离线计算的数据,再备份存储到 MySQL 或者 Redis 上。这样就多套系统,形成数据孤岛,这些数据孤岛对平台维护是一个巨大的挑战。
现在通过 2.0 Flink+Hologres 架构,可以将业务日志进行改造。
- 以前 TB 级别的日志量在 Flink 高分子低延迟的计算框架下完全没有压力。例如之前的 flume HDFS 到 Spark 的一个链路直接被废弃,取而代之的是 Flink,我们只需要维护一个 Flink 的计算框架即可。
- 设备状态数据采集的时候都是一些非结构的数据,需要对数据进行清洗,之后再返回 Kafka,因为消费者可能是多样化的,这样可以方便下游的多个消费者同时订阅。
- 在刚才的场景中,硬件系统需要高并发、实时查询上千万的设备(充电宝)状态,对服务能力的要求较高。通过 Hologres 提供高并发读写能力,关联状态设备建立主键表,可以实时更新状态,满足 CRM 系统对设备(充电宝)的实时查询。
- 同时在 Hologres 还会存最近的热点明细数据,直接提供对外服务。
4. 业务支撑效果
通过 Flink+Hologres 的新方案,我们支撑了三大场景:
- 实时大屏
业务层面更高效地迭代多样化需求,同时降低了开发、运维维护开销。
- 统一数据服务
通过一个 HSAP 系统来实现服务/分析一体化,避免数据孤岛以及一致性、安全性等问题。
- 实时数仓
满足企业运营中对于数据时效性越来越高的要求,秒级响应。
五、未来规划
伴随着业务的迭代,我们未来在大数据平台的规划主要有两点:流批一体和完善实时数仓。
- 现在的大数据平台总的来说还是离线架构和实时架构混合,后续会废弃冗余的离线代码架构,借助 Flink 的流批一体统一计算引擎。
- 另外,我们目前只迁移了部分业务,所以会参考之前已经完善的离线数仓指标系统体系,来满足我们现在的实时数仓建设,全面迁移到 2.0 Flink + Hologres 架构上。
通过未来的规划,我们希望同 Flink 全托管和 Hologres 一起共建更加完善的实时数仓,但也在此对其有着更近一步的需求:
1. 对 Flink 全托管的需求
Flink 全托管中的 SQL 编辑器编写 FlinkSQL 作业很高效方便,并且也提供了很多常见的 SQL 上下游 Connector 满足开发需求。但是仍有一些需求希望Flink全托管在后续的迭代中支持:
- SQL 作业版本控制和兼容性监测;
- SQL 作业支持 Hive3.X 集成;
- DataStream 作业打包更方便、资源包上传速度更快;
- Session 集群模式部署的任务支持自动调优功能。
2. 对 Hologres 交互式分析的需求
Hologres 不仅能够支持高并发地实时写入和查询,并且兼容 PostgreSQL 生态,方便接入使用统一数据服务。但是仍有一些需求希望 Hologres 能在后期迭代中支持:
- 支持热升级操作,减少对业务的影响;
- 支持数据表备份、支持读写分离;
- 支持加速查询阿里云 EMR-Hive 数仓;
- 支持对用户组进行计算资源管理。
原文链接
本文为阿里云原创内容,未经允许不得转载。
来电科技:基于 Flink + Hologres 的实时数仓演进之路的更多相关文章
- 腾讯基于 Flink 的实时流计算平台演进之路
https://mp.weixin.qq.com/s/MGnG_Mpf6CUQWLJHvmWqLA
- 美团点评基于 Flink 的实时数仓建设实践
https://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651749037&idx=1&sn=4a448647b3dae5 ...
- (转)用Flink取代Spark Streaming!知乎实时数仓架构演进
转:https://mp.weixin.qq.com/s/e8lsGyl8oVtfg6HhXyIe4A AI 前线导读:“数据智能” (Data Intelligence) 有一个必须且基础的环节,就 ...
- HBase实战 | 知乎实时数仓架构演进
https://mp.weixin.qq.com/s/hx-q13QteNvtXRpNsE5Y0A 作者 | 知乎数据工程团队编辑 | VincentAI 前线导读:“数据智能” (Data Inte ...
- 基于 Flink 的实时数仓生产实践
数据仓库的建设是“数据智能”必不可少的一环,也是大规模数据应用中必然面临的挑战.在智能商业中,数据的结果代表了用户反馈.获取数据的及时性尤为重要.快速获取数据反馈能够帮助公司更快地做出决策,更好地进行 ...
- 基于Flink构建全场景实时数仓
目录: 一. 实时计算初期 二. 实时数仓建设 三. Lambda架构的实时数仓 四. Kappa架构的实时数仓 五. 流批结合的实时数仓 实时计算初期 虽然实时计算在最近几年才火起来,但是在早期也有 ...
- OPPO数据中台之基石:基于Flink SQL构建实数据仓库
小结: 1. OPPO数据中台之基石:基于Flink SQL构建实数据仓库 https://mp.weixin.qq.com/s/JsoMgIW6bKEFDGvq_KI6hg 作者 | 张俊编辑 | ...
- flink实时数仓从入门到实战
第一章.flink实时数仓入门 一.依赖 <!--Licensed to the Apache Software Foundation (ASF) under oneor more contri ...
- 基于 Kafka 的实时数仓在搜索的实践应用
一.概述 Apache Kafka 发展至今,已经是一个很成熟的消息队列组件了,也是大数据生态圈中不可或缺的一员.Apache Kafka 社区非常的活跃,通过社区成员不断的贡献代码和迭代项目,使得 ...
- 基于 ByteHouse 构建实时数仓实践
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 随着数据的应用场景越来越丰富,企业对数据价值反馈到业务中的时效性要求也越来越高,很早就有人提出过一个概念: 数据的 ...
随机推荐
- linux中ping命令停不下来解决方案
linux的 ping 命令和windows不一样.windows默认只发送四个包的. 你可以使用ping -c 4 [ip/域名]这种方式来实现你想要的. linux控制台程序一般强制终止都是Ctr ...
- linux怎么添加用户
在Linux中添加普通新用户 超级用户(也称为"root")是一个具有修改系统中任何文件权力的特别账号.在日常工作中,最好不要使用超级用户账号进入系统,因为任何错误操作都可能导致巨 ...
- 25_H.264编码
本文主要介绍一种非常流行的视频编码:H.264. 计算一下:10秒钟1080p(1920x1080).30fps的YUV420P原始视频,需要占用多大的存储空间? (10 * 30) * (1920 ...
- 记录--7个Js async/await高级用法
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 7个Js async/await高级用法 JavaScript的异步编程已经从回调(Callback)演进到Promise,再到如今广泛使 ...
- OpenLayers 点击显示经纬度Demo
这里给大家分享我在OpenLayers 地图开发工作中总结出的一下代码和注意点,希望对大家有所帮助 效果如下: 核心代码展示:附带讲解注释 var map = new ol.Map({ // 初始化地 ...
- WPF MVVM 集合内容更改时如何添加操作,触发通知
用过mvvm设计WFP程序的人都知道,在我们mvvm中有一个非常重要的接口叫做 INotifyPropertyChanged 这个接口的主要作用是用于触发属性更改时向我们xaml中绑定此属性值的控件发 ...
- KingbaseES数据库-生产环境慢查询性能优化案例
一.背景 在生产环境中,慢查询不仅影响系统.业务的正常处理.同时严重影响用户的使用感受. 二.表相关信息 2.1 表结构及索引: Table "yktcore.t_dtl_ymt" ...
- 下载标准国民经济行业分类与代码GB/T 4754-2011,存入mysql数据库
戳链接下载:https://download.csdn.net/download/weixin_45556024/34913490 或关注公众号[靠谱杨阅读人生]回复[行业]获取. 整理不易,资源fu ...
- 05 Ajax请求(扩展,延伸)
05 Ajax请求(扩展,延伸) 首先, 我们用Flask创建一个后台服务器(自己做网站了哈) 目录结构: 服务端: from flask import Flask, render_template, ...
- #莫比乌斯反演,杜教筛#洛谷 6055 [RC-02] GCD
题目 分析 如果令 \(u=pj,v=qj\) ,那么本质上就是让 \(gcd(i,u,v)==1\) 那就是 \(\sum_{i=1}^n\sum_{u=1}^n\sum_{v=1}^n[gcd(i ...