Kafka 和 Pulsar到底有什麼不同?

聞數起舞 發佈 2023-11-02T05:27:38.213625+00:00

導言Kafka 和 Pulsar 經常被拿來比較,因為它們都是數據平台,都以能夠處理高吞吐量、低延遲的 數據流.它們使企業能夠構建可擴展、容錯的數據管道和實時處理應用程式。它們的架構都是基於生產者-消費者模式構建的,這意味著它們都適用於各種用例,並能與現代數據生態系統無縫集成。

導言

Kafka 和 Pulsar 經常被拿來比較,因為它們都是數據平台,都以能夠處理高吞吐量、低延遲的 數據流.它們使企業能夠構建可擴展、容錯的數據管道和實時處理應用程式。它們的架構都是基於生產者-消費者模式構建的,這意味著它們都適用於各種用例,並能與現代數據生態系統無縫集成。

我撰寫了這篇文章,以幫助您了解這兩種解決方案的主要異同。我們將對 Kafka 和 Pulsar 進行比較,重點關注以下幾個方面:

  • 架構
  • 可擴展性、延遲和耐用性等運行屬性
  • 開發人員體驗、社區和生態系統
  • 許可、部署選項和託管產品

最後,我希望您能更清楚地了解每個平台的獨特功能,以及哪個平台最適合貴組織的需求。

Apache Kafka 概述

Kafka 是一個分布式事件流平台,旨在處理高速、大容量和容錯數據流。它最初由 LinkedIn 開發,後來捐贈給了 Apache 軟體基金會。Kafka 已迅速成為構建實時數據管道、事件驅動架構和微服務應用程式的熱門選擇。

核心能力

  • 發布和訂閱記錄流。
  • 以容錯和持久的方式存儲記錄流。
  • 與配套服務協同工作,在記錄發生時處理記錄流(Kafka Streams 和 ksqlDB)。

主要特點

  • 為實時數據流提供高吞吐量、低延遲的消息傳遞。
  • 支持數據分區和複製的可擴展架構。
  • 採用分布式容錯設計,具有很強的耐用性保證。
  • 利用 Kafka 生態系統(Kafka Streams 和 ksqlDB)的補充服務實現流處理功能。
  • 通過 Kafka Connect 提供豐富的連接器和集成生態系統。
  • 活躍的開源社區,支持多種程式語言。

Apache Pulsar 概述

Pulsar 是一個分布式消息傳遞系統,旨在處理高性能、低延遲的消息傳遞和數據流。Pulsar 最初由雅虎創建,後來捐贈給了阿帕奇軟體基金會,目前正在成為構建實時數據管道和事件驅動架構的有力選擇。

核心能力

  • 支持發布/子消息傳遞和消息隊列。
  • 以容錯和持久的方式保留信息流。
  • 本機支持多租戶。

主要特點

  • 適合實時數據流的高吞吐量、低延遲信息傳送。
  • 可擴展的多層架構,將存儲層與服務層分開。
  • 通過容錯設計(包括地理複製)確保數據的持久性。
  • 基本的內置流處理功能(Pulsar 功能)。
  • 通過 Pulsar IO 提供規模適中的連接器和集成生態系統。
  • 通過官方和第三方客戶端庫,支持多種程式語言。

Pulsar 與 Kafka:架構比較

現在我們來回顧一下 Pulsar 和 Kafka 的架構,以了解它們的異同。

Apache Kafka 架構

在高層次上,Kafka 架構由三個主要元素組成:生產者、消費者和經紀人。生產者生成數據並發送給經紀商,而消費者則讀取經紀商攝取的數據。

經紀人在 Kafka 集群上運行,而生產者和消費者則與系統完全分離。每個經紀商將生產者發送的實際數據存儲在主題(屬於同一組/類別的消息集合)中。這些主題可分為多個分區進行優化。數據分區具有容錯、可擴展性和並行性等優點。此外,每個代理可能只包含一個主題的部分分區,其餘分區則分配給其他代理。這種方法有助於平衡經紀人之間的工作量。為了提高可靠性,可以將 Kafka 集群配置為不同主題的副本,從而在代理不可用時限制停機時間。

在上圖中,你還可以看到一個 ZooKeeper 組件,它負責諸如

  • 存儲有關 Kafka 集群的元數據,例如有關主題、分區、代理和副本的信息。
  • 管理和協調 Kafka 代理,包括領導者選舉。
  • 為安全目的維護訪問控制列表(ACL)。

計劃 完全移除 ZooKeeper 依賴關係。(預計將於 2024 年 4 月發布)開始完全移除對 ZooKeeper 的依賴。取而代之的是一種名為 KRaft 的新機制(實際上它已經可以投入生產)。KRaft 無需在每個 Kafka 集群旁邊運行一個 ZooKeeper 集群,而是將元數據管理的責任轉移到 Kafka 本身。這簡化了架構,降低了操作複雜性,並提高了可擴展性。

還計劃 為 Kafka 引入分層存儲方法的分層存儲方法。本地層將使用 Kafka Brokers 上的本地磁碟來存儲數據。其設計目的是短時間(如幾小時)保留數據。與此同時,遠程存儲將使用 Hadoop Distributed File System(HDFS)和 Amazon S3 等系統來長期存儲數據(數天、數月等)。

Apache Pulsar 架構

與 Kafka 類似,Pulsar 的架構包括經紀人、生產者和消費者。經紀商在 Pulsar 集群上運行,而生產者和消費者則與系統完全分離。每個經紀人管理生產者在主題中發送的實際數據。就像 Kafka 的情況一樣,這些主題可以劃分成許多分區,從而提供容錯、可擴展性和並行性等優勢。

ZooKeeper 也出現在 Pulsar 的架構中。它被用於各種任務,包括配置管理、節點之間的協調以及維護 Pulsar 集群的元數據。如前所述,Kafka 正在從 ZooKeeper 遷離,取而代之的是 KRaft。Pulsar 並沒有讓 ZooKeeper 退出其架構,但它確實提供了替代方案:本地內存、 RocksDB和 etcd(注意,前兩者只適用於獨立的 Pulsar 或單節點 Pulsar 集群)。

與 Kafka 相比,Pulsar 最大的不同在於它將存儲層和服務層分開。在 Pulsar 的架構中,Broker 處理消息路由和傳遞,而 Apache BookKeeper 處理長期存儲。具體來說,生產者發送的每條消息都會被寫入 BookKeeper 記事本中保存。這種分層存儲方法意味著 Pulsar 的架構比 Kafka 的架構更複雜--有更多的組件需要管理(至少目前是這樣;但如前所述,Kafka 也將引入分層存儲方法)。另一方面,這種解耦意味著你可以獨立擴展存儲層和服務層。

Kafka 與 Pulsar:運行屬性

Pulsar 和 Kafka 在存儲和消息消耗模式、延遲、吞吐量、耐用性和可擴展性方面相比如何?

存儲和信息消耗

屬性

Kafka

Pulsar

存儲方法

分布式提交日誌

分層存儲

信息消費模式

拉(長時間投票)

推動

這兩種解決方案在信息消耗和存儲模式方面存在很大差異

卡夫卡的 基於日誌的存儲模型為每個主題分區使用一個僅有附加文件的日誌文件,信息按順序寫入並存儲在磁碟上。讀取是順序的,從偏移量開始(注意,消費者負責管理他們的偏移量)。寫入會追加到日誌的末尾。對於消息消費,Kafka 的拉動模型涉及消費者從代理處輪詢新消息。

相比之下,Pulsar 的分層存儲模型將信息分成較小的段,並將其存儲在多個 BookKeeper 分類帳(帳本)中。值得注意的是,信息段也可以 卸載到長期存儲解決方案如亞馬遜 S3 或谷歌雲存儲。信息通過基於推送的模式消耗。

就這些差異談幾點看法:

  • 雖然 Pulsar 的分層架構會增加網絡利用率,並需要將信息寫入磁碟兩次,但它也能對數據進行分段、有效管理,並在某些情況下加快檢索速度。
  • 與 Kafka 的簡單架構相比,Pulsar 的分層架構可能會增加操作的複雜性(需要管理的組件更多)。
  • 在處理滯後的消費者時,Kafka 和 Pulsar 模型都可能導致緩存刷新問題。由於額外的網絡跳轉和 I/O 操作, Pulsar 的方法可能會加劇這一問題。
  • 與 Kafka 相比, Pulsar 的推送模式可以減少延遲和資源消耗。另一方面,在 Kafka 中,消費者可以拉取信息,從而管理自己的流量控制。

性能

屬性

Kafka

Pulsar

吞吐量

Kafka 能夠處理高吞吐量工作負載(每秒數百萬條信息)

Pulsar 還支持高吞吐量,可與 Kafka 相媲美

延遲

低延遲(毫秒級)

低延遲(毫秒級)

毫無疑問,Kafka 和 Pulsar 都是高性能的分布式流媒體和消息傳遞平台。很難(甚至不可能)說哪一個在延遲和吞吐量方面更勝一籌。 一些基準測試表明 Pulsar 性能更好,而 其他基準則顯示 Kafka 更勝一籌。

儘管如此,基於推送的消息傳遞系統和分層存儲模型(如 Pulsar)確實有助於縮短延遲時間,因為它們能促進數據組織,提高存儲資源的使用效率,並能加快數據檢索速度。

相反,Kafka 依靠的是連續輪詢過程,即客戶端在設定的時間間隔內重複請求數據。在消息量較少的時期,這可能會導致較高的延遲,因為客戶端可能會在輪詢間隔之間空閒等待。

不過,Pulsar 相對於 Kafka 的理論優勢在實踐中是否成立取決於具體的工作負載和使用模式。最好還是進行自己的基準測試,以確定這方面的情況。

可擴展性和耐用性

屬性

Kafka

Pulsar

可擴展性

高度可擴展性(每天可處理 PB 級數據和數萬億條信息)

高度可擴展,可與 Kafka 相媲美

數據複製

跨多個節點複製數據,實現容錯。支持全局數據複製。

在多個存儲單元間複製數據,實現容錯。支持全局數據複製。

信息持久性

Kafka 可配置為無限期存儲數據

Pulsar 可配置為無限期存儲信息

Kafka 和 Pulsar 提供耐久性功能,以確保高可用性和系統彈性。這兩種解決方案都允許您無限期地存儲消息,這對於發生故障或災難時的恢復和連續性至關重要。此外,Kafka 和 Pulsar 還支持地理複製(在不同數據中心甚至不同地區之間)。Kafka 支持主題級別的複製;而 Pulsar 則提供主題和命名空間級別的複製。值得注意的是,與 Kafka 相比,Pulsar 在地理複製數據時需要額外的 "全局 "ZooKeeper 集群,這增加了複雜性。

Kafka 和 Pulsar 都是高度可擴展的平台。與 Kafka 相比,Pulsar 的分段、分層架構可能會在一定程度上增加靈活性並提高可擴展性(因為 Pulsar 的數據層和服務層是獨立擴展的)。

迄今為止,Kafka 在可擴展性方面的最大瓶頸是 Apache ZooKeeper 的使用。ZooKeeper 存儲 Kafka 的元數據,包括主題、分區、副本及其配置的信息。ZooKeeper 限制了 zNode(ZooKeeper 中的數據節點)中可存儲數據的最大大小。這種數據大小限制間接限制了 Kafka 可管理的分區數量(每個集群大約可管理 500K 個分區)。

不過,如前所述,Kafka 正在移除對 ZooKeeper 的依賴,取而代之的是 KRaft。換句話說,ZooKeeper 對每個集群施加的 500K 分區限制將不復存在。KRaft 還帶來了其他好處--例如,它使控制器的故障切換幾乎瞬時完成,並簡化了 Kafka 的架構、部署和配置。

無論是否使用 KRaft,Kafka 都能毫無困難地擴展到絕大多數用例。Pulsar 也非常適合處理大規模場景。事實上,除非您處理的是超大規模場景(PB 級數據和每天數萬億條消息),否則您不太可能在使用這兩個工具中的任何一個時遇到嚴重的可擴展性問題。即便如此,通過重新架構或優化 Kafka 或 Pulsar 部署,你也不可能無法解決這些問題。

Kafka 與 Pulsar:生態系統

到目前為止,我們已經看到 Kafka 和 Pulsar 是高性能、高擴展性和持久性的解決方案。然而,在選擇數據流平台時,並不能只考慮延遲和規模。有鑑於此,讓我們來比較一下 Kafka 和 Pulsar 的開發人員體驗和生態系統。

GitHub 統計、在線資源、社區和文檔、學習和培訓

屬性

Kafka

Pulsar

GitHub 統計數據(準確時間截至 2023 年 7 月 11 日)

25.3k 星級

12.8k 貨叉

1.1k 觀看

12.9k 星級

3.3 千貨叉

409 觀看

在線資源

論壇、眾多博客、教程、視頻、電子書、在線課程、聚會等。

論壇、博客、教程、視頻、電子書、聚會等(數量不如 Kafka 的多)。

社區和文獻

大型、活躍的社區。

大量文件。

社區規模不斷擴大,但明顯小於卡夫卡社區。

文檔不錯,但不如卡夫卡的全面。

學習和培訓

許多在線課程、研討會和會議。

Kafka 的入門相對容易,但掌握起來卻充滿挑戰。

學習曲線更簡單,因為只有兩個系統需要學習:Kafka 和 ZooKeeper(後者即將退役)。

與卡夫卡相比,課程和研討會更少。

Pulsar 相對容易上手,但要精通卻很有挑戰性。

學習曲線較長,因為有三個系統需要學習:Pulsar、Apache BookKeeper 和 ZooKeeper(以及後者的潛在替代方案,如 RocksDB 或 etcd)。

您需要了解一些背景知識,才能充分理解 Kafka 和 Pulsar 社區和在線資源之間的差異。

Kafka 於 2012 年成為正式的 Apache 軟體基金會項目,而 Pulsar 則在四年後的 2016 年達到了同樣的里程碑。此外,Kafka 的開源特性促進了其 迅速普及實時事件流解決方案的需求激增。

這在很大程度上說明了 Kafka 在以下方面比 Pulsar 更有優勢 的優勢.話雖如此、 Pulsar 的社區正在經歷增長,這始終是一個項目未來發展的良好指標。

總之,不可否認的是,在文檔、在線資源和社區方面,Kafka 比 Pulsar 更勝一籌。Kafka 也更受歡迎(從 GitHub 的統計數據來看),學習起來也更容易(儘管 Kafka 和 Pulsar 都很難掌握)。

CLI 和客戶端

屬性

Kafka

Pulsar

CLI

Kafka 包含一套內置 CLI 工具,允許您執行各種操作,例如

  • 創建、列出和刪除主題。
  • 發送和接收信息
  • 名單經紀人和消費者團體。
  • 檢索有關 Kafka 群集的信息(如版本、代理 ID)。
  • 創建和刪除訪問控制列表
  • 註冊和檢查模式。

與 Kafka 類似,Pulsar 也提供 CLI 工具,可用於各種用途。例如

  • 創建、列出和刪除租戶、命名空間、主題、訂閱、函數和模式。
  • 發送和接收信息
  • 管理連接器和軟體包
  • 管理脈衝星星團(如創建和刪除星團)。

客戶

眾多官方和第三方客戶端,支持多種程式語言

Pulsar 提供多種官方和第三方客戶端庫,支持多種語言和平台

總的來說,在 CLI 工具方面,Kafka 和 Pulsar 似乎不相上下。兩者都提供 CLI,允許你管理 Kafka/Pulsar 部署並與之交互。當然,在使用這些 CLI 所能做的事情方面也存在一些差異(其中一些差異源於 Kafka 和 Pulsar 是不同的平台,具有一些不同的功能)。例如 卡夫卡 CLI為管理消費者組提供了更好、更詳細的命令,而 Pulsar 的 CLI工具允許你管理包(Kafka 的 CLI 無法做到這一點)。

Kafka 和 Pulsar 都通過其客戶端庫支持多種程式語言。Kafka 在支持的語言數量上略勝一籌,這主要是由於其存在時間較長,應用範圍較廣,因此開發了更多的第三方客戶端庫。詳情請參見下一節。

語言支持

程式語言

Kafka

Pulsar

C/C++

官方 (Confluent)

官方

C#

官方 (Confluent)

官方

.NET

官方 (Confluent)

官方

PowerShell

第三方

不支持

Python

官方 (Confluent)

官方

Go

官方 (Confluent)

官方

Erlang

第三方

第三方

Clojure

第三方

第三方

Ruby

第三方

第三方

Node.js

官方 (Confluent)

官方

Perl

第三方

不支持

PHP

第三方

第三方

Rust

第三方

第三方

Java

官方(阿帕奇卡夫卡)

官方

Scala

官方(阿帕奇卡夫卡)

第三方

Swift

第三方

不支持

Husky

第三方

第三方

Kafka 提供 Java 和 Scala 官方客戶端庫。Confluent(由 Apache Kafka 的創建者創立)提供了其他一些官方支持的客戶端,針對 C/C++、C#/.NET、Python、Go 和 Node.js。同樣,Pulsar 也有針對 Java、C/C++、C#/.NET、Python、Go 和 Node.js 的官方客戶端庫。從本質上講,Pulsar 和 Kafka 通過其官方客戶端庫針對的是相同的程式語言(唯一明顯的區別是 Kafka 官方客戶端支持 Scala,而 Pulsar 並不支持 Scala)

除了這些官方客戶端,還有許多第三方 Pulsar 和 Kafka 客戶端庫,其中大部分是開源項目。Kafka 稍占優勢,因為你可以找到 PowerShell、Perl 和 Swift 的 Kafka 客戶端(這些語言沒有 Pulsar 客戶端庫)。

請注意,Kafka 和 Pulsar 還提供一些與語言無關的客戶端。例如,Pulsar 提供 REST 和 WebSocket 客戶端,而 Kafka 則提供多個 HTTP 代理客戶端(包括官方客戶端和社區客戶端)。了解更多有關 Kafka 客戶端和 Pulsar 客戶端.

生態系統

屬性

Kafka

Pulsar

集成

數以百計的匯和源連接器以及與其他系統的集成

數十個匯和源連接器以及與其他系統的集成

流處理

內置強大的流處理功能(通過 Kafka Streams)。


與其他流處理解決方案集成。

內置基本流處理功能(Pulsar 功能)。


與其他流處理解決方案集成。

與 Pulsar 相比,Kafka 擁有更大的生態系統。通過連接器 Kafka Connect 框架讓你可以輕鬆地將數據從其他系統攝取到 Kafka,並將數據從 Kafka 主題流式傳輸到不同的目的地。目前已有數百種針對不同類型系統的連接器,如資料庫(如 MongoDB)、存儲系統(如 Azure Blob Storage)、消息系統(RabbitMQ、JMS)等。

與此同時,雖然 Pulsar 的生態系統不如 Kafka 成熟,但它仍然提供了大量、多樣的連接器,並與 Aerospike、Datadog 和 RabbitMQ 等其他系統集成。

在內置流處理功能方面,Kafka 比 Pulsar 更勝一籌。其 卡夫卡流庫允許您構建 實時流處理應用程式Kafka Streams 庫允許你構建實時流處理應用程式,並具有連接、聚合、窗口和精確一次處理等功能。相比之下,Pulsar 只通過 脈衝星函數接口為流處理提供基本功能,適用於簡單的回調。除了內置的流處理功能,Kafka 和 Pulsar 還能與 Apache Flink、Apache Storm 和 Apache Beam 等流處理解決方案集成。

Kafka 與 Pulsar:許可證和部署選項

本節比較了 Kafka 和 Pulsar 的許可條款、商業支持選項、部署模式和託管服務產品。

許可和商業支持

屬性

Kafka

Pulsar

許可

開放原始碼(Apache許可證 2.0)

開放原始碼(Apache許可證 2.0)

商業支持

由許多頂級供應商提供

與 Kafka 相比,提供商業支持的供應商更少

如您所見,Kafka 和 Pulsar 在許可方面沒有區別。這兩個平台都是開源的--它們都使用 Apache License 2.0.

儘管如此,如果不想自己管理 Kafka/Pulsar,也有第三方供應商提供商業支持。不過,值得指出的是,與 Pulsar 相比,Kafka 的商業支持更為成熟和廣泛。有關這方面的更多信息,請參見下一節。

部署模式和託管產品

部署

Kafka

Pulsar

內部部署

貨櫃

Docker, 基於容器的平台

Docker, 基於容器的平台

AWS、GCP、Azure 和其他雲平台

AWS、GCP、Azure 和其他雲平台

Kubernetes

Confluent Platform、Strimzi、Koperator

Pulsar 舵圖、StreamNative 平台

託管服務

例子包括 Quix、Confluent Cloud、Amazon MSK、Aiven、Instaclustr、Azure HDInsight

實例包括 DataStax(Astra Streaming、Luna Streaming)、StreamNative Cloud、Pandio

Kafka 和 Apache 可以通過多種方式靈活部署,如內部部署、雲部署、使用 Docker 或 Kubernetes。此外,許多託管服務提供商都支持 Kafka 和 Pulsar,這可以簡化這些系統的部署、擴展和管理。不過,需要注意的是,Kafka 供應商的數量更多(也更知名)。這並不令人意外,畢竟 Kafka 的歷史更悠久,與 Pulsar 相比更早(也更廣泛)得到採用。

Kafka與 Pulsar:安全性

在選擇數據流平台時,安全性往往是首要考慮的問題。那麼 Pulsar 和 Kafka 相比如何呢?

屬性

Kafka

Pulsar

認證

SASL/SCRAM, SASL/PLAIN, OAuth

基於令牌、TLS、OAuth 2.0、Kerberos

授權

訪問控制列表(ACL)

基於角色的訪問控制(RBAC)

加密

對傳輸中的數據進行 SSL/TLS 加密。

可使用其他工具或框架對數據進行端到端加密。

對傳輸中的數據進行 SSL/TLS 加密。

端到端加密

審計

非內置,需要外部工具

內置審計日誌

數據隔離

基於主題

多租戶、命名空間隔離

Kafka 和 Pulsar 都提供可靠的安全功能,如加密和強大的身份驗證和授權機制

在某些方面,Pulsar 具有優勢:例如,它原生支持端到端加密,並內置審計日誌。這並不是說 Pulsar 本身就比 Kafka 更安全,也不是說 Kafka 缺乏關鍵的安全功能,但值得注意的是,Pulsar 提供了一些額外的安全機制,可能會派上用場。

結論

正如我們所看到的,Kafka 和 Pulsar 都是數據流平台,具有一些相似的特點。它們都是高吞吐量、低延遲、持久耐用和高度可擴展的解決方案,並通過官方和第三方客戶端 SDK 實現了良好的程式語言覆蓋。

不過,它們之間也有很多不同之處。例如,Pulsar 具有一些額外的安全功能(如內置審計日誌)。它還採用分層架構,將存儲層與服務層分開。這為您提供了靈活性,因為這些層可以根據需求獨立擴展。

另一方面,Kafka 的架構沒那麼複雜,組件較少。此外,與 Pulsar 相比,Kafka 擁有更強大、更成熟的連接器和集成生態系統,並提供更豐富的流處理功能。Kafka 還擁有一個規模更大的社區,而且它在超大規模的實戰中得到了 Netflix 和 LinkedIn 等巨頭更廣泛的檢驗。

Kafka 或 Pulsar 是否是流使用案例的最佳選擇(或者是否更適合亞馬遜 Kinesis 等其他平台),最終取決於您的決定。 查看 Kafka 與 Kinesis 的比較。).

原文連結 https://quix.io/blog/kafka-vs-pulsar-comparison

關鍵字: