前言
从Bill Inmon在1991年提出数据仓库的概念起,至今已有三十年的时间。在这期间人们所面对的数据,以及处理数据的方法都发生了翻天覆地的变化。起初数据仓库系统运行在单机或小型集群之上,程序以批处理方式周期性运行ETL作业。最为常见的执行方式是在每天业务低峰期处理前一天产生的业务数据,即所谓的T+1模式。后来随着互联网和移动终端等应用的普及,需要处理的数据量不断增大,出现了大数据的概念,以Hadoop及其生态圈组件为代表的新一代分布式大数据处理平台逐渐流行。近年来随着业务领域的不断拓展,人们对数据分析的实时性要求越来越高,离线批处理方式所产生的延时已不能满足需求。以Hadoop为代表的分布式框架并没有给出实时计算解决方案,于是便出现了Storm、Spark Streaming、Flink等实时计算框架,可提供秒级的响应时间,在此基础上实时数据仓库应运而生。
作为DBA,我更倾向于采用一种不编程、组件少、门槛低、易上手、纯SQL,并能处理包含历史全量数据的方案,用来实现实时数据仓库。不可否认,SQL仍然是数据库、数据仓库中最常使用的开发语言,也是传统数据库工程师或DBA的必会语言,从它出现至今一直被广泛使用。首先,SQL有坚实的关系代数作为理论基础,经过几十年的积累,查询优化器已经相当成熟。再者,对于开发者,SQL作为典型的非过程语言,其语法相对简单,但语义却相当丰富。据统计95%的数据分析问题都能用SQL解决,这是一个相当惊人的结论。
本书介绍的实现方案能满足以上所有要求,涉及的具体技术包括:MySQL主从复制,保证为业务系统提供可靠的数据库服务,并提供数据来源;Canal Server实时获取增量MySQL binlog,并将其传入Kafka消息队列;Kafka将消息持久化,同时提供可伸缩、高吞吐的消息服务;Canal ClientAdapter负责消费Kafka中的消息,将数据流传输到Greenplum数据库;Greenplum作为数据仓库系统,提供实时ETL功能,自动维护操作数据存储(ODS)、维度表与事实表。
Greenplum分布式数据库采用无共享(Shared-Nothing)的大规模并行处理(MPP)架构,能充分利用集群的硬件资源,将并行处理发挥到极致。Greenplum具有可选存储模式、事务支持、并行查询与数据装载、容错与故障转移、数据库统计、过程化语言扩展等方面的功能特性,正是它们支撑Greenplum成为一款理想的分析型数据库产品。