܄

案例解析:携程实时用户数据采集与分析系统

【数据猿导读】 传统的基于 PC 网站和访问日志的用户数据采集系统已经无法满足实时分析用户行为、实时统计流量属性和基于位置服务(LBS)等方面的需求。

案例解析:携程实时用户数据采集与分析系统

一、携程实时用户数据采集系统设计实践

随着移动互联网的兴起,特别是近年来,智能手机、pad 等移动设备凭借便捷、高效的特点风靡全球,同时各类 APP 的快速发展进一步降低了移动互联网的接入门槛,越来越多的网民开始从传统 PC 转移至移动终端上。但传统的基于 PC 网站和访问日志的用户数据采集系统已经无法满足实时分析用户行为、实时统计流量属性和基于位置服务(LBS)等方面的需求。

我们针对传统用户数据采集系统在实时性、吞吐量、终端覆盖率等方面的不足,分析了在移动互联网流量剧增的背景下,用户数据采集系统的需求,研究在多种访问终端和多种网络类型的场景下,用户数据实时、高效采集的方法,并在此基础上设计和实现实时、有序和健壮的用户数据采集系统。此系统基于 Java NIO 网络通信框架(Netty)和分布式消息队列(Kafka)存储框架实现,其具有实时性、高吞吐、通用性好等优点。

1. 技术选型和设计方案:

一个典型的数据采集分析统计平台,对数据的处理,主要由如下五个步骤组成:

携程_用户数据_分析系统-1

图 1(数据平台处理流程)

其中,数据采集步骤是最核心的问题,数据采集是否丰富、准确和实时,都直接影响整个数据分析平台的应用的效果。本论文关注的步骤主要在数据采集、数据传输和数据建模存储这三部分。

为满足数据采集服务实时、高效性、高吞吐量和安全性等方面的要求,同时能借鉴互联网大数据行业一些优秀开源的解决方案,所以整个系统都将基于 Java 技术栈进行设计和实现。整个数据采集分析平台系统架构如下图所示:

携程_用户数据_分析系统-2

图 2(数据采集分析平台系统架构)

其中整个平台系统主要包括以上五部分:客户端数据采集 SDK 以 Http(s)/Tcp/Udp 协议根据不同的网络环境按一定策略将数据发送到 Mechanic(UBT-Collector) 服务器。服务器对采集的数据进行一系列处理之后将数据异步写入 Hermes(Kafka) 分布式消息队列系统。为了关联业务服务端用户业务操作埋点、日志,业务服务器需要获取由客户端 SDK 统一生成的用户标识(C-GUID),然后业务服务器将用户业务操作埋点、日志