《郑志升-云原生下B站万亿规模管道化架构的演进.pdf》由会员分享,可在线阅读,更多相关《郑志升-云原生下B站万亿规模管道化架构的演进.pdf(43页珍藏版)》请在三个皮匠报告上搜索。
1、云原生下万亿规模管道化架构演进主讲人:郑志升演讲嘉宾介绍郑志升 哔哩哔哩技术总监 大数据实时体系负责人 加入B站前曾任职于阿里巴巴 主导涵盖“数据埋点-实时传输接入-实时计算-开发应用-数据湖”全链路的中台建设 目前重点关注实时(含增量)的传输与计算,批流一体、数据湖等方向CONTENT目录2023K+01机遇与挑战管道化架构的落地万亿规模下的稳定性挑战0203云原生下管道化的基建演进04Part 01机遇与挑战入口-集成流动-时效出口-湖仓让传输与分发,好、快、准大数据的基石 数据流式传输 端到端覆盖,采集-上报-分发 量:几千条流,2k+机器规模,万亿级数据量 好:任意分发,如HDFS、K
2、afka、ES等 快:高时效,如Kafka千分位延迟3s早期概况 接入难,不好用分隔符上报,埋点错埋、漏埋、随意埋传输链路长,无保障,易丢失、难排查、难恢复无法送达ACK,Flume模式下难感知到全局的分区状态来通知下游数据源采集多模式多组件,例如Mysql数据需要通过Sqoop,增量Canal遇到的痛点SLA/快准稳,不达标网关原生Flume性能差,数据丢失严重数据分发过程重复率过高,如HDFS抖动时,重试导致上千条流4种终端下的混合分发,HDFS出问题引发Kafka的落地延迟活动和突发流量下,隔离性不足不同数据相互影响,SLA容易抖动,数据引发延迟遇到的痛点资源+运维,成本高公网上报经过C
3、DN,内网跨专线,超高成本传输各环节IO消耗高,无压缩纯文本,包括落地的存储成本采用Flume+物理部署,无法利用大数据的优势,活动期间扩缩容成本高几千条流的运维,无法细粒度分级,配额管理,资源争抢以及很难提供高优保障遇到的痛点配额写限速Label丰富化隔离细粒度LogId级管道端上采样边缘降级logId级聚合路由分组数据流式入湖多模式分发支持PBlogId反压限流SQL化低门槛支持ETLOn K8S全链路集成架构Part 02管道化架构的落地架构痛点数据丢失,Source到Channel数据重复,Sink回滚后的retry机制无法实现全局分区Ready,通知下游服务重启或节点异常,HDFS文
4、件无法Recovery早期Flume架构扩展性不足无法在分发中做灵活ETL,数据需要先落地无法提供Batch的能力,即涵盖不了离线集成场景对于落地到HDFS的数据,无法进一步增量化,如加速DWD的ETL难提供组合拳,如Mysql数据,Flume获取Binlog+Sqoop获取全量,视图割裂早期Flume架构增量、离线、流式,且支持ETLConnector套件化,解耦通信层SQL化,面向用户提供灵活低门槛ETLTrace,解决全链路监控打点,质量闭环批流一体,及灵活调度能力,实、离、增多元Flink架构整体架构增量管道管道进度感应存储层基于HDFS,提供分钟级传输 HDFS自研索引机制索引在Ch
5、eckpoint期间Append追加表同级根目录,会带来小文件问题,历史数据靠定期合并 基于HUDI TimeTravel,提供增量消费围绕Instant,提供数据增量消费,底层Instant会基于HUDI Compaction定期合并HDFS增量管道CDC全增量管道基于社区CDC,特性扩展 多库多表支持,不同的表不同的topic分发转换Binlog映射到Row上,支持数据KeyBy TableName写到不同的topic 部分表可数据间断性上报,Watermark无法推进,分区无法创建引入心跳事件穿插数据流中,当无数据时HeartbeatRow会下发到下游推动WatermarkCDCSour
6、ce设计Kafka流式管道 灵活Schema Evolution支持Protobuf及JSON,支持Map、Struct等嵌套结构灵活使用 灵活自定义分流策略可根据数据中指定字段,自定义UDF分流到对应Cluster的对应Topic 脏数据清理机制、默认lz4压缩策略、容错重试机制、热点TP检测剔除机制Kafka流式管道CREATE TABLE sink(headers MAP METADATA,db_name STRING,table_name STRING,operation_ts TIMESTAMP_LTZ(3),body bytes)WITH(connector=bsql-kafka1
7、0-diversion,topic=TopicUdf(table_name),format=changelog-json,properties.bootstrap.servers=BrokerUdf(table_name),bootstrapServers.udf.class=com.bilibili.saber.flink.udf.BrokerUdf,topic.udf.class=com.bilibili.saber.flink.udf.TopicUdf,changelog-json.format=debezium);INSERT INTOsinkSELECTMap db_name,ENC
8、ODE(db_name,UTF-8),table_name,ENCODE(table_name,UTF-8),host_name,ENCODE(host_name,UTF-8),sequence,ENCODE(cast(sequence as varchar),UTF-8)as headers,db_name,table_name,operation_ts,filed_listFROMmysql_binlog;Part 03万亿规模下的稳定性挑战热点IO-黑名单 一份数据,多个管道消费存在个别Kafka Partition热点IO,消费侧无法正常消积 基于Zookeeper的热点黑名单Pipe
9、lineB和C为消费管道,定期汇报存在Lag的多个Partition到ZK生产侧定期从Zookeeper中获取热点分区,从中选择一定比例进行分区的剔除 热点释放机制消费端定期注册热点,当热点消除时不上报;生产端定期加入热点,固定周期重新获取ZK热点IO-黑名单管道输出时,存储层的热点优化不同存储不同策略实现,HDFS/Clickhouse/KafkaCheckpoint时,会将不同Strategy下的Handler进行FlushState会定时统计热点,将热点加入FailbackQueue下发送失败的数据,会进入RetryHandler热点IO-Failover扩展ChannelSelecto
10、r扩展ResultSubPartition获取剩余buffers监控SubPartition的Backlog buffersChannel优先选择低Backlog分区TM B的CPU会得到更充分利用热点CPUDAG内局部故障或异常,作业断流引入Region策略,划分不同子集扩展Scheduler,支持Region的Failover扩展Checkpoint机制,引入Regional CP引入Session,容错能力提升显著,减少断流Region容错平滑机制,减少断流时长引入Redeploy机制和运行时API扩展JobGraph,使其能根据并发度动态调整COW模式,基于新并发度生成Executio
11、nGraph物理层资源的异步申请,资源就绪才触发DAG部署热扩缩全链路质量监控 哨兵模拟模拟数据端到端发送,长度、字符等多维度,校验内容MD5和条数 DQC 对比Trace获取网关Source条数,对比实际落地Hive的总条数,超过误差告警因Hive有天分区表,实际对比需等到第二天,因此天分区可使用HDFSSink的索引数据 白盒Trace对比根据网关的Source条数,对比落地Hive的Sink条数,数据存储落到Clickhouse,分钟级SQL对比多维度质量机制Part 04云原生下管道化的基建演进容器化隔离性混部资源池管道SQL多Pipeline集成Ops效率一体化存储统一增量化管道动态
12、伸缩智能诊断运行时托管云原生下的管道化Flink On K8SSessionApplication按需/弹性管道环境配置作业重启伸缩可观测资源混部优先级划分,降低管道独占不同优先级,容量水位伸缩不同P0管道核心业务,比例小独占资源池P1管道非核心但时效要求高,混部在线P2管道非核心且离线或增量,混部离线运行时托管运行时画像,诊断和伸缩多维度收集汇总Metric聚合计算,构建实时画像Clickhouse围绕画像信息,提供实时诊断围绕画像信息,分级作业动态伸缩保障智能诊断多策略启发式规则组件通信层,如RPC、RTFlink Runtimes层,如反压上下游组件层,如Kafka Lag基于时间归因,提示RootCause及调优SQL Pipeline数据湖引入增量化,引导Kafka管道到数据湖Time Travel,分钟级管道,批流一体,降低成本管道加速,下推Condition,获取数据子集元数据丰富,资源自动推断,实现托管管道探查,实时勘测质量Session共享,提升资源利用Flink Runtime层支持集成作业的平滑热升级集成批流一体,引入Flink Batch覆盖现有离线集成链路引入数据湖,分钟级增量化ETL架构,提升时效天到分钟级引入Alluxio,去掉Kafka缓冲层,数据加速入湖,以及基于Cache满足Queue能力未来展望THANKS