增量同步困境破局:KFS 全鏈路并行同步實(shí)戰(zhàn))
海量異構(gòu)增量同步困境破局KFS全鏈路并行同步實(shí)戰(zhàn)前言隨著業(yè)務(wù)數(shù)據(jù)爆發(fā)式增長(zhǎng)大量企業(yè)正在進(jìn)行數(shù)據(jù)庫(kù)國(guó)產(chǎn)化遷移、多源數(shù)據(jù)匯聚、異地災(zāi)備建設(shè)。傳統(tǒng)CDC同步工具普遍采用單線程串行解析、串行入庫(kù)架構(gòu)一旦業(yè)務(wù)增量上漲很容易出現(xiàn)同步延遲持續(xù)堆積、大事務(wù)阻塞、吞吐量觸頂?shù)葐?wèn)題。正如海報(bào)對(duì)比所示傳統(tǒng)同步如同細(xì)水管緩慢滴水面對(duì)海量增長(zhǎng)數(shù)據(jù)無(wú)力支撐**Kingbase FlySyncKFS**依靠全鏈路并行同步架構(gòu)實(shí)現(xiàn)源庫(kù)→目標(biāo)庫(kù)高速實(shí)時(shí)數(shù)據(jù)流轉(zhuǎn)。某省運(yùn)營(yíng)商資源中心系統(tǒng)實(shí)測(cè)單庫(kù)日增4.5TB增量場(chǎng)景依然保持實(shí)時(shí)同步、數(shù)據(jù)一致。本文將從痛點(diǎn)分析、KFS核心原理、配置實(shí)操、關(guān)鍵參數(shù)調(diào)優(yōu)、場(chǎng)景落地完整講解附帶可直接復(fù)用的配置代碼。KFS全稱(chēng) Kingbase FlySync是電科進(jìn)倉(cāng)自研異構(gòu)實(shí)時(shí)CDC同步軟件對(duì)標(biāo)OGG支持Oracle、MySQL、PostgreSQL、KingbaseES等主流數(shù)據(jù)庫(kù)雙向/單向?qū)崟r(shí)同步廣泛用于國(guó)產(chǎn)化數(shù)據(jù)庫(kù)平滑遷移、雙軌運(yùn)行、數(shù)據(jù)中臺(tái)、災(zāi)備場(chǎng)景。一、傳統(tǒng)增量同步方案致命痛點(diǎn)傳統(tǒng)同步工具老舊同步腳本、早期CDC組件普遍存在架構(gòu)短板在海量增量場(chǎng)景暴露大量問(wèn)題串行流水線瓶頸日志解析、數(shù)據(jù)傳輸、目標(biāo)入庫(kù)全部單線程執(zhí)行任意環(huán)節(jié)阻塞延遲持續(xù)累積。超大事務(wù)卡死同步鏈路批量業(yè)務(wù)產(chǎn)生百萬(wàn)級(jí)DML大事務(wù)內(nèi)存占用暴漲極易觸發(fā)同步進(jìn)程O(píng)OM。資源利用率低服務(wù)器多核CPU、帶寬無(wú)法充分利用橫向擴(kuò)展能力弱。異構(gòu)兼容性差跨數(shù)據(jù)庫(kù)類(lèi)型同步時(shí)DDL轉(zhuǎn)換、類(lèi)型映射容易出錯(cuò)缺少一致性校驗(yàn)機(jī)制。很多運(yùn)營(yíng)商、金融客戶遇到業(yè)務(wù)日增量TB級(jí)傳統(tǒng)同步延遲達(dá)到小時(shí)級(jí)下游報(bào)表、數(shù)據(jù)平臺(tái)無(wú)法拿到實(shí)時(shí)數(shù)據(jù)業(yè)務(wù)價(jià)值大打折扣。二、KFS全鏈路并行同步核心原理KFS創(chuàng)新全鏈路多通道并行架構(gòu)打破串行枷鎖整條鏈路分層并發(fā)處理?源端并行日志解析多線程并發(fā)讀取數(shù)據(jù)庫(kù)Redo/Binlog/WAL日志并行解析變更事件?傳輸通道并行分發(fā)變更事件分組多通道傳輸支持流量壓縮?目標(biāo)端并行入庫(kù)引擎專(zhuān)利分區(qū)索引多通道并行回放并行寫(xiě)入同時(shí)保障事務(wù)一致性?大事務(wù)自動(dòng)分片技術(shù)巨型事務(wù)自動(dòng)拆分避免單事務(wù)占用大量?jī)?nèi)存?斷點(diǎn)續(xù)傳一致性校驗(yàn)故障自動(dòng)恢復(fù)配套fscompare工具校驗(yàn)兩端數(shù)據(jù)一致性標(biāo)桿案例某省運(yùn)營(yíng)商資源中心業(yè)務(wù)規(guī)模核心庫(kù)單日增量4.5TB源端Oracle集群目標(biāo)端KingbaseES集群效果KFS增量同步延遲穩(wěn)定亞秒級(jí)7×24小時(shí)不間斷穩(wěn)定運(yùn)行支撐國(guó)產(chǎn)化雙軌遷移業(yè)務(wù)零停機(jī)切換。三、環(huán)境部署與實(shí)操配置Oracle → KingbaseES環(huán)境說(shuō)明源端Oracle 19c開(kāi)啟補(bǔ)充日志目標(biāo)端KingbaseES V9KFS版本Kingbase FlySync V8/V9架構(gòu)初始全量同步 持續(xù)增量CDC同步3.1 源端Oracle前置準(zhǔn)備必須執(zhí)行開(kāi)啟最小補(bǔ)充日志KFS解析redo日志依賴(lài)-- 開(kāi)啟數(shù)據(jù)庫(kù)級(jí)補(bǔ)充日志ALTERDATABASEADDSUPPLEMENTAL LOGDATA;-- 為主鍵/唯一索引開(kāi)啟補(bǔ)充日志推薦ALTERDATABASEADDSUPPLEMENTAL LOG(PRIMARYKEY,UNIQUEINDEX)COLUMNS;-- 查詢(xún)是否生效SELECTSUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PKFROMV$DATABASE;3.2 KFS服務(wù)基礎(chǔ)啟動(dòng)腳本# 進(jìn)入KFS安裝目錄cd/opt/KFS/# 啟動(dòng)管理服務(wù)./manager/bin/fsmanager start# 啟動(dòng)控制臺(tái)web服務(wù)頁(yè)面管理任務(wù)./console/bin/fsconsole start# 可選啟動(dòng)數(shù)據(jù)一致性校驗(yàn)工具./compare/bin/fscompare start訪問(wèn)http://服務(wù)器IP:8080打開(kāi)可視化控制臺(tái)也可使用命令行工具fsrepctl管理同步任務(wù)。3.3 同步任務(wù)核心配置文件oracle2kes.properties[Source] ## 源端Oracle配置 db.typeoracle db.urljdbc:oracle:thin://192.168.10.10:1521/ORCL db.userSYNC_USER db.passwordSync123456 # 并行解析線程數(shù)根據(jù)CPU調(diào)整 extractor.thread.num8 # 開(kāi)啟大事務(wù)分片 transaction.sharding.enabletrue transaction.sharding.size50000 [Target] ## 目標(biāo)端KES數(shù)據(jù)庫(kù)配置 db.typekingbase db.urljdbc:kingbase8://192.168.10.20:54321/BUSINESS_DB db.userSYNC db.passwordKingbase123 ## 全鏈路并行核心參數(shù) applier.thread.num12 # 目標(biāo)并行入庫(kù)線程 applier.batch.size2000 # 批量提交條數(shù) transport.compression.enabletrue # 傳輸壓縮節(jié)省帶寬 ## 斷點(diǎn)續(xù)傳、位點(diǎn)持久化 replicator.persist.checkpoint.interval30s replicator.persist.appliedtrue ## DDL同步開(kāi)關(guān) ddl.sync.enabletrue ddl.auto.converttrue3.4 命令行創(chuàng)建并啟動(dòng)同步任務(wù)# 創(chuàng)建同步服務(wù)fsrepctlservicecreate-nameoracle2kes-config./oracle2kes.properties# 先執(zhí)行全量初始化存量數(shù)據(jù)遷移fsrepctl-serviceoracle2kes initialize# 從當(dāng)前SCN位點(diǎn)開(kāi)啟增量實(shí)時(shí)同步fsrepctl-serviceoracle2kes online3.5 常用運(yùn)維監(jiān)控命令# 查看同步運(yùn)行狀態(tài)fsrepctl-serviceoracle2kes status# 查看同步延遲、吞吐量指標(biāo)fsrepctl-serviceoracle2kes stats# 暫停/恢復(fù)任務(wù)fsrepctl-serviceoracle2kes pause fsrepctl-serviceoracle2kes resume四、面向TB級(jí)增量關(guān)鍵調(diào)優(yōu)方案重點(diǎn)適配4.5TB日增場(chǎng)景針對(duì)超大增量業(yè)務(wù)給出生產(chǎn)環(huán)境落地調(diào)優(yōu)經(jīng)驗(yàn)并行線程配比extractor.thread.num解析線程 :applier.thread.num入庫(kù)線程建議 1:1.2~1:1.5入庫(kù)線程略多于解析線程避免事件堆積。內(nèi)存參數(shù)限制修改fsmanager.conf控制JVM堆內(nèi)存防止大事務(wù)引發(fā)OOMJAVA_OPTS-Xms8G -Xmx16G -XX:UseG1GC網(wǎng)絡(luò)優(yōu)化跨機(jī)房同步務(wù)必開(kāi)啟transport.compression.enabletrue降低帶寬占用。避免熱點(diǎn)單表鎖沖突熱點(diǎn)高頻更新表可以單獨(dú)拆分獨(dú)立同步通道多張無(wú)關(guān)聯(lián)表充分利用并行回放。定期數(shù)據(jù)校驗(yàn)定時(shí)執(zhí)行fscompare對(duì)比源庫(kù)、目標(biāo)庫(kù)數(shù)據(jù)及時(shí)發(fā)現(xiàn)不一致fscompare run-serviceoracle2kes-tableBUS_TABLE五、適用業(yè)務(wù)場(chǎng)景總結(jié)國(guó)產(chǎn)數(shù)據(jù)庫(kù)平滑遷移Oracle→KingbaseES雙軌并行運(yùn)行KFS雙向同步實(shí)現(xiàn)業(yè)務(wù)零停機(jī)割接、隨時(shí)可回退。海量數(shù)據(jù)實(shí)時(shí)匯聚運(yùn)營(yíng)商、能源行業(yè)TB級(jí)日增數(shù)據(jù)實(shí)時(shí)同步至數(shù)據(jù)倉(cāng)庫(kù)、數(shù)據(jù)中臺(tái)。同城/異地?cái)?shù)據(jù)庫(kù)災(zāi)備異構(gòu)數(shù)據(jù)庫(kù)之間構(gòu)建實(shí)時(shí)容備鏈路。讀寫(xiě)分離、數(shù)據(jù)分發(fā)一套源庫(kù)數(shù)據(jù)實(shí)時(shí)分發(fā)至多個(gè)下游業(yè)務(wù)庫(kù)。六、常見(jiàn)疑問(wèn)QKFS和OGG、Debezium相比優(yōu)勢(shì)在哪里國(guó)產(chǎn)化自主可控適配KingbaseES深度優(yōu)化國(guó)內(nèi)技術(shù)支持原生全鏈路并行架構(gòu)同等硬件下吞吐遠(yuǎn)高于傳統(tǒng)單通道CDC內(nèi)置大事務(wù)分片、異構(gòu)DDL自動(dòng)轉(zhuǎn)換、配套數(shù)據(jù)校驗(yàn)工具一站式方案支持國(guó)產(chǎn)芯片鯤鵬、飛騰環(huán)境穩(wěn)定運(yùn)行。Q并行同步會(huì)不會(huì)破壞事務(wù)一致性不會(huì)。KFS采用分區(qū)有序并行回放機(jī)制同一主鍵/分區(qū)的數(shù)據(jù)變更保持順序執(zhí)行不同分區(qū)并發(fā)寫(xiě)入兼顧高性能與事務(wù)一致性不會(huì)出現(xiàn)數(shù)據(jù)錯(cuò)亂。總結(jié)在數(shù)據(jù)量持續(xù)暴漲的當(dāng)下傳統(tǒng)串行同步方案已經(jīng)無(wú)法承載TB級(jí)增量業(yè)務(wù)。KFS依靠全鏈路并行同步核心技術(shù)突破同步吞吐量瓶頸運(yùn)營(yíng)商真實(shí)場(chǎng)景驗(yàn)證單庫(kù)日增4.5TB依然穩(wěn)定實(shí)時(shí)同步。如果你正在做Oracle遷移KES、構(gòu)建實(shí)時(shí)數(shù)據(jù)同步鏈路遇到同步延遲高、吞吐不足的問(wèn)題可以?xún)?yōu)先測(cè)試KFS并行同步方案。