互联网技术 / 互联网资讯 · 2024年3月9日

字节跳动的数据治理与埋点链路实践

本文整理自流量平台相关实践的公开分享,系统介绍了埋点内容解决方案与埋点链路治理的核心思路,揭示了如何支撑万亿级实时数据处理的能力。

在展开分析之前,先界定两个关键概念:埋点与数据治理。埋点描述的是用户在应用内触发的一系列行为(如点击、滑动等),基于这些行为可以进行行为分析、个性化推荐与精准营销等。数据治理是在数据全生命周期内对数据进行管理的原则性方法,目标是在安全、及时、准确、可用、易用之间取得平衡。治理不仅仅针对现有存量数据,更重要的是对增量数据的治理,确保从源头开始数据就保持正确。

接下来,聚焦于如何治理埋点数据的实践。

流量平台概览

流量平台是公司内部统一的埋点平台,覆盖数据定义、采集、加工、应用与治理等全生命周期。目前覆盖超过 2000 个应用,管理埋点事件数量约 20 万,日生成埋点数据量达到万亿级别,年度成本节省亦可观。

平台产品结构大体分为以下几个部分:

  • 埋点内容:涵盖埋点的设计、开发、验证、上线、运维与下线等全生命周期。
  • 埋点治理:针对存量数据的治理,包含成本与 SLA 等维度。
  • 链路侧:涵盖埋点的收集、处理与订阅,支持多端数据收集并实现下游数据订阅。
  • 链路根基:自研的动态实时计算平台,支撑亿级级别实时数据处理的核心技术。

埋点内容解决方案

埋点内容旨在管理埋点的生命周期。其中,中心的埋点模型至关重要,设计好埋点模型直接影响后续的设计、开发、测试与使用体验。

两类主要用户群体的痛点如下:

  • 埋点消费者:查找困难、使用成本高、数据可信度不确定。
  • 埋点生产者:生产链路漫长、模型落地困难、缺乏工具支持。

解决思路强调第一站在于埋点设计。埋点设计作为核心输入,可以将需求梳理得清晰明确;而埋点录入则是第二手资料,容易丢失且难以覆盖全部约束。

为提升设计效率,系统引入资产辅助设计,使高质量的数据定义更易于被创建与评审。通过演示环节,展示了在设计阶段即可通过统一编辑工具和模版快速生成代码、进行类型校验与切换。

埋点测试与质量保障

埋点测试相较于传统 QA 更关注数据本身。系统通过埋点设计规则对类型、取值、必填等进行自动化验证,并可一键生成测试报告。

测试流程通常包含:基于约束规则生成测试用例、在真实环境中通过手机端操作触发埋点、平台实时接收埋点数据、规则引擎自动匹配与执行,最终将结果推送至浏览器体现,并产出报告供研发与验收使用。

存量埋点治理与分级

在产生大量埋点后,需对存量数据进行治理,关注 SLA、成本、合规与数据质量等维度。原因在于:并非所有数据都重要或有用,某些埋点在下线前应及时停止上报以降低成本;同时,合规要求在不断变化,数据治理也需随之调整。

治理痛点包括:数据量极大、实时性要求高、成本攀升、SLA 变慢、隐私保护压力增大等。治理实施方常面临对数据的恐惧、担忧和认知不足等挑战。

基于用户需求,治理分为多层次:自动识别埋点价值、对分级与下线进行流程化管理;构建可数字化、可量化的治理看板与成本核算;以血缘图谱实现对实时统计、离线报表、行为分析与推荐系统的实时决策支撑;以及从应用端到数据仓的全流程兜底与稳健性保障。

治理实现要点

埋点分级与无用埋点识别是核心环节。埋点血缘不仅仅是点对点的关系,而是内容对点的血缘,需要追踪某张表中哪些字段是有用的信息。这一领域具有独立性,需要多维度能力协同实现:

  • 离线处理:通过 SQL 解析计算埋点与离线表的血缘。
  • 实时处理:利用链路优势掌握实时分流血缘。
  • 即时分析与推荐血缘耦合:与行为分析、SQL 查询系统等打通。

在埋点分级上,以性能埋点为切入点,配套合适的 SLA 与 TTL。

埋点链路解决方案

下面聚焦于埋点链路的设计与挑战,用户通常需要明确的数据类型、数据粒度及使用场景,例如是否用于实时报表、行为分析或推荐系统等。

主要挑战包括:在大数据量下的稳定性、对低延迟实时处理的需求,尤其是对推荐场景的实时性要求。

链路分级与下线的设计包括:

  • 数据接入:提供全栈 SDK 接入,SDK 内置管控机制,合规要求下可直接在客户端丢弃不需要上报的埋点;
  • 数据收集:提供 HTTP 接口,将数据写入消息队列,并对高并发埋点进行聚合,整合成 applog 数据上报;
  • 实时处理:自研实时数据处理平台将 applog 解析为埋点数据,进行数据加工并订阅推送到各应用。

实时处理平台的核心目标是快速处理海量数据并具备动态化能力,以避免重启造成的服务中断,并支持在不改变现有逻辑的情况下实现热更新。该引擎支持多 runtimes(如 Flink、PyTorch 等)并通过声明式模型对业务逻辑进行统一封装,使不同团队能够基于视图表达自定义业务场景。

数据处理模型与拓扑

在数据进入系统后,首先进行过滤与清洗,符合条件的数据进入下游处理。系统采用基于语言热加载的模型执行,确保可动态更新逻辑而无需重启。

拓扑方面,随着业务快速扩展,新增业务无需中断下游处理。对于数据源,如 Kafka,系统通过分层策略和分区管理降低网络与计算成本,同时通过分级写入策略实现 TTL 与 SLA 的差异化管理。

如需进一步了解,请关注相关公开实践的后续更新。 [[[IMG_1]]][[[IMG_2]]][[[IMG_3]]]