网易云音乐从2018年开始搭建实时计算平台,通过几年的倒退曾经渗透到云音乐的各个业务当中。本文是大愚老师的一篇实际分享,将从一个日常运维问题登程,率领大家理解云音乐实时计算平台的一些工作进展和将来布局。次要内容为:
平台性能批流一体将来布局
网易云音乐实时数仓平台上线当前,通过一年半的倒退,整体实时数仓曾经初具规模,咱们已有实时数仓表300+,运行中的工作数有1200+。其中1000左右的工作是SQL工作, Kafka总进口流量达到到18GB/S,总用户数达到了200+。
数据量和用户的增长也给数据平台的易用性以及稳定性带来了了越来越多的挑战,蕴含Kafka的稳定性、集群的稳定性、运维工作的挑战以及很多晚期的技术债;业务的增长,暴露出了基建的单薄,也给咱们积攒了很多平台建设和运维的教训。
一、平台性能咱们平台整体的的性能大家能够参考《云音乐实时数仓技术改造以及将来的一些布局》,这里将次要介绍咱们最新的一些工作:
“我的工作提早了,怎么扩容都不行,这是为什么?”
在日常运维工作中这是咱们常常遇到的问题,往往也是比拟消耗工夫的问题。导致这种这种问题的起因有很多,为了解决这个问题,咱们做了一些工作来加强咱们的运维能力。
1. IO指标欠缺IO问题是导致以上问题经常出现的起因之一,蕴含音讯读取效率、维表JOIN效率、SINK效率等等,第三方存储的性能以及稳定性,间接影响实时工作的稳定性,为了疾速定位相干问题,咱们增加了很多IO相干Metric指标。
1.1 Kafka生产侧的一些性能指标
1.2 读取反序列化指标蕴含:
反序列化的RT反序列化的谬误比例在Format侧咱们开发了一套Format代理,反对在不批改原有format代码的状况下,上报相干metirc指标,疏忽谬误数据等性能。只有增加属性format.proxy指定代理类就能够反对不同形式的Format封装。
比方咱们指定format.proxy=magina,就能够反对上报上述的性能指标;指定format.proxy=ds 就能够反对解析ds封装的日志格局,应用被代理的Format解析DS中的Body局部,不须要独自为DS封装的日志格局开发Format,且同样会上报性能相干指标,反对疏忽谬误音讯等性能。
1.3 维表JOIN相干指标在维表JOIN侧, 咱们增加了:
数据查问的响应工夫本地缓存的命中率查问产生重试的比例胜利JOIN上的数据的比例等1.4 数据写入的一些性能指标数据序列化的RT数据写入内部数据源的均匀响应工夫等整套IO相干指标的实现,咱们全副是在Flink Connector的顶层接口做了一些公共的封装,重构了相干Connector的代码,只有依照咱们本人的接口实现Connector,无需关怀细节指标的上报,这些指标都会自动化的上报进去。
2. Kafka分区问题Kafka分区的限度也是常常导致咱们程序性能无奈扩大的起因,出于Exactly Once的实现、读取性能、以及读取稳定性的思考,Flink采纳被动拉取的形式读取Kafka音讯,这种形式限度了咱们读取Kafka音讯的工作数,大大限度咱们工作性能的扩张能力,以上面这个case为例:
SET 'table.exec.state.ttl' = '1h';SET 'table.exec.mini-batch.enabled' = 'true';SET 'table.exec.mini-batch.allow-latency' = '10s';SET 'table.exec.mini-batch.size' = '100000';INSERT INTO music_kudu_online.music_kudu_internal.ads_ab_rtrs_user_metric_hourSELECT from_unixtime(`timestamp`, 'yyyy-MM-dd') as dt,from_unixtime(`timestamp`, 'HH') as `hour`,os, sceneid, parent_exp, `exp`, exp_type, userid,count(1) pvFROM iplay_ods.ods_rtrs_ab_log INNER JOIN abtest_online.abtest.abtest_sence_metric_relationFOR SYSTEM_TIME AS OF user_metric.proctimeON ods_rtrs_ab_log.sceneid = abtest_sence_metric_relation.sceneid GROUP BY from_unixtime(`timestamp`, 'yyyy-MM-dd'), from_unixtime(`timestamp`, ‘HH’), os, sceneid, parent_exp, `exp`, exp_type, userid这是一个实时全聚合工作,在原始的FLINK中这段SQL执行的DAG大略是这样的:
...