导读:在上篇中,我们已经简单了解了宜人贷数据平台Genie的特点,并且掌握了数据平台发展历程的一些信息。本文作为下篇,首先我们会在其中重点讲解实时数据仓库的技术细节,之后介绍数据平台的功能。下面我们一起来了解一下这些知识吧~
三、实时数据仓库技术细节
离线数据仓库是t+1的数据,也就是说数据时效性是处理前一天的数据。一般来说离线方案同步数据的策略是每天定时同步一次数据,而且基本是同步一次全量数据,也就是说每天一个全量数据(业务库)的镜像。
除了时效性,还有一点就是镜像的数据状态只有一个,所以想知道某个值的历史变化过程,就需要走拉链表(非常耗时耗资源)。实时数据仓库的实现方式很多,但是大多都是殊途同归。实时数仓有两点特点:第一访问实时数据;第二结果能近似实时的返回。当然离线仓库如果优化的好,完成第二点也是可以实现的。思考两个问题,为什么要用实时数据?为什么要有实时数据仓库?
近几年数据工程师们在如何提高数据时效性上做了非常多的努力和尝试。推动这些实时数据同步、处理技术发展的当然还是场景与需求。中国的大互联网环境竞争非常激烈,如何提高用户转化率变得尤为关键。
用户画像、推荐系统、漏斗分析、智能营销等等数据相关的产品都离不开实时数据的处理与计算。
获取实时数据最直接的方式是直连业务库,优势明显,缺点也很明显,有些逻辑需要跨库多源查询关联的时候直接连业务库就行不通了。所以首先需要把多个源头的数据集中同步起来,这个同步过程就是一个非常具有挑战的地方,要考虑数据的时效性,对业务系统的侵入性,数据的安全性和数据的一致性等等诸多难题。
所以我们需要一个同步数据的工具,它需要有以下几个特点:
· 能够近似实时的同步生产库的数据和日志数据
· 和生产库还有应用服务器完全解耦
· 同步出来的数据可以分发到其他的存储
· 整个同步过程保证数据不丢失,或者说可以按照任意时间批量重新同步
宜信敏捷大数据团队开发的DBus和Wormhole能很好的满足以上4点。
DBus利用数据库的binlog进行数据抽取,binlog一般延迟是比较低的,这样既保证了实时的特性,也保证了对生产库的零侵入。
其实利用日志来构建一个健壮的数据系统是一个很常见的方案。Hbase利用wal来保证可靠性,MySQL主备同步使用binlog,分布式一致性算法Raft利用日志保证一致性,还有Apache Kafka也是利用了日志来实现的。
DBus很好的利用了数据库的binlog日志并且进行统一的schema转化,形成了自己日志标准,以便支持多种数据源。DBus的定义是一个商业级别的数据总线系统。它可以实时的将数据从数据源抽取发送给Kafka。
Wormhole负责将数据同步写入其他的存储之中。Kafka就成了一个真正意义上的数据总线,Wormhole支持sink端按照任意时间开始消费Kafka中的数据,这样也就能很好的进行数据回溯。
Genie的实时架构如下:
有了DBus和Wormhole我们可以很轻松的把数据从生产备库实时的同步到我们的Cassandra集群,然后再同步Presto,为用户提供SQL语言计算。
通过这个简单的架构我们高效的完成了实时数据仓库的搭建,并且实现了公司的实时报表平台和一些实时营销类的数据产品。
对于为什么会使用Presto我可以给出以下的答案:
· Presto拥有交互级别的数据计算查询体验
· Presto支持水平扩展,presto on yarn (slider)
· 支持标准SQL,并且方便扩展
· facebook, uber, netflix生产使用
· 开源语言java符合我们团队技术栈, 自定义函数
· 支持多数据源关联join 逻辑下推,Presto 可以接Cassandra, Hdfs等等
· pipelined executions - 减少了不必要的I/O开销
Presto 是m/s架构,整体细节不多说了。Presto有个数据存储抽象层,可以支持不同的数据存储上执行SQL计算。Presto提供了meta data api,data location api, data stream api,支持自开发可插拔的connector。
在我们的方案中是Presto on Cassandra的,因为Cassandra相对于Hbase来说可用性更好一些,比较适合adhoc查询场景。Hbase CAP中偏向c,Cassandra CAP中偏向a。Cassandra是一个非常优秀的数据库,方便易用,底层使用Log-Structured Merge-Tree 做存储索引的核心数据结构。
综上我大概的介绍了宜人贷的实时数据处理架构,下面我们看一下整体的数据处理架构。
整体Lambda架构speed层利用DBus和Wormhole组装成了一套实时数据总线,speedlayer可以直接支撑实时数据产品。DataLake是一个抽象的概念实现方式,我们主要是利用Hdfs + Cassandra存储数据,计算引擎主要以Hive 和Presto为主,再通过平台统一的metadata对元数据整合提供,这样就实现了一个完整的DataLake。DataLake主要的应用场景是高级灵活的分析,查询场景如 ml 。
DataLake和数据仓库的区别是,DataLake更加敏捷灵活,侧重数据的获取,数据仓库则侧重于标准、管理、安全和快速索引。
参考文献:
https://www.confluent.io/blog/using-logs-to-build-a-solid-data-infrastructure-or-why-dual-writes-are-a-bad-idea/
http://thesecretlivesofdata.com/raft/
https://engineering.linkedin.com/data-replication/open-sourcing-databus-linkedins-low-latency-change-data-capture-system
https://yq.aliyun.com/articles/195388
https://www.cnblogs.com/tgzhu/p/6033373.html
四、数据平台Genie之功能简介
整个Genie数据服务平台由7个大的子平台模块组成:
· 数据查询
· 数据知识
· 实时报表
· 数据开发
· 作业调度
· 权限管理
· 集群监控管理
下面我们来介绍一下其中的几个模块。
>>>>数据查询模块
· 用户可以查询数据仓库、数据集市、实时数据仓库的数据
· 通过对SQL的解析来实现细粒度的权限管理
· 提供多种查询引擎
· 数据导出
>>>>数据知识模块
· 元数据监控管理
· 对全公司的元数据提供管理查询功能
· 可以监控元数据变更并预警邮件
· 血缘分析查询引擎
· SQL分析引擎
· 对仓库所有的作业/表/字段进行分析
· 提供血缘分析/影响分析
>>>>数据报表模块
· 实时数据仓库
· Presto on Cassandra直连Presto
· 数百张表,实时同步(DBus+WHurl)
· 达芬奇报表平台 (达芬奇url)
· 近千张报表全公司已使用
>>>>数据开发模块
· 数据程序设计 Genie-ide
· 提供Genie-ide进行数据程序的开发
· 提供网盘进行脚本保存管理
· 可以实时测试/上线
· 数据管道
✔ 一键离线入仓
✔ 一键实时入仓
>>>>作业调度Triangle模块
· 微服务架构设计每个模块均为一个服务
· 提供restful接口可以方便二次开发与其它平台融合
· 提供健康监控作业管理后台
· 提供公共作业和私有作业
· 作业流之间逻辑隔离
· 并发控制,失败策略管理
以上是对数据平台Genie模块功能的简介,那Genie平台具体可以做哪些事情呢?
首先,它可以实现离线入仓,实时入仓 1分钟内配置完成(数据仓库,数据集市);
其次,实时入仓后可直接配置实时报表展示推送(BI分析);
第三,实时数据支持多种含有权限安全的同构对接方式:api ,kafka, jdbc(业务数据产品);
第四,一站式数据开发支持hive,spark-sql,presto on cassandra,python(数据开发);
第五,服务化的调度系统支持外部系统接入(基础技术组件)。
具体操作如何,欢迎大家试用~