大數據時代,各種應用對消息解決方案的要求不只僅是數據的流動,而是要在持續增加的服務和應用中傳輸海量數據,進行智能的處理和分析,幫助業務作出更加精準的決策。git
Pulsar 與 TiDB 聯合解決方案提供實時、高吞吐、穩定的數據輸出,知足用戶在大數據場景中對各種數據的應用與分析需求,普遍適用於日誌收集、監控數據聚合、流式數據處理、在線和離線分析等場景。github
Apache Pulsar(如下簡稱:Pulsar)是雲原生的分佈式消息流系統,採用計算和存儲分層的架構和以 Segment 爲中心的分片存儲,具備更好的性能、可擴展性和靈活性,是一款能夠無限擴展的分佈式消息隊列。目前,StreamNative 公司提供基於 Pulsar 平臺的下一代流數據總體解決方案。數據庫
Pulsar 起初做爲消息整合平臺在 Yahoo 內部開發和部署,爲 Yahoo Finance、Yahoo Mail 和 Flickr 等雅虎內部關鍵應用鏈接數據。目前,Pulsar 在雅虎全球的 10 多個數據中心提供服務,具有全網格複製能力,支持 140 萬個主題,處理超過 1000 億條消息,總體消息的發佈延遲小於 5 毫秒。2016 年 Yahoo 把 Pulsar 開源並捐給 Apache 軟件基金會(ASF),2018 年 Pulsar 畢業成爲 Apache 軟件基金會的頂級項目。apache
與大多數消息傳遞系統的單片架構不一樣,Pulsar 採用分層分片式的架構,服務層和存儲層都可以獨立擴展,以提供更好的性能、可擴展性和靈活性,這種設計對容器很是友好,使得 Pulsar 成爲流原平生臺的理想選擇。緩存
Pulsar 的企業特性包括消息的持久化存儲、多租戶、多機房互聯互備、加密和安全性等。Pulsar 提供和 Kafka 兼容的 API,以及 Kafka-On-Pulsar(KoP) 組件來兼容 Kafka 的應用程序。KoP 在 Pulsar Broker 中解析 Kafka 協議,用戶不用改動客戶端的任何 Kafka 代碼就能直接使用 Pulsar。安全
TiDB 是 PingCAP 公司自主設計、研發的開源分佈式關係型數據庫,是一款同時支持在線事務處理與在線分析處理 (HTAP)的融合型分佈式數據庫產品,具有水平擴容或者縮容、金融級高可用、實時 HTAP、雲原生的分佈式數據庫、兼容 MySQL 5.7 協議和 MySQL 生態等重要特性。在 4.0 以前,TiDB 提供 TiDB Binlog 實現向下遊平臺的近實時複製,在 TiDB 4.0 中,引入 TiCDC 做爲 TiDB 變動數據的捕獲框架。 架構
TiCDC(TiDB Change Data Capture)是用來識別、捕捉和輸出 TiDB/TiKV 集羣上數據變動的工具系統。它既能夠做爲 TiDB 增量數據同步的工具,將 TiDB 集羣的增量數據同步至下游數據庫,也提供開放數據協議,支持把數據發佈到第三方系統。TiCDC 是 TiDB Binlog 的升級方案 ,提供低延遲、高可用的數據訂閱和同步服務,支持超大規模集羣的水平擴展。併發
在 TiDB 生態鏈上,TiCDC 做爲 TiDB 的數據出口有着很是重要的地位,其做用包括:構建 TiDB 主從和災備系統,連接 TiDB 和其它異構數據庫,經過開放數據協議(Open Protocol )與第三方數據生態系統進行對接。框架
TiCDC Open Protocol 是一種行級別的數據變動通知協議,爲監控、緩存、全文索引、分析引擎、異構數據庫的主從複製等提供數據源。TiCDC 遵循開放數據協議,向 MQ (Message Queue) 等第三方數據媒介複製 TiDB 的數據變動。運維
在 TiDB v4.0.4 版本中,TiCDC 開放數據協議(Open Protocol )能夠與 Pulsar 實現無縫對接,提供實時、高吞吐、穩定的數據輸出,知足用戶在大數據場景中對各種數據的應用與分析需求,普遍適用於日誌收集、監控數據聚合、流式數據處理、在線和離線分析等場景。
藉助 Pulsar 所具備的 GEO-Replication 功能,Pulsar 與 TiDB 聯合解決方案能夠爲 TiCDC 的消費者帶來地理位置無關的變動事件訂閱能力。同時,Pulsar 集羣的快速節點擴容、故障的快速恢復能力能夠爲 TiCDC 事件的消費方提供更優的數據實時性保障。
伴魚少兒英語
伴魚少兒英語是目前飛速成長的互聯網在線英語教育品牌之一,致力於打造更創新、更酷、讓學英語更有效的新一代互聯網產品。
伴魚少兒英語原先採用的 Kafka 集羣會遇到 Consumer Rebalance 問題,在剔除掉沒法消費或者過慢的消費者的時候,會對其餘消費者形成因消息過慢觸發心跳超時等問題,Pulsar 在運維層面更方便和安全一些。
Pulsar 是原生支持跨數據中心的流數據同步方案,能夠提供跨地域的複製功能,知足國內和海外數據中心機房雙活的需求。此外,Pulsar 具有延遲隊列的功能,隨着大量 Topic 的建立,依然能夠提供出色的性能和延遲保障,消息分散的落盤策略不會形成 IO 對磁盤的競爭。
基於上述緣由,伴魚少兒英語採用了 TiDB 與 Pulsar 聯合解決方案以知足核心業務的需求。
石基信息
石基信息是一家以提供酒店業信息系統總體解決方案爲主要業務的高科技公司,主要從事酒店信息管理系統軟件的開發與銷售、系統集成、技術支持與服務業務。
在特定業務場景下,例如彙總全球全部酒店餐飲集團下單店的收入中心,以及每一個收入中心的不一樣消費類別實時的明細數據,則須要建立幾十上百萬的 Topic,Pulsar 能夠支持百萬級別 Topic 數量的擴展,同時還能一直保持良好的性能。
此外,原先的 Kafka 集羣在節點擴展的時候,會觸發 Consumer Rebalance,形成消費者處理時間過長或者心跳超時等問題,給業務帶來必定的影響。石基信息規劃採用 Pulsar + TiDB + Flink 方案,構建面向將來的實時數倉解決方案,在知足應用層對分佈式關係型數據庫需求的同時,提高實時的數據分析和服務效率。
知乎
知乎是中文互聯網綜合性內容平臺,以「讓每一個人高效得到可信賴的解答」爲品牌使命和北極星。知乎在首頁個性化內容推薦、已讀服務等場景中使用 TiDB 做爲核心數據庫,經過 TiCDC Open Protocol 輸出日誌到 Kafka,進行海量的消息處理。隨着業務量級的增加,在使用的過程當中遇到了諸多因 Kafka 架構和歷史版本實現上的限制而引起的問題。
單 Partition 數據量巨大的 Kafka 集羣不管是擴容仍是故障恢復都須要很長的時間,業務沒法容忍長時間的不可用,因此只能選擇犧牲數據、重建集羣的方式來加快恢復速度。Kafka Topic 太重的資源消耗致使在單一集羣上支撐數千乃至數萬的 Topic 相對困難。
早期版本 Kafka 不管是讀取仍是寫入都須要發生在 Partition 當前活躍的 Leader 上,讀寫流量都很高的集羣會對 Broker 產生很是大的壓力。Kafka 的一些問題在新版本中獲得瞭解決,可是由於協議版本差異太大,沒法直接經過升級服務端的方式進行滾動升級。
鑑於以上遇到的問題,考慮到 Pulsar 對原生跨地域複製(GEO-Replication)的支持同知乎將來基礎設施雲原生化的方向更加契合,知乎開始在一些業務中使用 Pulsar 替換 Kafka 。
知乎對 TiCDC 的核心模塊進行了一系列開發工做( https://github.com/pingcap/ti... ),把 TiCDC Sink 與 Pulsar 進行對接,實現 TiCDC 的數據同步到 Pulsar。Pulsar 與 TiDB 聯合解決方案已經在知乎的 CMDB 項目中得以應用,解決了現階段在 Kafka 上遇到的問題。
Pulsar 對跨地域複製(GEO-Replication)的支持爲生產者和消費者提供了地理位置透明的鏈接,生產者在任意數據中心生產的內容能夠供任意一個數據中心的供消費者使用。分層存儲(Tiered Storage)爲大量歷史數據的保存、審計、流量回放、低頻明細歷史事件分析等需求提供更低成本的實現方式。從消費模式看從數據多個副本併發讀取消息的能力,極大地提高了數據讀取的擴展性。此外,延遲消息分發(Delayed Message Delivery)便於實現許多特定的業務邏輯,可用於替代一些相對陳舊的歷史技術方案。
目前,知乎對於 Pulsar 的應用處於早期階段,實際上線的業務數量佔比較小,從前期業務的實踐來看,Pulsar 與 TiDB 聯合解決方案的應用取得了理想效果。知乎將推進各項業務從 Kafka 向 Pulsar 進行全面的遷移,將來也將應用 Pulsar 到跨集羣同步 TiDB 數據的場景下。
Pulsar 與 Kafka 的對比:
PingCAP 成立於 2015 年,是一家開源的新型分佈式數據庫公司,秉承開源是基礎軟件的將來這一理念,PingCAP 持續擴大社區影響力,致力於前沿技術領域的創新實現。其研發的分佈式關係型數據庫 TiDB 項目,具有「分佈式強一致性事務、在線彈性水平擴展、故障自恢復的高可用、跨數據中心多活」等核心特性,是大數據時代理想的數據庫集羣和雲數據庫解決方案。目前已經國內外近 1000 家用戶將 TiDB 用於線上生產環境。StreamNative 是一家圍繞 Apache 頂級項目 Apache Pulsar 打造下一代流數據平臺的開源基礎軟件公司,秉承開源是基礎軟件的將來這一理念,專一於開源生態和社區的構建,致力於前沿技術領域的創新,創始團隊成員均是 Apache Pulsar 和 Apache BookKeeper 的核心 PMC 成員。