《鄭志升-云原生下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