流批一体生产应用!Bigo 实时计算平台建设实践

简介: 本文由 Bigo 计算平台负责人徐帅分享,主要介绍 Bigo 实时计算平台建设实践的介绍

本文由 Bigo 计算平台负责人徐帅分享,主要介绍 Bigo 实时计算平台建设实践的介绍。内容包括:

  1. Bigo 实时计算平台的发展历程
  2. 特色与改进
  3. 业务场景
  4. 效率提升
  5. 总结展望

一、Bigo 实时计算平台的发展历程

今天主要跟大家分享 Bigo 实时计算平台的建设历程,我们在建设过程中解决的一些问题,以及所做的一些优化和改进。首先进入第一个部分,Bigo 实时计算平台的发展历程。

先简单介绍一下 Bigo 的业务。它主要有三大 APP,分别是 Live, Likee 和 Imo。其中,Live 为全球用户提供直播服务。Likee 是短视频的创作与分享的 App,跟快手和抖音都非常相似。Imo 是一个全球免费的通讯工具。这几个主要的产品都是跟用户相关的,所以我们的业务要围绕着如何提高用户的转化率和留存率。而实时计算平台作为基础的平台,主要是为以上业务服务的,Bigo 平台的建设也要围绕上述业务场景做一些端到端的解决方案。

 

Bigo 实时计算的发展历程大概分为三个阶段。

  • 在 2018 年之前,实时作业还非常少,我们使用 Spark Streaming 来做一些实时的业务场景。
  • 从 18 年到 19 年,随着 Flink 的兴起,大家普遍认为 Flink 是最好的实时计算引擎,我们开始使用 Flink,离散发展。各个业务线自己搭一个 Flink 来简单使用。
  • 从 2019 年开始,我们把所有使用 Flink 的业务统一到 Bigo 实时计算平台上。通过两年的建设,目前所有实时计算的场景都运行在 Bigo 平台上。

 

如下图所示,这是 Bigo 实时计算平台的现状。在 Data Source 端,我们的数据都是用户的行为日志,主要来自于 APP 和客户端。还有一部分用户的信息存在 MySQL 中。

这些信息都会经过消息队列,最终采集到我们的平台里。消息队列主要用的是 Kafka,现在也在逐渐的采用 Pulsar。而 MySQL 的日志主要是通过 BDP 进入实时计算平台。在实时计算平台这块,底层也是基于比较常用的 Hadoop 生态圈来做动态资源的管理。在上面的引擎层,已经统一到 Flink,我们在上面做一些自己的开发与优化。在这种一站式的开发、运维与监控的平台上,我们内部做了一个 BigoFlow 的管理平台。用户可以在 BigoFlow 上开发、调试和监控。最终在数据存储上,我们也是对接了 Hive、ClickHouse、HBase 等等。

 

二、Bigo 实时计算平台的特色与改进

接下来我们看一下 Bigo 计算平台的特色,以及我们做的改进。作为一个发展中的公司,我们平台建设的重点还是尽可能的让业务人员易于使用。从而促进业务的发展,扩大规模。我们希望建设一个一站式的开发、运维、监控平台。

首先,在 BigoFlow 上面,用户可以非常方便的开发。我们在开发这一块的特色与改进包括:

  1. 功能强大的 SQL 编辑器。
  2. 图形化拓扑调整、配置。
  3. 一键多集群部署。
  4. 版本统一管理,尽可能收敛。

另外,在运维这一块,我们也做了许多改进:

  1. 完善的 savepoint 管理机制。
  2. 日志自动收集到 ES,内置常 用错误排查规则。
  3. 保存了任务历史,方便进行对比和问题追踪。

最后是监控这一块,我们的特色有:

  1. 监控自动添加,用户基本无需手动配置。
  2. 自动化分析资源使用,为用户推荐合理资源配置。

 

我们元数据的存储主要有三个地方。分别是 Kafka、Hive 和 ClickHouse。目前我们能够把所有的存储系统的元数据全面打通。这会极大的方便用户,同时降低使用成本。

  • Kafka 的元数据打通之后,就可以一次导入,无限使用,无需 DDL。
  • Flink 与 Hive 也做到了完全打通,用户在使用 Hive 表的时候,无需 DDL,直接使用即可。
  • ClickHouse 也类似,可自动追踪到 Kafka 的 topic。

 

其实,我们今天提供的不仅仅是一个平台,还包括在通用场景提供了端到端的解决方案。在 ETL 场景,我们的解决方案包括:

  1. 通用打点完全自动化接入。
  2. 用户无需开发任何代码。
  3. 数据进入 hive。
  4. 自动更新 meta。

在监控这一块,我们的特色有:

  1. 数据源自动切换。
  2. 监控规则不变。
  3. 结果自动存入 prometheus。

第三个场景是 ABTest 场景,传统的 ABTest 都是通过离线的方式,隔一天之后才能产出结果。那么我们今天将 ABTest 转为实时的方式去输出,通过流批一体的方式大大提高了 ABTest 的效率。

 

对 Flink 的改进主要体现在这几个方面:

  • 第一,在 connector 层面,我们自定义了很多的 connector,对接了公司用到的所有系统。
  • 第二,在数据格式化层面,我们对 Json,Protobuf,Baina 三种格式做了非常完整的支持。用户无需自己做解析,直接使用就可以。
  • 第三,公司所有的数据都直接落到 Hive 里面,在 Hive 的使用上是领先于社区的。包括流式的读取,EventTime 支持,维表分区过滤,Parquet 复杂类型支持,等等。
  • 第四,在 State 层面我们也做了一些优化。包括 SSD 支持,以及 RocksDB 优化。

 

三、Bigo 典型的业务场景

传统的打点入库,都是通过 Kafka 到 Flume,然后进入到 Hive,最后到 ClickHouse。当然 ClickHouse 里面大部分是从 Hive 导进去的,还有一部分是通过 Kafka 直接写进去的。

 

这个链路是一个非常老的链路,它存在以下问题:

  • 第一,不稳定,flume 一旦有异常,经常会出现数据丢失和重复。
  • 第二,扩展能力差。面对突然到来的流量高峰,很难去扩展。
  • 第三,业务逻辑不易调整。

 

所以我们在建设 Flink 之后,做了非常多的工作。把原先 Flume 到 Hive 的流程替换掉,今天所有的 ETL 都是通过 Kafka,再经过 Flink,所有的打点都会进入到 Hive 离线数仓,作为历史的保存,使数据不丢失。同时,因为很多作业需要实时的分析,我们在另外一个链路,从 Flink 直接进入 ClickHouse 实时数仓来分析。

 

在这个过程中,我们做了一些核心改造,分为三大块。首先,在用户接入这一块,我们的改造包括:

  1. 尽可能简单。
  2. 通用打点全自动。
  3. 元信息打通,无需 DDL。

另外,在 Flink 自身这一块,我们的改造有:

  1. Parquet 写优化。
  2. 并发度调整。
  3. 通过 SSD 盘,支持大状态的作业。
  4. RocksDB 优化,更好控制内存。

最后,在数据 Sink 这一块,我们做了非常多的定制化的开发,不仅支持 Hive,也对接了 ClickHouse。

 

四、Flink 为业务带来的效率提升

下面主要介绍 ABTest 场景下,我们做的一些改造。比如说,数据全部落到 Hive 之后,就开始启动离线的计算,可能经过无数个工作流之后,最终产出了一张大宽表。表上可能有很多个维度,记录了分组实验的结果。数据分析师拿到结果之后,去分析哪些实验比较好。

 

虽然这个结构很简单,但是流程太长,出结果晚,并且不易增加维度。主要问题其实在 Spark 这块,这个作业有无数个工作流去执行,一个工作流要等到另外一个执行完才能去调度。而且离线资源没有非常好的保证。我们之前最大的问题是 ABTest 上一天的结果要等到下一天的下午才能输出,数据分析师经常反馈上午没法干活,只能下午快下班的时候才能开始分析。

 

所以我们就开始利用 Flink 实时计算能力去解决时效性的问题。不同于 Spark 任务要等上一个结果才能输出,Flink 直接从 Kafka 消费。基本上可以在上午出结果。但是当时因为它最终产出的结果维度非常多,可能有几百个维度,这个时候 State 就非常大,经常会遇到 OOM。

因此我们在第一步的改造过程中取了一个折中,没有直接利用 Flink 在一个作业里面把所有的维度 join 起来,而是把它拆分成了几个作业。每个作业计算一部分维度,然后把这些结果先利用 HBase 做了一个 join,再把 join 的结果导入到 ClickHouse 里面。

 

在改造的过程中,我们发现了一个问题。可能作业需要经常的调整逻辑,调完后要去看结果对不对,那么这需要 1 天的时间窗口。如果直接读历史数据,Kafka 就要保存很久的数据,读历史数据的时候,要到磁盘上去读,对 Kafka 的压力就非常大。如果不读历史数据,因为只有零点才能触发,那么今天改了逻辑,要等到一天之后才能够去看结果,会导致调试迭代非常慢。

 

前面提到我们的所有数据在 Hive 里面,当时还是 1.9 的版本,我们就支持了从 Hive 里面流式的去读取数据。因为这些数据都是用 EventTime 去触发,我们在 Hive 上支持了用 EventTime 去触发。为了流批统一,这里没有用 Spark,因为如果用 Spark 去做作业验证,需要维护两套逻辑。

我们在 Flink 上面用流批一体的方式去做离线的补数据,或者离线的作业验证。而实时的这条用于日常作业的产生。

 

刚才说了这其实是一个折中的方案,因为对 HBase 有依赖,也没有充分发挥 Flink 的能力。所以我们进行了第二轮的改造,彻底去除对 HBase 的依赖。

经过第二轮迭代之后,我们今天在 Flink 上已经能够扛住大表的天级别的窗口交易。这个流批统一的方案已经上线了,我们直接通过 Flink 去计算完整个大宽表,在每天的窗口触发之后,将结果直接写到 ClickHouse 里面,基本上凌晨就可以产出结果。

 

在整个过程中间,我们对 Flink 的优化包括:

  1. State 支持 SSD 盘。
  2. 流式读取 Hive,支持 EventTime。
  3. Hive 维表 join,支持 partition 分区 load。
  4. 完善的 ClickHouse Sinker。

优化之后,我们的小时级任务再也不延迟了,天级别完成时间由下午提早到上班前,大大加速了迭代效率。

 

五、总结与展望

总结一下实时计算在 Bigo 的现状。首先,非常贴近业务。其次,跟公司里用到的所有生态无缝对接,基本上让用户不需要做任何的开发。另外,实时数仓已现雏形。最后,我们的场景跟大厂相比还不够丰富。一些比较典型的实时场景,由于业务需求没有那么高,很多业务还没有真正的切换到实时场景上来。

 

我们的发展规划有两大块。

  • 第一块是拓展更多的业务场景。包括实时机器学习,广告,风控和实时报表。在这些领域,要更多的去推广实时计算的概念,去跟业务对接好。
  • 另外一块就是在 Flink 自身上面,我们内部有很多场景要做。比如说,支持大 Hive 维表 join,自动化资源配置,CGroup 隔离,等等。以上就是我们在未来要做的一些工作。

 

作者:徐帅

原文链接

本文为阿里云原创内容,未经允许不得转载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一部手机是否能用 7 年?苹果、三星、Google:三年差不多!

整理 | 苏宓出品 | CSDN(ID:CSDNnews)一部手机如果可以流畅地使用 7 年,是种什么样的感觉:有人说,这对于 iPhone 而言,或许会很轻松做到,但也会给一些平价的 Android 手机制造商带来…

五福背后的 Web 3D 引擎 Oasis Engine 正式开源

简介: Oasis 从开源走向新的起点,用 3D 化的交互和表达让世界变得更美好。 相信大家已经体验了今年支付宝五福的活动,无论是今年的五福首页还是打年兽游戏都是由蚂蚁互动图形引擎(代号:Oasis Engine)驱动的…

我用 Python 自制成语接龙小游戏,刺激!

作者:小小明原文链接:https://blog.csdn.net/as604049322/article/details/118154687本文为读者投稿在 https://github.com/pwxcoo/chinese-xinhua 项目中可以下载到中华成语的语料库,该项目收录包括 14032 条歇后语,16142 个汉字…

基于SLS构建RDS审计合规监控

简介: 数据库是企业业务的数据核心,其安全方面的问题在传统环境中已经成为泄漏和被篡改的重要根源。因此,对数据库的操作行为尤其是全量 SQL 执行记录的审计日志,就显得尤为重要。 背景 数据库是企业业务的数据核心,其…

云效DevOps实践-如何基于云效实现测试自动化集成和分析

简介: 对于现代软件研发来说,持续、快速、高质量、低风险地交付需求特性,是业务对研发的主要诉求。而要做到这一点,除了要有良好的架构设计、卓越的工程能力,快速可靠的测试反馈也是其非常重要的一环,达到这…

spring 使用其他类protected方法_Java操作bean、属性、方法的使用工具类

在实际的项目开发中,反射操作类的实例、属性赋值、执行方法是常规的操作,虽然spring提供了比较完整的API来执行上述操作,不过在实际的应用中,spring的函数隐藏比较深,比较分散,小伙伴们可能懒得花时间去寻找…

2021年阿里云采购季大促主会场全攻略

在疫情的影响下,企业都在谋求各种转机,探寻各种转型之路,为助力企业复工复产低成本上云,日前阿里云开年采购季优惠活动于3月1日正式开启。 从主会场页面来看,活动分为三个阶段: 3月1日-3月16日&#xff1a…

应云而生,幽灵的威胁 - 云原生应用交付与运维的思考

简介: 过去的 2020 是充满不确定性的一年,但也是充满机遇的一年。突发的新冠疫情为全社会的数字化转型按下加速键。云计算已经不再是一种技术,而是成为支撑数字经济发展和业务创新的关键基础设施。在利用云计算重塑企业 IT 的过程中&#xff…

技术干货 | mPaaS 小程序高玩带你起飞:客户端预置小程序无视网络质量

简介: 弱网拉包无障碍,深度提升用户体验 传统的小程序技术容易受到网络环境影响,当网络质量不佳时可能导致拉取不到小程序包的情况。通过预置小程序,即可规避该问题。本文介绍了预置小程序的原理和预置小程序的实现过程。 什么是预…

Delta Lake在Soul的应用实践

简介: 传统离线数仓模式下,日志入库前首要阶段便是ETL,我们面临如下问题:天级ETL任务耗时久,影响下游依赖的产出时间;凌晨占用资源庞大,任务高峰期抢占大量集群资源;ETL任务稳定性不…

亚马逊云科技中国线上峰会开幕,发力汽车产业链、少年人工智能等

亚马逊云科技于9月9日-14日举办以“构建新格局 重塑云时代”为主题的中国线上峰会,推出涵盖行业视野、技术创新、开发者和开源、云安全、以及人工智能的5大主题演讲、覆盖云计算各细分领域的8大技术分论坛,以及汇聚各行业上云趋势及创新实践的10大行业分…

【产品能力深度解读】连续入围Gartner魔力象限的Quick BI有何魔力?

简介: 国际权威分析机构Gartner发布2021年商业智能和分析平台魔力象限报告,阿里云Quick BI再度入选,并继续成为该领域魔力象限唯一入选的中国企业。 Quick BI凭借在增强分析能力上的持续投入、数据中台矩阵化产品优势和电商行业的专业度&…

mysql的json函数与实例_Mysql实例详解Mysql中的JSON系列操作函数

《Mysql实例详解Mysql中的JSON系列操作函数》要点:本文介绍了Mysql实例详解Mysql中的JSON系列操作函数,希望对您有用。如果有疑问,可以联系我们。MYSQL必读前言MYSQL必读JSON是一种轻量级的数据交换格式,采用了独立于语言的文本格式,类似XML,…

256变4096:分库分表扩容如何实现平滑数据迁移?

简介: 本文作者就一个高德打车弹外订单系统进行了一次扩分库分表和数据库迁移。 一、 背景 2020年,笔者负责的一个高德打车弹外订单系统进行了一次扩分库分表和数据库迁移。该订单系统整体部署在阿里云上,服务使用阿里云ECS部署,…

OpenYurt 如何 “0 侵入” 攻破云边融合难点

简介: 随着 5G、IoT、直播、CDN 等行业和业务的发展,越来越多的算力和业务开始下沉到距离数据源或者终端用户更近的位置,以期获得很好的响应时间和成本,这是一种明显区别于传统中心模式的计算方式——边缘计算。 随着 5G、IoT、直…

Python - 深夜数据结构与算法之 Graph

目录 一.引言 二.图的简介 1.Graph 图 2.Undirected graph 无向图 3.Directed Graph 有向图 4.DFS / BFS 遍历 三.经典算法实战 1.Num-Islands [200] 2.Land-Perimeter [463] 3.Largest-Island [827] 四.总结 一.引言 Graph 无论是应用还是算法题目在日常生活中比较…

Docker Desktop宣布收费;腾讯7月已申请注册WECHAT CLOUD商标;MongoDB成为当前最具价值开源软件公司...

NEWS本周新闻回顾Docker Desktop 宣布收费近日 Docker 官方宣布一项新的动作,即将产品订阅划分为个人、专业、团队和商业不同版本。如果企业规模在 250 名员工以上或年收入超过 1000 万美元的公司想要使用 Docker Desktop,那么必须使用付费订阅。付费订阅…

Serverless 2.0,鸡蛋还是银弹?

简介: 本篇旨在介绍 Serverless 如今应用到应用(非病句)的各种困境,以及帮助用户如何去规避一些问题,提前了解方向。 浪潮 从 2014 年 Serverless 冒头至今,已经有无数的勇士在前面探路,阿里、…

基础组件完善的今天,如何通过业务组件提效?

简介: 无论是在前端刀耕火种的 jQuery/YUI 时代,还是到现在基于数据驱动 UI 的 React/Vue 时代,物料/组件一直是前端永恒的话题。基于大量重复逻辑的封装可以很显而易见地提升前端 UI 的构建效率,简单而直接,因此无论技…

​做安全操作系统,这位技术老兵是认真的!

受访者 | 王文东记者 | 伍杏玲出品 | CSDN云计算(ID:CSDNcloud)近年来国际形势变化莫测,基础软件作为建设国家信息系统的核心,其自主研发能力备受关注与热议。作为企业和个人开发者,我们如何打破当前国产基…