腾讯实时数据采集系统概况
如上图,腾讯在大数据处理方面主要有两个平台:一个是负责离线数据处理的TDW(Tencent distributed Data Warehouse,腾讯分布式数据仓库),主要进行如产品日周月报表、小时/天粒度的数据分析、数据挖掘等数据应用;另一个是负责实时计算的TRC(Tencent Real-time Computing,腾讯实时计算平台),负责提供秒/分钟级的实时计算。
腾讯实时数据采集系统(TDBank,Tencent Data Bank),是业务数据源和数据处理系统之间的桥梁,将数据处理系统同数据源解耦,为后端的TDW及TRC提供数据支持。
TDBank具有以下一些特性:
灵活:支持DB/文件/消息等多种数据接入方式,支持DB全量和增量读取方式
低成本:支持公网传输,数据压缩
高可靠:使用安全协议确保数据安全,9999%一致性,重点数据可达零误差
低时延:流式数据处理,毫秒级消息分发
可复用: 7天数据缓存,消息可被多次订阅
快捷:与后端的离线及在线数据处理系统自动对接
TDBank系统架构
TDBank业务管理系统
主要负责数据配置管理、系统部署及运行状态管理、元数据管理、数据安全控制等工作。
数据接入层
数据接入层包括Agent及数据接入中心两部分。数据接入层首先是解决“Variety”的问题,主要适配各种各样的数据源,获取到各种形式的业务数据,比如日志数据文件、TCP/UDP消息、数据库记录和HTTP Request等,TDBank提供不同的插件Agent来支持,同时,也提供Bus API给有开发能力的团队定制个性化的Agent.
其次,数据接入层是要解决“Velocity”的问题,将数据实时地收集起来。对于日志数据文件,使用文件tail方式获取数据,这样就能在文件数据写入完成的同时完成数据收集工作,能尽可能的降低数据获取的延时;对于数据库记录数据,我们使用基于binlog的数据库实时同步技术,近实时获取发生变更的数据库记录数据。
另外,接入层提供公网传输、可选安全协议传输、数据打包及压缩、负载均衡、失败重试、重复数据过滤等多种功能。总之,接入层提供的是一种高效、便捷、安全、低成本的接入解决方案。
数据存储中心
数据存储中心主要是作为接入层的数据持久化载体,将接入的各种形式的数据存储到磁盘上。数据缓存层首先会面对“Velocity”的问题,数据需要持久化到磁盘上(而不是传统意义上的使用内存做缓存),存取速度是一个关键问题,我们使用“文件顺序写+磁盘Raid”来达到高效的数据持久化。另外一方面会面对“Volume”的问题,面对大量的数据,需要使用分布式的集群作为数据缓存,同时使用zookeeper对集群进行协调,以支持集群的水平扩展以及负载均衡。
我们自主研发的消息中间件Tube,毫秒级送达,提供7天缓存,消息可多次重复订阅等核心功能,另外,还支持消息主动推送。目前Tube每日新增数据条数解决1万亿,大小超过200T.
数据分拣中心
数据分拣中心Sort,面对“Velocity”和“Variety”的问题。我们采用插件化的形式来支持多种形式的数据预处理过程。对于离线系统来说,一个重要的功能是将实时采集到的数据进行分类存储,需要按照某些维度(比如某个key值+时间等维度)进行分类存储;同时存储文件的粒度(大小/时间)也是需要定制的,使离线系统能以指定的的粒度来进行离线计算。对于在线系统来说,常见的预处理过程如数据过滤、数据采样和数据转换等。同时数据缓存层会对缓存的数据进行生命周期管理,缓存存储的数据保留时间有限,数据的长期存储主要依赖数据存储层。
我们支持多种存储引擎。我们使用HDFS作为离线文件的存储载体,同时,我们对HDFS做了改造,解决了namenode单点问题,因此,我们提供的是可靠的数据存储服务。另外,我们也支持HBase、PostgreSQL、MySQL等等多种存储引擎,适应不同的业务场景。
TDBank应用情况
TDBank覆盖了腾讯所有业务事业群,TDBank为包括微信、手Q、Qzone、财付通、游戏、网站、视频、广点通在内的所有腾讯的重点产品的实时计算或离线分析提供数据支持。TDBank接入了超过300个产品,超过1万个业务接口表,每天接入的业务数据将近1万亿条,大小超过200T,而且,业务量还在按月20%在持续增长中。
结束语
大数据的“3V”特性给数据采集带来了很多挑战,TDBank则是为了解决这几个基本问题,为数据处理平台提供数据支持。在实践中,我们面临了如数据一致性、跨网传输等技术难题,我们也面临了业务复杂带来的数据管理的复杂性的问题,这些,我们将在后续的系列文章中详细论述,敬请留意。