技术架构
- 整体架构流程
- 数据处理过程涵盖数据接入、传输、存储、查询等环节,遵循常见的数据平台处理原则。
- 整体架构包括数据接入子系统、ETL 子系统、批量计算子系统、查询引擎、前端展示子系统、存储子系统、调度器、Monitor 元数据子系统等,各子系统相互协作,确保数据的顺畅流转与高效处理。
- 数据采集子系统
- 前端操作采集:支持全埋点、可视化埋点和代码埋点三种方式。全埋点采集所有可采集控件操作,可视化埋点通过可视化选择采集,代码埋点则通过调用 SDK 接口发送数据。以京东提交订单页面为例,全埋点能知点击按钮,可视化埋点能知提交订单,代码埋点可获取更多自定义属性。神策分析以代码埋点为主,结合可视化埋点和全埋点,并针对 SDK 数据发送策略优化,如本地缓存、特定网络下发送、多种触发发送条件及强制发送接口等。
- 后端日志采集:相比前端采集,具有传输时效性强、数据可靠性高、能获取更丰富信息等优势,建议优先采集后端日志,并提供相应 SDK 和工具。
- 业务数据采集:针对供销存等业务数据,提供导入工具和 API 完成数据导入。
- ID - Mapping:通过自定义用户 ID 和 track_signup 接口实现不同数据源用户行为打通,目前采用一对一映射方案。
- 数据接入子系统:采用 Nginx 接收 API 数据并写入日志,Extractor 模块读取处理日志并发布到 Kafka,同时进行数据格式校验等操作,Kafka 作为缓冲和备份,并对外提供 API。
- 数据模型:采用 Event + User 模型。Event 描述用户行为,由用户 ID、Event 名称和自定义属性组成,以追加为主,有有限删除能力;User 描述用户特征,由用户 ID 和自定义属性组成,可任意修改,其属性来源多样。
- 数据导入与存储
- 存储优化:分为 WOS(Kudu)和 ROS(Parquet),Kudu 用于实时写入,达到阈值后转换为 Parquet 格式存储,Parquet 按日期和事件名称分区,文件内有序并含索引,以减少扫描量。
- 关键模块:包括 KafkaConsumer 负责从 Kafka 写入 Kudu,KuduToParquet 实现 Kudu 到 Parquet 转换,LoaderDemon 进行元数据操作,Merger 定期合并 Parquet 碎文件。
- 数据查询子系统:WebServer 接收查询请求并转发给 QueryEngine,QueryEngine 翻译成 SQL 在 Impala 中查询,通过多种优化手段保证秒级查询性能,如优化查询模型、使用聚合函数替代 Join、精细缓存、提供抽样功能等。
私有化部署
其他
读写分离
读写分离——WOS 文件需要定期转换为 ROS 文件,同时因为 ROS 在数据仓库当中一般是分为多个 Partition 存在,所以一个 WOS 可能转化为多个 ROS。转化的过程需要是原子操作,因为对上层查询引擎来说,同一时刻,同样的数据只能有一份。
Loading...