多云與混合云場(chǎng)景下的數(shù)據(jù)同步方案之Kafka
本文轉(zhuǎn)載自微信公眾號(hào)「明哥的IT隨筆」,作者IT明哥。轉(zhuǎn)載本文請(qǐng)聯(lián)系明哥的IT隨筆公眾號(hào)。
1 企業(yè)業(yè)務(wù)系統(tǒng)部署架構(gòu)的變化趨勢(shì)-多云與混合云
現(xiàn)階段,企業(yè)信息系統(tǒng)部署架構(gòu) (DA: Deploy architecture)的一大變化是,越來(lái)越多的企業(yè)在不斷將越來(lái)越多的應(yīng)用部署到云上,即業(yè)務(wù)系統(tǒng)上云的趨勢(shì)愈演愈烈。
不過(guò)企業(yè)業(yè)務(wù)系統(tǒng)上云不是一蹴而就的,也不是單向的一帆風(fēng)順的。 這里涉及到新開(kāi)發(fā)的業(yè)務(wù)系統(tǒng)的主動(dòng)上云(由于是采用云原生技術(shù)棧新開(kāi)發(fā)的業(yè)務(wù)系統(tǒng),其上云相對(duì)順暢些),也包括歷史遺留系統(tǒng)的遷移上云(單個(gè)遺留系統(tǒng)的改造遷移和上云,視乎復(fù)雜程度,往往需要一年多甚至更長(zhǎng)的時(shí)間周期),有時(shí)也會(huì)有從云端部署回退到私有云或數(shù)據(jù)中心的情形(上云后不順暢不適應(yīng),也有會(huì)退的場(chǎng)景)。
企業(yè)所有業(yè)務(wù)系統(tǒng)的上云,其最終目標(biāo),出于各種考量(有業(yè)務(wù)系統(tǒng)高可用的考量,也有不被云廠商綁定即 vendor-lockin的考量,也有生態(tài)系統(tǒng)合作伙伴即經(jīng)濟(jì)因素等多種考量),部署架構(gòu)不會(huì)是單一的某個(gè)公有云,而是多個(gè)公有云和私有云甚至本地?cái)?shù)據(jù)中心的混合部署形態(tài)。
從技術(shù)視角看大數(shù)據(jù)行業(yè)的發(fā)展趨勢(shì)
2 多云與混合云部署架構(gòu)下的難題-數(shù)據(jù)同步
如上文所說(shuō),企業(yè)的多個(gè)業(yè)務(wù)系統(tǒng),長(zhǎng)期來(lái)看,會(huì)是多云與混合云加本地?cái)?shù)據(jù)中心的混合部署架構(gòu);同時(shí)由于多個(gè)業(yè)務(wù)系統(tǒng)之間并不是相互隔離的,而是需要協(xié)作交互數(shù)據(jù)的(當(dāng)然一般不會(huì)是直接的 rpc/http 調(diào)用),這就涉及到一個(gè)難題:多云與混合云部署架構(gòu)下的數(shù)據(jù)同步。
如果企業(yè)沒(méi)有公司層面的統(tǒng)一的規(guī)劃,由各個(gè)部門(mén)各個(gè)項(xiàng)目獨(dú)自設(shè)計(jì)與實(shí)施的部署方案,其架構(gòu)會(huì)如下圖所示:
multi and hybrid cloud deploy architecture
3 多云與混合云部署架構(gòu)下的數(shù)據(jù)同步方案 - KAFKA
熟悉 KAFKA 的小伙伴都知道,KAFKA 是 LinkedIn 在 201 0左右為解決企業(yè)內(nèi)部繁雜多向的數(shù)據(jù)交互而推出的數(shù)據(jù)總線/中央數(shù)據(jù)管道解決方案,它簡(jiǎn)化了 LinkedIn 的數(shù)據(jù)交互架構(gòu):
kafka-in-LinkedIn
在 LinkedIn 將 KAFKA 開(kāi)源之后,由于其高吞吐低延遲的特性(順序?qū)懞晚樞蜃x,ZeroCopy, 端到端的壓縮,基于 partition的橫向擴(kuò)展),以及不斷進(jìn)化獲得的其它特性(基于多副本的高可用容錯(cuò)機(jī)制,EOS 有且僅有一次的語(yǔ)義,生產(chǎn)者冪等性,對(duì)ACID事務(wù)的支持,分層存儲(chǔ)的架構(gòu) tiered storage),還有不斷豐富擴(kuò)大的生態(tài)系統(tǒng) (kafka connect, kafka schema registry, 以及高層抽象 kafka stream, ksqlDB),在大數(shù)據(jù)更加注重?cái)?shù)據(jù)時(shí)效性的今天(實(shí)時(shí)預(yù)警,實(shí)時(shí)風(fēng)控,實(shí)時(shí)數(shù)倉(cāng)等各種場(chǎng)景),在微服務(wù)更加注重松耦合的今天(微服務(wù)相互之間不再直接相互調(diào)用,而是通過(guò)同步數(shù)據(jù)來(lái)同步狀態(tài)),(站在了對(duì)的風(fēng)口上,其地位水漲船高),幾乎所有的企業(yè)都或多或少在其業(yè)務(wù)系統(tǒng)中用到了 KAFKA (或其同類(lèi)競(jìng)品如 pulsa)。
既然 KAFKA 可以在企業(yè)內(nèi)部作為數(shù)據(jù)總線/中央數(shù)據(jù)管道的解決方案,那么在新時(shí)代的多云與混合云部署架構(gòu)下,其能否起到數(shù)據(jù)同步的作用呢?
答案是肯定的。
此時(shí)其架構(gòu)如下如所示:
data sync in multi and hybrid cloud - kafka
該架構(gòu)的要點(diǎn)如下:
- 本地?cái)?shù)據(jù)中心部署一個(gè) KAFKA 集群;
- 云端部署一個(gè) Kafka 集群中;(如果是多云,則每個(gè)云部署一個(gè) KAFKA 集群);
- 本地?cái)?shù)據(jù)中心的所有應(yīng)用,其數(shù)據(jù)都匯總到本地?cái)?shù)據(jù)中心的 Kafka 集群中;(可以使用 kafka java/scala api 直接寫(xiě) kafka,也可以使用各種 cdc 工具采集 rdbms 中的 binlog/redolog 進(jìn)而寫(xiě)到 kafka, 可用的 cdc 工具包括 canal/maxwell/ogg/debezium等,kafka connect生態(tài)的各個(gè) connector插件也可以使用 );
- 使用 kafka 的數(shù)據(jù)同步工具 MirrorMaker, 在數(shù)據(jù)中心與各個(gè)云端的 kafka 集群間,同步數(shù)據(jù);
- 各個(gè)云端的應(yīng)用,訪問(wèn)其對(duì)應(yīng)的 kafka 集群獲取數(shù)據(jù);
該架構(gòu)的優(yōu)點(diǎn)如下:
- 多個(gè)大廠生產(chǎn)系統(tǒng)驗(yàn)證了可行的多數(shù)據(jù)中心架構(gòu);
- 持續(xù)性的低延遲的數(shù)據(jù)同步方案;(在高速網(wǎng)絡(luò)帶寬下,延遲可達(dá)幾百毫秒);
- 集中式的管理和監(jiān)控,支持集成多種安全和治理方案;
- 節(jié)約成本;
- 可以使用 KAFKA 背后的商業(yè)公司 Confluent 提供的 Confluent platform,該產(chǎn)品可以在數(shù)據(jù)中心/私有云/公有云部署,其架構(gòu)圖如下所示:圖片
4 知識(shí)總結(jié)
- 企業(yè)IT基礎(chǔ)設(shè)施的一大趨勢(shì)是,上云的趨勢(shì)愈演愈烈;
- 企業(yè)業(yè)務(wù)系統(tǒng)上云不是一蹴而就的,也不是單向的一帆風(fēng)順的;
- 未來(lái)的企業(yè)業(yè)務(wù)系統(tǒng)的部署架構(gòu),不會(huì)是單一的某個(gè)公有云,而是多個(gè)公有云和私有云甚至本地?cái)?shù)據(jù)中心的混合部署形態(tài);
- 企業(yè)業(yè)務(wù)系統(tǒng)在多云與混合云部署架構(gòu)下有個(gè)難題,即數(shù)據(jù)同步;
- 可以使用 KAFKA 作為多云與混合云部署架構(gòu)下數(shù)據(jù)同步的解決方案;
- 使用 KAFKA 作為多云與混合云部署架構(gòu)下數(shù)據(jù)同步的解決方案時(shí),本地?cái)?shù)據(jù)中心與云端的各個(gè)云中都會(huì)部署一個(gè) KAFKA 集群;
- 使用 KAFKA 作為多云與混合云部署架構(gòu)下數(shù)據(jù)同步的解決方案時(shí),可以使用 kafka 的數(shù)據(jù)同步工具 MirrorMaker, 在數(shù)據(jù)中心與各個(gè)云端的 kafka 集群間同步數(shù)據(jù);
Ps: 筆者了解到,已經(jīng)有一些第三方公司,基于該方案推出了其封裝版的商業(yè)產(chǎn)品,來(lái)解決多數(shù)據(jù)中心間的數(shù)據(jù)同步。(商機(jī)呀小伙伴們,這是塊長(zhǎng)期的大蛋糕)。
相關(guān)資料下載:鏈接:https://pan.baidu.com/s/1FNAkwXbxQBn0tPINKPXVCg 提取碼:kafk