Pulsar vs Kafka?一文掌握高效能訊息元件Pulsar基礎知識

語言: CN / TW / HK

什麼是Pulsar?

Apache Pulsar 是 Apache 軟體基金會頂級專案,是下一代 雲原生 分散式訊息流平臺,集訊息、儲存、輕量化函式式計算為一體,採用計算與儲存分離架構設計,支援多租戶、持久化儲存、多機房跨區域資料複製,具有強一致性、高吞吐以及低延時的高可擴充套件流資料儲存特性。

Pulsar 的關鍵特性

  • Pulsar 的單個例項原生支援多個叢集,可跨機房在叢集間無縫地完成訊息複製。
  • 極低的釋出延遲和端到端延遲。
  • 可無縫擴充套件到超過 一百萬 個 topic。
  • 簡單的客戶端 API,支援 Java、Go、Python 和 C++。
  • 支援多種 topic 訂閱模式(獨佔訂閱、共享訂閱、故障轉移訂閱)。
  • 通過 Apache BookKeeper 提供的持久化訊息儲存機制保證訊息傳遞 。
  • 由輕量級的 serverless 計算框架 Pulsar Functions 實現流原生的資料處理。
  • 基於 Pulsar Functions 的 serverless connector 框架 Pulsar IO 使得資料更易移入、移出 Apache Pulsar。
  • 分層式儲存可在資料陳舊時,將資料從熱儲存解除安裝到冷/長期儲存(如S3、GCS)中。

Pulsar vs Kafka

下方連結為 Pulsar與 Kafka詳細對比報告,可自行下載檢視

http://streamnative.io/en/blog/tech/2020-07-08-pulsar-vs-kafka-part-1

http://streamnative.io/zh/blog/tech/2020-07-22-pulsar-vs-kafka-part-2

  • 效能與可用性

基準測試(StreamNative)

資料來源

http://mp.weixin.qq.com/s/UZJTOEpzX8foUJv9XMJxOw

http://streamnative.io/en/blog/tech/2020-11-09-benchmark-pulsar-kafka-performance

http://streamnative.io/whitepaper/benchmark-pulsar-vs-kafka

  • 吞吐量(Throughput)

在與 Kafka 的永續性保證相同的情況下, Pulsar 可達到 605 MB /s 的釋出和端到端 吞吐量 (與 Kafka 相同)以及 3.5 GB/s 的 catch-up read 吞吐量(比 Kafka 高 3.5 倍)。Pulsar 的吞吐量不會因分割槽數量的增加和永續性級別的改變而受到影響,而 Kafka 的吞吐量會因分割槽數量或永續性級別的改變而受到嚴重影響。

  • 延遲性(Latency)

在不同的測試例項(包括不同訂閱數量、不同主題數量和不同永續性保證)中,Pulsar 的延遲顯著低於 Kafka。Pulsar P99 延遲在 5 到 15 毫秒之間。Kafka P99 延遲可能長達數秒,並且會因主題數量、訂閱數量和不同永續性保證而受到巨大影響。

  • 功能性

  1. 多語言客戶端(C/C++、Python、Java、Go ...)
  2. 管理工具(Pulsar Manager vs Kafka Manager)
  3. 內建流處理Built-In Stream Processing(Pulsar Function vs Kafka Streams)
  4. Rich Integrations (Pulsar Connectors)
  5. Exactly-Once Processing
  6. 日誌壓縮
  7. 多租戶(Pulsar)
  8. 安全管理(Pulsar)

架構設計

Pulsar 採用儲存和計算分離的軟體架構。 在訊息領域,Pulsar 是第一個將儲存計算分離 雲原生 架構落地的 開源 專案 。由於在 Broker 層不儲存任何資料,這種架構為使用者帶來了更高的可用性、更靈活的擴容和管理、避免資料的 reblance 和 catch-up。

在 Apache Pulsar 的分層架構中,服務層 Broker 和儲存層 BookKeeper 的每個節點都是對等的。Broker 僅僅負責訊息的服務支援,不儲存資料。這為服務層和儲存層提供了瞬時的節點擴充套件和無縫的失效恢復。

持久化儲存(Persistent storage)

Pulsar 使用 BookKeeper 分散式日誌儲存資料庫作為儲存元件,在底層使用日誌作為儲存模型。

Pulsar 將所有未確認訊息(即未處理訊息)儲存在 BookKeeper 中的多個“bookie”伺服器上。

BookKeeper 通過 Quorum Vote 的方式來實現資料的一致性,跟 Master/Slave 模式不同,BookKeeper 中每個節點也是對等的,對一份資料會 併發 地同時寫入指定數目的儲存節點。

一個Topic實際上是一個ledgers流。Ledger本身就是一個日誌。所以一系列的子日誌(Ledgers)組成了一個父日誌(Topic)。

Ledgers追加到一個Topic,條目(訊息或者一組訊息)追加到Ledgers。Ledger一旦關閉是不可變的。Ledger作為最小的刪除單元,也就是說我們不能刪除單個條目而是去刪除整個Ledger。

Ledgers本身也被分解為多個Fragment。Fragment是BookKeeper叢集中最小的分佈單元。

每個Ledger(由一個或多個Fragment組成)可以跨多個BookKeeper節點(Bookies)進行復制,以實現資料容災和提升讀取效能。每個Fragment都在一組不同的Bookies中複製(存在足夠的Bookies)。

conf/bookkeeper.conf

#############################################################################

## Server parameters

#############################################################################

# Directories BookKeeper outputs its write ahead log.

# Could define multi directories to store write head logs, separated by ','.

journalDirectories=/data/appData/pulsar/bookkeeper/journal

#############################################################################

## Ledger storage settings

#############################################################################

# Directory Bookkeeper outputs ledger snapshots

# could define multi directories to store snapshots, separated by ','

ledgerDirectories=/data/appData/pulsar/bookkeeper/ledgers

conf/broker.conf

### --- Managed Ledger --- ###

# Number of bookies to use when creating a ledger

managedLedgerDefaultEnsembleSize=2

# Number of copies to store for each message

managedLedgerDefaultWriteQuorum=2

# Number of guaranteed copies (acks to wait before write is complete)

managedLedgerDefaultAckQuorum=2

元資料儲存(Metadata storage)

Pulsar 和BookKeeper都使用Apache Zookeeper 來儲存元資料和監控節點健康狀況。

$ $PULSAR_HOME/bin/pulsar zookeeper-shell

> ls /

[admin, bookies, counters, ledgers, loadbalance, managed-ledgers, namespace, pulsar, schemas, stream, zookeeper]

更多福利

雲智慧已開源集輕量級、聚合型、智慧運維為一體的綜合運維管理平臺OMP(Operation Management Platform) ,具備 納管、部署、監控、巡檢、自愈、備份、恢復 等功能,可為使用者提供便捷的運維能力和業務管理,在提高運維人員等工作效率的同時,極大提升了業務的連續性和安全性。點選下方地址連結,歡迎大家給OMP點贊送star,瞭解更多相關內容~

GitHub地址: http://github.com/CloudWise-OpenSource/OMP

Gitee地址:http://gitee.com/CloudWise/OMP

微信掃描識別下方二維碼,備註【OMP】加入AIOps社群運維管理平臺OMP開發者交流群,與更多行業大佬一起交流學習~