方案概述
大數(shù)據(jù)時(shí)代吁断,各類應(yīng)用對(duì)消息解決方案的要求不僅僅是數(shù)據(jù)的流動(dòng),而是要在持續(xù)增長的服務(wù)和應(yīng)用中傳輸海量數(shù)據(jù),進(jìn)行智能的處理和分析环揽,幫助業(yè)務(wù)做出更加精準(zhǔn)的決策。
Pulsar 與 TiDB 聯(lián)合解決方案提供實(shí)時(shí)庵佣、高吞吐歉胶、穩(wěn)定的數(shù)據(jù)輸出,滿足用戶在大數(shù)據(jù)場景中對(duì)各類數(shù)據(jù)的應(yīng)用與分析需求秧了,廣泛適用于日志收集跨扮、監(jiān)控?cái)?shù)據(jù)聚合、流式數(shù)據(jù)處理、在線和離線分析等場景衡创。
Apache Pulsar簡介與優(yōu)勢
Apache Pulsar(以下簡稱:Pulsar)是云原生的分布式消息流系統(tǒng)帝嗡,采用計(jì)算和存儲(chǔ)分層的架構(gòu)和以 Segment 為中心的分片存儲(chǔ),具有更好的性能璃氢、可擴(kuò)展性和靈活性哟玷,是一款可以無限擴(kuò)展的分布式消息隊(duì)列。目前一也,StreamNative 公司提供基于 Pulsar 平臺(tái)的下一代流數(shù)據(jù)整體解決方案巢寡。
Pulsar 起初作為消息整合平臺(tái)在 Yahoo 內(nèi)部開發(fā)和部署,為 Yahoo Finance椰苟、Yahoo Mail 和 Flickr 等雅虎內(nèi)部關(guān)鍵應(yīng)用連接數(shù)據(jù)抑月。目前,Pulsar 在雅虎全球的 10 多個(gè)數(shù)據(jù)中心提供服務(wù)舆蝴,具備全網(wǎng)格復(fù)制能力谦絮,支持 140 萬個(gè)主題,處理超過 1000 億條消息洁仗,整體消息的發(fā)布延遲小于 5 毫秒层皱。2016 年 Yahoo 把 Pulsar 開源并捐給 Apache 軟件基金會(huì)(ASF),2018 年 Pulsar 畢業(yè)成為 Apache 軟件基金會(huì)的頂級(jí)項(xiàng)目赠潦。
與大多數(shù)消息傳遞系統(tǒng)的單片架構(gòu)不同叫胖,Pulsar 采用分層分片式的架構(gòu),服務(wù)層和存儲(chǔ)層都能夠獨(dú)立擴(kuò)展她奥,以提供更好的性能瓮增、可擴(kuò)展性和靈活性,這種設(shè)計(jì)對(duì)容器非常友好哩俭,使得 Pulsar 成為流原生平臺(tái)的理想選擇钉赁。
Pulsar 的企業(yè)特性包括消息的持久化存儲(chǔ)、多租戶携茂、多機(jī)房互聯(lián)互備你踩、加密和安全性等。Pulsar 提供和 Kafka 兼容的 API讳苦,以及 Kafka-On-Pulsar(KoP) 組件來兼容 Kafka 的應(yīng)用程序带膜。KoP 在 Pulsar Broker 中解析 Kafka 協(xié)議,用戶不用改動(dòng)客戶端的任何 Kafka 代碼就能直接使用 Pulsar鸳谜。
TiDB 與 TiCDC 簡介
TiDB 是 PingCAP 公司自主設(shè)計(jì)膝藕、研發(fā)的開源分布式關(guān)系型數(shù)據(jù)庫,是一款同時(shí)支持在線事務(wù)處理與在線分析處理 (HTAP)的融合型分布式數(shù)據(jù)庫產(chǎn)品咐扭,具備水平擴(kuò)容或者縮容芭挽、金融級(jí)高可用滑废、實(shí)時(shí) HTAP、云原生的分布式數(shù)據(jù)庫袜爪、兼容 MySQL 5.7 協(xié)議和 MySQL 生態(tài)等重要特性蠕趁。在 4.0 之前,TiDB 提供 TiDB Binlog 實(shí)現(xiàn)向下游平臺(tái)的近實(shí)時(shí)復(fù)制辛馆,在 TiDB 4.0 中俺陋,引入 TiCDC 作為 TiDB 變更數(shù)據(jù)的捕獲框架。
TiCDC(TiDB Change Data Capture)是用來識(shí)別昙篙、捕捉和輸出 TiDB/TiKV 集群上數(shù)據(jù)變更的工具系統(tǒng)腊状。它既可以作為 TiDB 增量數(shù)據(jù)同步的工具,將 TiDB 集群的增量數(shù)據(jù)同步至下游數(shù)據(jù)庫苔可,也提供開放數(shù)據(jù)協(xié)議缴挖,支持把數(shù)據(jù)發(fā)布到第三方系統(tǒng)。TiCDC 是 TiDB Binlog 的升級(jí)方案 焚辅,提供低延遲醇疼、高可用的數(shù)據(jù)訂閱和同步服務(wù),支持超大規(guī)模集群的水平擴(kuò)展法焰。
在 TiDB 生態(tài)鏈上,TiCDC 作為 TiDB 的數(shù)據(jù)出口有著非常重要的地位倔毙,其作用包括:構(gòu)建 TiDB 主從和災(zāi)備系統(tǒng)埃仪,鏈接 TiDB 和其它異構(gòu)數(shù)據(jù)庫,通過開放數(shù)據(jù)協(xié)議(Open Protocol )與第三方數(shù)據(jù)生態(tài)系統(tǒng)進(jìn)行對(duì)接陕赃。
TiCDC Open Protocol 是一種行級(jí)別的數(shù)據(jù)變更通知協(xié)議卵蛉,為監(jiān)控、緩存么库、全文索引傻丝、分析引擎、異構(gòu)數(shù)據(jù)庫的主從復(fù)制等提供數(shù)據(jù)源诉儒。TiCDC 遵循開放數(shù)據(jù)協(xié)議葡缰,向 MQ (Message Queue) 等第三方數(shù)據(jù)媒介復(fù)制 TiDB 的數(shù)據(jù)變更。
Pulsar 與 TiDB聯(lián)合解決方案
在 TiDB v4.0.4 版本中忱反,TiCDC 開放數(shù)據(jù)協(xié)議(Open Protocol )可以與 Pulsar 實(shí)現(xiàn)無縫對(duì)接泛释,提供實(shí)時(shí)、高吞吐温算、穩(wěn)定的數(shù)據(jù)輸出怜校,滿足用戶在大數(shù)據(jù)場景中對(duì)各類數(shù)據(jù)的應(yīng)用與分析需求,廣泛適用于日志收集注竿、監(jiān)控?cái)?shù)據(jù)聚合茄茁、流式數(shù)據(jù)處理魂贬、在線和離線分析等場景。
借助 Pulsar 所具有的 GEO-Replication 功能裙顽,Pulsar 與 TiDB 聯(lián)合解決方案可以為 TiCDC 的消費(fèi)者帶來地理位置無關(guān)的變更事件訂閱能力付燥。同時(shí),Pulsar 集群的快速節(jié)點(diǎn)擴(kuò)容锦庸、故障的快速恢復(fù)能力可以為 TiCDC 事件的消費(fèi)方提供更優(yōu)的數(shù)據(jù)實(shí)時(shí)性保障机蔗。
需求探索
>>> 伴魚少兒英語
伴魚少兒英語是目前飛速成長的互聯(lián)網(wǎng)在線英語教育品牌之一,致力于打造更創(chuàng)新甘萧、更酷萝嘁、讓學(xué)英語更有效的新一代互聯(lián)網(wǎng)產(chǎn)品。
伴魚少兒英語原先采用的 Kafka 集群會(huì)遇到 Consumer Rebalance 問題扬卷,在剔除掉無法消費(fèi)或者過慢的消費(fèi)者的時(shí)候牙言,會(huì)對(duì)其他消費(fèi)者造成因消息過慢觸發(fā)心跳超時(shí)等問題,Pulsar 在運(yùn)維層面更方便和安全一些怪得。
Pulsar 是原生支持跨數(shù)據(jù)中心的流數(shù)據(jù)同步方案咱枉,可以提供跨地域的復(fù)制功能,滿足國內(nèi)和海外數(shù)據(jù)中心機(jī)房雙活的需求徒恋。此外蚕断,Pulsar 具備延遲隊(duì)列的功能,隨著大量 Topic 的創(chuàng)建入挣,依然可以提供出色的性能和延遲保障亿乳,消息分散的落盤策略不會(huì)造成 IO 對(duì)磁盤的競爭。
基于上述原因径筏,伴魚少兒英語采用了 TiDB 與 Pulsar 聯(lián)合解決方案以滿足核心業(yè)務(wù)的需求葛假。
>>>石基信息
石基信息是一家以提供酒店業(yè)信息系統(tǒng)整體解決方案為主要業(yè)務(wù)的高科技公司,主要從事酒店信息管理系統(tǒng)軟件的開發(fā)與銷售滋恬、系統(tǒng)集成聊训、技術(shù)支持與服務(wù)業(yè)務(wù)。
在特定業(yè)務(wù)場景下恢氯,例如匯總?cè)蛩芯频瓴惋嫾瘓F(tuán)下單店的收入中心带斑,以及每個(gè)收入中心的不同消費(fèi)類別實(shí)時(shí)的明細(xì)數(shù)據(jù),則需要?jiǎng)?chuàng)建幾十上百萬的 Topic勋拟,Pulsar 可以支持百萬級(jí)別 Topic 數(shù)量的擴(kuò)展遏暴,同時(shí)還能一直保持良好的性能。
此外指黎,原先的 Kafka 集群在節(jié)點(diǎn)擴(kuò)展的時(shí)候朋凉,會(huì)觸發(fā) Consumer Rebalance,造成消費(fèi)者處理時(shí)間過長或者心跳超時(shí)等問題醋安,給業(yè)務(wù)帶來一定的影響杂彭。石基信息規(guī)劃采用 Pulsar + TiDB + Flink 方案墓毒,構(gòu)建面向未來的實(shí)時(shí)數(shù)倉解決方案,在滿足應(yīng)用層對(duì)分布式關(guān)系型數(shù)據(jù)庫需求的同時(shí)亲怠,提升實(shí)時(shí)的數(shù)據(jù)分析和服務(wù)效率所计。
最佳實(shí)踐
>>>知乎
知乎是中文互聯(lián)網(wǎng)綜合性內(nèi)容平臺(tái),以“讓每個(gè)人高效獲得可信賴的解答”為品牌使命和北極星团秽。知乎在首頁個(gè)性化內(nèi)容推薦主胧、已讀服務(wù)等場景中使用 TiDB 作為核心數(shù)據(jù)庫,通過 TiCDC Open Protocol 輸出日志到 Kafka习勤,進(jìn)行海量的消息處理踪栋。隨著業(yè)務(wù)量級(jí)的增長,在使用的過程中遇到了諸多因 Kafka 架構(gòu)和歷史版本實(shí)現(xiàn)上的限制而引發(fā)的問題图毕。
單 Partition 數(shù)據(jù)量巨大的 Kafka 集群不論是擴(kuò)容還是故障恢復(fù)都需要很長的時(shí)間夷都,業(yè)務(wù)無法容忍長時(shí)間的不可用,所以只能選擇犧牲數(shù)據(jù)予颤、重建集群的方式來加快恢復(fù)速度囤官。Kafka Topic 過重的資源消耗導(dǎo)致在單一集群上支撐數(shù)千乃至數(shù)萬的 Topic 相對(duì)困難。
早期版本 Kafka 不論是讀取還是寫入都需要發(fā)生在 Partition 當(dāng)前活躍的 Leader 上蛤虐,讀寫流量都很高的集群會(huì)對(duì) Broker 產(chǎn)生非常大的壓力党饮。Kafka 的一些問題在新版本中得到了解決,但是因?yàn)閰f(xié)議版本差別太大驳庭,無法直接通過升級(jí)服務(wù)端的方式進(jìn)行滾動(dòng)升級(jí)刑顺。
鑒于以上遇到的問題,考慮到 Pulsar 對(duì)原生跨地域復(fù)制(GEO-Replication)的支持同知乎未來基礎(chǔ)設(shè)施云原生化的方向更加契合嚷掠,知乎開始在一些業(yè)務(wù)中使用 Pulsar 替換 Kafka 模叙。
知乎對(duì) TiCDC 的核心模塊進(jìn)行了一系列開發(fā)工作(https://github.com/pingcap/ticdc/pull/751)尚蝌,把 TiCDC Sink 與 Pulsar 進(jìn)行對(duì)接,實(shí)現(xiàn) TiCDC 的數(shù)據(jù)同步到 Pulsar加缘。Pulsar 與 TiDB 聯(lián)合解決方案已經(jīng)在知乎的 CMDB 項(xiàng)目中得以應(yīng)用熊楼,解決了現(xiàn)階段在 Kafka 上遇到的問題霹娄。
Pulsar 對(duì)跨地域復(fù)制(GEO-Replication)的支持為生產(chǎn)者和消費(fèi)者提供了地理位置透明的連接,生產(chǎn)者在任意數(shù)據(jù)中心生產(chǎn)的內(nèi)容可以供任意一個(gè)數(shù)據(jù)中心的供消費(fèi)者使用鲫骗。分層存儲(chǔ)(Tiered Storage)為大量歷史數(shù)據(jù)的保存犬耻、審計(jì)、流量回放执泰、低頻明細(xì)歷史事件分析等需求提供更低成本的實(shí)現(xiàn)方式枕磁。從消費(fèi)模式看從數(shù)據(jù)多個(gè)副本并發(fā)讀取消息的能力,極大地提升了數(shù)據(jù)讀取的擴(kuò)展性术吝。此外计济,延遲消息分發(fā)(Delayed Message Delivery)便于實(shí)現(xiàn)許多特定的業(yè)務(wù)邏輯茸苇,可用于替代一些相對(duì)陳舊的歷史技術(shù)方案。
目前沦寂,知乎對(duì)于 Pulsar 的應(yīng)用處于早期階段学密,實(shí)際上線的業(yè)務(wù)數(shù)量占比較小,從前期業(yè)務(wù)的實(shí)踐來看传藏,Pulsar 與 TiDB 聯(lián)合解決方案的應(yīng)用取得了理想效果腻暮。知乎將推動(dòng)各項(xiàng)業(yè)務(wù)從 Kafka 向 Pulsar 進(jìn)行全面的遷移,未來也將應(yīng)用 Pulsar 到跨集群同步 TiDB 數(shù)據(jù)的場景下毯侦。
相關(guān)資源
TiCDC 實(shí)操指南
https://docs.pingcap.com/zh/tidb/stable/manage-ticdcApache Pulsar 官方文檔
http://pulsar.apache.org/docs/en/standalone/-
Pulsar 與 Kafka 的對(duì)比:
PingCAP 成立于 2015 年哭靖,是一家開源的新型分布式數(shù)據(jù)庫公司,秉承開源是基礎(chǔ)軟件的未來這一理念叫惊,PingCAP 持續(xù)擴(kuò)大社區(qū)影響力款青,致力于前沿技術(shù)領(lǐng)域的創(chuàng)新實(shí)現(xiàn)。其研發(fā)的分布式關(guān)系型數(shù)據(jù)庫 TiDB 項(xiàng)目霍狰,具備「分布式強(qiáng)一致性事務(wù)抡草、在線彈性水平擴(kuò)展、故障自恢復(fù)的高可用蔗坯、跨數(shù)據(jù)中心多活」等核心特性康震,是大數(shù)據(jù)時(shí)代理想的數(shù)據(jù)庫集群和云數(shù)據(jù)庫解決方案。目前已經(jīng)國內(nèi)外近 1000 家用戶將 TiDB 用于線上生產(chǎn)環(huán)境宾濒。
StreamNative 是一家圍繞 Apache 頂級(jí)項(xiàng)目 Apache Pulsar 打造下一代流數(shù)據(jù)平臺(tái)的開源基礎(chǔ)軟件公司腿短,秉承開源是基礎(chǔ)軟件的未來這一理念,專注于開源生態(tài)和社區(qū)的構(gòu)建绘梦,致力于前沿技術(shù)領(lǐng)域的創(chuàng)新橘忱,創(chuàng)始團(tuán)隊(duì)成員均是 Apache Pulsar 和 Apache BookKeeper 的核心 PMC 成員。