### 携程机票数据仓库建设之路
#### 一、前言
随着信息技术的迅猛发展,数据成为支撑企业决策和优化业务流程的关键要素。携程机票数据仓库建设之路,旨在通过构建高效、稳定的数据仓库系统来应对大数据时代的挑战,实现数据的有效管理和利用。
#### 二、携程机票数据仓库技术栈
##### 2.1 数仓技术演进历史
携程机票部门的数据仓库始于2008年,最初采用的是传统的SQLServer进行数据存储,并配合Informatica和Kettle进行数据处理,使用SAP BO进行数据模型设计和报表定制。但随着业务规模的扩大和技术的进步,原有的数据仓库解决方案逐渐暴露出不足之处,尤其是面对海量数据时的性能瓶颈问题变得尤为突出。
2014年,携程内部建立了Hadoop集群,并引入了Zeus调度平台和DataX数据同步工具,这标志着携程机票数据仓库向分布式大数据环境的转型。随后,为了满足实时监控和流量回放的需求,携程机票部门于2016年部署了ElasticSearch,用以实时存储从Kafka同步的日志数据。同年,还引入了Facebook开源的Presto查询引擎,显著提升了针对adhoc查询的性能表现。
为了进一步提高数据仓库的性能和支持可视化运营平台,携程机票部门在2018年引入了ClickHouse和CrateDB作为新的存储和查询引擎。特别是引入CrateDB之后,对于亿级数据量的表进行四维度聚合的时间大幅缩短至4秒左右。
此外,实时数据处理技术也经历了从Esper、Storm到Spark Streaming和Flink的迭代,最终逐渐收敛至Flink作为主流实时数据处理框架。
##### 2.2 当前技术栈
目前携程机票的数据仓库主要基于以下几种类型的数据:
1. **业务数据**:主要存储在MySQL和SQLServer中,这些关系型数据库承载着各种生产服务的业务数据。
2. **基础数据**:同样存储在MySQL和SQLServer中,但在生产应用时通常会使用中心化缓存(如Redis)或本地缓存。
3. **日志数据**:此类数据的特点是只追加不修改,由于其高吞吐量特性,通常使用消息队列Kafka进行暂存。
在数据同步方面,携程机票采用了不同的工具和技术,例如:
- **DB到Hive的同步**:使用Taobao开源的DataX,支持多种数据源之间的同步。
- **Kafka到Hive的同步**:起初使用Camus,但由于性能问题,携程机票自行开发了hamal,用于Kafka到Hive的数据同步。
- **实时同步**:主要使用ElasticSearch或CrateDB,通过Flink实现。
数据进入数据仓库后,会经过一系列的数据清洗、整合和聚合计算过程,最终数据会被导出到其他载体,整个流程由Zeus调度平台统一管理。
##### 2.3 实时VS离线
携程机票数据仓库同时支持实时和离线两种处理方式。实时处理主要用于需要即时反馈的场景,如实时监控和流量分析等;而离线处理则更适用于大规模的数据处理和长期趋势分析。这两种处理方式相辅相成,共同构成了携程机票数据仓库的核心能力。
#### 总结
携程机票数据仓库的建设经历了一个不断演进的过程,从最初的单一技术栈到如今融合了多种先进技术和工具的数据仓库体系。这一转变不仅提高了数据处理的效率和准确性,也为携程机票提供了更为强大的数据分析能力和决策支持能力。未来,随着大数据技术的持续发展,携程机票数据仓库将继续探索新的技术方向,以适应更加复杂的业务需求和挑战。