01 概览

随着数字化转型的来临,企业对于数据服务的实时化需求日益增长,在大规模数据和复杂场景的情况下,Flink在实时计算数据链路中扮演着极为重要的角色,本文介绍了网盘如何通过 Flink 构建实时计算引擎,从而提供高性能、低延迟、稳定的实时计算能力。

02 百度网盘实时计算演进

2.1 百度网盘实时计算演进历程

百度网盘基于Flink的实时计算实践_数据

△百度网盘实时计算演进

在 2020 年,网盘主要通过Spark Streaming和Spark Structured Streaming来用于特定场景的支持,主要是在数据同步场景、实时清洗方面的应用。

为了解决Spark Streaming存在的监控告警薄弱、接入成本高、时效性低等问题,网盘于2023年初首次引入Flink实时计算引擎,并基于百度内部StreamCompute平台快速建设集指标监控、告警、任务生命周期管理能力;经过调研测试我们发现Flink任务从0到1接入成本高、开发门槛高,因此,我们开始调研实时计算引擎的解决方案,目标是降低开发门槛、配置化任务接入,最终建设网盘内部的实时计算引擎Tiangong来为业务提供更好的支持。

截止至今,Tiangong计算引擎目前已在数据团队、反作弊团队、用户增长等场景广泛应用,并支持数百万亿的大流量场景。未来我们也计划将基于Tiangong建设网盘一体化实时计算平台,从而赋能网盘内部各个业务线实时计算能力建设。

2.2 为什么选择Flink

网盘实时计算引擎从Spark Streaming和Spark Structured Streaming演进而来,为什么放弃Spark体系选择Flink主要从以下几个方面出发:

百度网盘基于Flink的实时计算实践_实时计算_02

百度网盘基于Flink的实时计算实践_数据_03

百度网盘基于Flink的实时计算实践_实时计算_04

百度内部实时计算RoadMap和状态管理、流批一体、监控告警、任务管理、生态体系等各方面我们选择基于Flink建设网盘内部的实时计算平台。

2.3 实时计算引擎

2.3.1 实时计算引擎接入现状

目前,百度网盘的Tiangong计算引擎已接入17+应用场景,高峰时作业处理的吞吐量达到千万/s,而机器规模也已经达到了1500台,资源5800CU,并且已经覆盖用商策略、反作弊、主端一刻用增实时投放等多个场景。

2.3.2 Flink Tiangong引擎架构

如下图所示的是网盘Tiangong实时计算引擎的架构。

  • 最下层为Runtime层,负责Tiangong计算任务的部署方式,目前支持StreamCompute、Kubernetes、Yarn、Local等方式;
  • 核心能力包括Source组件Sink组件以及数据转换引擎
  • Source组件:支持Db、Message Queue、BigData组件、自定义Source等多个异构数据源;
  • Sink组件:支持Db、Message Queue、BigData组件、自定义Sink等多个异构数据目的地;
  • 数据转换引擎:支持流批一体、自定义配置化数据清洗、精准一次数据处理、失败容错、IOC容器化管理、自定义SQL拓扑、灵活监控告警等能力;

百度网盘基于Flink的实时计算实践_实时计算_05

△ Tiangong计算引擎

功能层面来看,Tiangong实时计算引擎主要包括作业管理和资源管理。其中,作业部分包括作业配置、作业上线以及作业生命周期管理三个方面的功能。

  • 作业配置方面,则包括运行环境配置、source配置、sink配置、清洗逻辑配置以及作业拓扑结构设置;
{
    "jobName": "作业名",
    "env": {运行环境配置},
    "sources": [source端配置],
    "udfs": [用户定义函数],
    "views": [清洗逻辑],
    "coreSql": [核心写入逻辑],
    "sinks": [sink端配置],
    "customTopology": {自定义作业运行拓扑}
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 作业发布方面,则包括作业启动、取消以及删除等;

百度网盘基于Flink的实时计算实践_网盘_06

  • 作业状态则包括自定义规则告警、监控大盘等;

百度网盘基于Flink的实时计算实践_数据_07

△ 自定义规则告警

<