今日头条数据平台实践

数据采集

日志数据采集

  • 提供客户端和服务端接入 SDK

Note: 数据时效性方面,客户端SDK的统计数据,是实时发送,还是缓存在本地定期发送?

关系数据采集

  • 用Canal接收MySQL Binlog,写入Kafka
  • 每天merge出一个全量Snapshot表

Note: 写 kafka 的逻辑没有耦合在业务代码里,还是通过 MYSQL Binlog Note: merge 的 Snapshot 表存到哪里了呀?

数据传输

  • 以Kafka作为消息总线,所有实时和离线数据的接入都经过Kafka
  • KaWa数据Dump到HDFS,供后续离线处理

Note: 如果有不同优先级别时效性要求,实时数据和离线数据需要做隔离吗? Note: 在线查询引擎的数据是存储在哪里的?处理后量级比 HDFS 小很多吗?

数据仓库

杜绝基于原始日志写脚本统计

那基于什么写统计脚本呀?数据组清洗过的 HDFS ?

OLTP 供业务系统使用
On-line Transaction Processing
OLAP 供分析使用
On-line Analytical Processing
  • 星型模型,划分出系列事实表与维度表。
  • 层次
    • ODS,原始操作数据
      • 基于HDFS Log实现成Hive外部表
      • 基于MySQL binlog滚动生成天级Snapshot表
    • DWD,数据仓库层,清洗后的明细数据,实现成 Parquet格式Hive内部表
    • MID,数据集市层,计算后的指标数据

储存

  • 数据表元信息存放在Hive metastore
  • 数据以Parquet格式存放在HDFS
    • 列式存储,支持嵌套数据结构

查询引擎

Hive, Presto, Kylin等OLAP查询引擎,支撑上层数据平台和数据仓库