基于Kafka+Flink平台化设计,实时数仓还能这样建
本文由网易云音乐实时计算平台研发工程师岳猛分享,主要从以下四个部分将为大家介绍 Flink + Kafka 在网易云音乐的应用实战:
背景 Flink + Kafka 平台化设计 Kafka 在实时数仓中的应用 问题 & 改进 一、背景介绍
1、流平台通用框架
目前流平台通用的架构一般来说包括消息队列、计算引擎和存储三部分,通用架构如下图所示。客户端或者 web 的 log 日志会被采集到消息队列;计算引擎实时计算消息队列的数据;实时计算结果以 Append 或者 Update 的形式存放到实时存储系统中去。
目前,我们常用的消息队列是 Kafka,计算引擎一开始我们采用的是 Spark Streaming,随着 Fli基于nk 在流计算引擎的优势越来越明显,我们最终确定了 Flink 作为我们统一的实时计算引擎。
2、为什么选 Kafka?
Kafka 是一个比较早的消息队列,但是它是一个非常稳定的消息队列,有着众多的用户群体,网易也是其中之一。我们考虑 Kafka 作为我们消息中间件的主要原因如下:
高吞吐,低延迟:每秒几十万 QPS 且毫秒级延迟; 高并发:支持数千客户端同时读写; 容错性,可高性:支持数据备份,允许节点丢失; 可扩展性:支持热扩展,不会影响当前线上业务。
3、为什么选择 Flink?
Apache Flink 是近年来越来越流行的一款开源大数据流式计算引擎,它同时支持了批处理和流处理,考虑 Flink 作为我Ka们流式计算引擎的主要因素是:
高吞吐,低延迟,高性能; 高度灵活的流式窗口; 状态计算的 Exactly-once 语义; 轻量级的容错机制; 支持 EventTime 及乱序事件; 流批统一引擎。
4、Kafka + Flink 流计算体系
基于 Kafka 和 Flink 的在消息中间件以及流式计算方面的耀眼表现,于是产生了围绕 Kafka 及 Flink 为基础的流计算平台体系,如下图所示:基于 APP、web 等方式将实时产生的日志采集到 Kafka,然后交由 Flink 来进行常见的 ETL,全局聚合以及Window 聚合等实时计算。
5、网易云音乐使用 Kafka 的现状
目前我们有 10+个 Kafka 集群,各个集群的主要任务不fk同,有些作为业务集群,有些作为镜像集群,有些作为计算集群等。当前 Kafka 集群的总节点数达到 200+,单 Kafka 峰值 QPS 400W+。目前,网易云音乐基于 Kafka+Flink 的实时任务达到了 500+。
二、Flink+Kafka 平台化设计
基于以上情况,我们想要对 Kafka+Flink 做一个平台化的开发,减少用户的开发成本和运维成本。实际上在 2018 年的时候我们就开始基于 Flink 做一个实时计算平台,Kafka 在其中发挥着重要作用,今年,为了让用户更加方便、更加容易的去使用 Flink 和 Kafka,我们进行了重构。
基于 Flink 1.0 版本我们做了一个 Magina 版本的重构a+,在 API 层次我们提供了 Magina SQL 和 Magina SDK 贯穿 DataStream 和 SQL 操作;然后通过自定义 Magina SQL Parser 会把这些 SQL 转换成 Logical Plan,在将 LogicalPlan 转化为物理执行代码,在这过程中会去通过 catalog 连接元数据管理中心去获取一些元数据的信息。我们在 Kafka 的使用过程中,会将 Kafka 元数据信息登记到元数据中心,对实时数据的访问都是以流表的形式。在 Magina 中我们对 Kafka 的使用主要做了三部分的工作:
集群 catalog 化; Topic 流表化; Message Schema 化。
用户可以在元数据管理中心登记不同的表Fl信息或者 catalog 信息等,也可以在 DB 中创建和维护 Kafka 的表,用户在使用的过程只需要根据个人需求使用相应的表即可。下图是对 Kafka 流表的主要引用逻辑。
三、Kafka 在实时数仓中的应用
1、在解决问题中发展
Kafka 在实时数仓使用的过程中,我们遇到了不同的问题,中间也尝试了不同的解决办法。
在平台初期, 最开始用于实时计算的只有两个集群,且有一个采集集群,单 Topic 数据量非常大;不同的实时任务都会消费同一个大数据量的 Topic,Kafka 集群 IO 压力异常大;
因此,在使用的过程发现 Kafka 的压力异常大,经常出现延迟、I/O 飙升。
我们想到把大的 Topic 进行实时分发来解决上面的in问题,基于 Flink 1.5 设计了如下图所示的数据分发的程序,也就是实时数仓的雏形。基于这种将大的 Topic 分发成小的 Topic 的方法,大大减轻了集群的压力,提升了性能,另外,最初使用的是静态的分发规则,后期需要添加规则的时候要进行任务的重启,对业务影响比较大,之后我们考虑了使用动态规则来完成数据分发的任务。
解决了平台初期遇到的问题之后,在平台进阶过程中 Kafka 又面临新的问题:
虽然进行了集群的扩展,但是任务量也在增加,Kafka 集群压力仍然不断上升; 集群压力上升有时候出现 I/O 相关问题,消费任务之间容易相互影响; 用户消费不同的 Topic 过程没有中间数据的落地,容易造成重复消k平费; 任务迁移 Kafka 困难。
针对以上问题,我们进行了如下图所示的 Kafka 集群隔离和数据分层处理。其过程简单来说,将集群分成 DS 集群、日志采集集群、分发集群,数据通过分发服务分发到 Flink 进行处理,然后通过数据清洗进入到 DW 集群,同时在 DW 写的过程中会同步到镜像集群,在这个过程中也会利用 Flink 进行实时计算的统计和拼接,并将生成的 ADS 数据写入在线 ADS 集群和统计 ADS 集群。通过上面的过程,确保了对实时计算要求比较高的任务不会受到统计报表的影响。
通过上面的过程,确保了对实时计算要求比较高的任务不会受到统计报表的影响。但是我们分发了不同的集群以后就不可避免的面临新的问题:
如何感台化知 Kafka 集群状态? 如何快速分析 Job 消费异常?
针对上面两个问题,我们做了一个 Kafka 监控系统,其监控分为如下两个维度,这样在出现异常的时候就可以进行具体判断出现问题的详细情况:
集群概况的监控:可以看到不同集群对应的 Topic 数量以及运行任务数量,以及每个 Topic 消费任务数据量、数据流入量、流入总量和平均每条数据大小; 指标监控:可以看到 Flink 任务以及对应的 Topic、GroupID、所属集群、启动时间、输入带宽、InTPS、OutTPS、消费延迟以及 Lag 情况。
2、Flink + Kafka 在 Lambda 架构下的运用
流批统一是目前非常火的概念,很多公司也在考虑这方面设计的应用,目前常用的架构要么是 Lambda 架构,要么是 Kappa 架构。对于流批统一来讲需要考虑的包括存储统一和计算引擎统一,由于我们当前基建没有统一的存储,那么我们只能选择了 Lamda 架构。
下图是基于 Flink 和 Kafka 的 Lambda 架构在云音乐的具体实践,上层是实时计算,下层是离线计算,横向是按计算引擎来分,纵向是按实时数仓来区分。
四、问题&改进
在具体的应用过程中,我们也遇到了很多问题,最主要的两个问题是:
多 Sink 下 Kafka Source 重复消费问题; 同交换机流量激增消费计算延迟问题。
1、多 Sink 下 Kafka Source 重复消费问题
Magina 平台上支持多 Sink,实,也就是说在操作的过程中可以将中间的任意结果插入到不同的存储中。这个过程中就会出现一个问题,比如同一个中间结果,我们把不同的部分插入到不同的存储中,那么就会有多条 DAG,虽然都是临时结果,但是也会造成 Kafka Source 的重复消费,对性能和资源造成极大的浪费。
于是我们想,是否可以避免临时中间结果的多次消费。在 1.9 版本之前,我们进行了 StreamGraph 的重建,将三个 DataSource 的 DAG 进行了合并;在 1.9 版本,Magina 自己也提供了一个查询和 Source 合并的优化;但是我们发现如果是在同一个 data update 中有对同一个表的多个 Source 的引用,它自己会合时数并,但是如果不是在同一个 data update 中,是不会立即合并的,于是在 1.9 版本之后中我们对 modifyOperations 做了一个 buffer 来解决这个问题。
2、同交换机流量激增消费计算延迟问题
这个问题是最近才出现的问题,也可能不仅仅是同交换机,同机房的情况也可能。在同一个交换机下我们部署了很多机器,一部分机器部署了 Kafka 集群,还有一部分部署了 Hadoop 集群。在 Hadoop 上面我们可能会进行 Spark、Hive 的离线计算以及 Flink 的实时计算,Flink 也会消费 Kafka 进行实时计算。在运行的过程中我们发现某一个任务会出现整体延迟的情况,排查过后没有发现其他的仓还异常,除了交换机在某一个时间点的浏览激增,进一步排查发现是离线计算的浏览激增,又因为同一个交换机的带宽限制,影响到了 Flink 的实时计算。
为解决这个问题,我们就考虑要避免离线集群和实时集群的相互影响,去做交换机部署或者机器部署的优化,比如离线集群单独使用一个交换机,Kafka 和 Flink 集群也单独使用一个交换机,从硬件层面保证两者之间不会相互影响。
Q&A
Q1:Kafka 在实时数仓中的数据可靠吗?
A1:这个问题的答案更多取决于对数据准确性的定义,不同的标准可能得到不同的答案。自己首先要定义好数据在什么情况下是可靠的,另外要在处理过程中有一个很好的容错机制。
Q2:我们能这在学习的时候如何去学习这些企业中遇到的问题?如何去积累这些问题?
A2:个人认为学习的过程是问题推动,遇到了问题去思考解决它,在解决的过程中去积累经验和自己的不足之处。
Q3:你们在处理 Kafka 的过程中,异常的数据怎么处理,有检测机制吗?
A3:在运行的过程中我们有一个分发的服务,在分发的过程中我们会根据一定的规则来检测哪些数据是异常的,哪些是正常的,然后将异常的数据单独分发到一个异常的 Topic 中去做查询等,后期用户在使用的过程中可以根据相关指标和关键词到异常的 Topic 中去查看这些数据。
(责任编辑:客户案例)
-
谷歌 AI 承包商裁员风波:200 多名员工因工作条件争议被解雇
谷歌近期对外包公司 GlobalLogic 的承包商进行了裁员,超过200名员工因工薪和工作条件问题被解雇。这一行动引发了员工的不满和抗议,他们指出长期以来的低薪与恶劣的工作环境,导致这一冲突不断升级...[详细]
-
前言 分布式系统设计成主从节点主要是为了保障数据一致性,主从设计是一种最直观的数据一致性保障机制。 比如主从复制,主节点负责写,从节点负责读,提高读的性能。从节点定期通过心跳与主节点沟通,一旦主节点挂...[详细]
-
云梦级12月18日云梦级消息,据摩斯IPO报道,12月17日,江苏展芯半导体技术股份有限公司(以下简称“江苏展芯“)向深交所递交的IPO申请获得受理,公司计划募集资金8.9亿元,保荐机构为华泰联合证券...[详细]
-
鑳戒笌 GPT-3 鐩稿�缇庯紵EleutherAI 寮€婧� GPT-J
2020 骞达紝寰�蒋涓� OpenAI 杈炬垚浜嗗崗璁�紝寰�蒋灏嗘嫢鏈夊� GPT-3 婧愪唬鐮佺殑鐙��璁块棶鏉冿紝鑷�� OpenAI 灏变笉鍍忎互寰€涓€鏍峰紑鏀惧叾 GPT-3 AI 妯″...[详细]
-
2026年4月1日,一家低调的汽车Tier1供应商,在纽交所敲响了属于自己的钟声。 维智捷(Versigent),这个名字对普通消费者而言几乎陌生,但它生产的线束和电气架构,已无声嵌入全球每六辆量产车...[详细]
-
云梦级2月13日云梦级消息,具身智能数据平台觅蜂科技(Maniformer)宣布完成数亿元种子轮与天使轮融资,本轮融资由红杉中国领投,鼎晖VGC、BV百度风投、云锋基金、慕华科创等顶级资本跟投,均普智...[详细]
-
一. 两阶段算法 两阶段算法包含选择候选框和修正目标分类/位置两个阶段,对这两个阶段的不同处理方式,构成了不同的算法方案。 1. R-CNN算法 2014年,R. Girshick等人提出了R-CNN...[详细]
-
数据存在于一个时间和地点。我们正在使用越来越多的应用程序,这些应用程序都使用带时间戳和位置标记的数据运行。随着物联网(IoT)设备的兴起,这两种数据类型现在都变得突出起来。 如果我们登录到仪表板控制台...[详细]
-
云梦级12月5日云梦级消息,12月4日至7日,2025数智科技生态大会在广州举办。12月5日上午,在大会主论坛上,中国电信董事长柯瑞文作题为《智能领航 智惠共生》的主旨演讲。 柯瑞文表示,中国电信深入...[详细]
-
标签: iPhone 17e iPad 12 MacBook Pro iOS 26.4
云梦级2月9日云梦级消息,据彭博社记者 Mark Gurman 在最新一期《Power On》时事通讯中提到,未来几周内苹果将陆续推出 iPhone 17e、新款 iPad 12、 iPad Air...[详细]
- https://www.localfootdoc.com/?s=谷歌外推代发【tg:seogoogle987】,iqh
- https://www.remit.co.jp/vi/?s=谷歌外推代发【tg:seogoogle987】PZL
- https://www.wilsonart.com/catalogsearch/result/?action=CHECK&q=谷歌外推代发【tg:seogoogle987】,Gq3
- https://www.klatreverden.no/search?q=谷歌外推代发【tg:seogoogle987】,HRz
- https://www.resilienz-akademie.com/?cat=71&s=谷歌外推代发【tg:seogoogle987】,OWL
- https://www.mexperience.com/?T=1686132112324&s=谷歌外推代发【tg:seogoogle987】,QmZ
- https://www.tombow.com/en/search/谷歌外推代发【tg:seogoogle987】,nNu
- https://www.lgnewsroom.com/search/谷歌外推代发【tg:seogoogle987】,6OV
- https://www.world-architects.com/en/search?term=谷歌外推代发【tg:seogoogle987】,cN9
- https://www.mygrandma.com/Items.aspx?search=谷歌外推代发【tg:seogoogle987】,W5E

云计算核心技术Docker教程:Docker Hub在存储库上启用自动化测试
标签: 招商证券 2025年报 归母净利润 每股EPS
什么是“自然语言处理”? 它到底在“处理”些什么?
标签: 蘑菇车联
OpenAI 重磅任命!前谷歌高管 Kim Kyounghoon 担任韩国业务负责人
