當前位置:
首頁 > 科技 > Kafka和消息隊列之間的超快速比較

Kafka和消息隊列之間的超快速比較

作者丨Hendrik Swanepoel

翻譯丨Vincent

本文的目的是讓讀者快速了解Kafka與消息隊列之間的關係,告訴讀者為什麼會考慮使用它的原因。以下為譯文。

Kafka最初是由Linkedin社區開發的一項技術。簡而言之,它有點像消息隊列系統,但它與消息隊列系統不同的就是它能夠支持pub/sub,可以在許多伺服器上進行擴展,並重新播放消息。

平時你可能不太關注這些問題,但是當你想要採用響應式編程風格而不是命令式編程風格時,上述這些就是你需要進行關注的了。

命令式編程和響應式編程之間的區別

命令式編程是我們一開始就採用的編程類型。當發生了一些事情,換句話說,事件發生了,然後你的代碼被告知發生了該事件。例如,用戶單擊一個按鈕,你在代碼中處理這個事件的地方,就決定了你希望系統接下來觸發哪些動作。您可以將記錄保存到資料庫中,調用另一個服務,發送電子郵件,或者將這些動作組合在一起。這裡最重要一點是,事件是與這些具體發生的動作是直接耦合的。

響應式編程使用戶能夠響應發生的事件,通常以流的形式出現。多個關注點可以訂閱相同的事件,並讓事件在它的域中產生影響,而不管其他域發生了什麼。換句話說,它支持鬆散耦合的代碼,可以很容易地擴展到更多的功能。有可能在不同的棧中編碼的各種大的下流系統會受到事件的影響,甚至是在雲的某個地方執行的一大堆沒有伺服器的函數。

從消息隊列到Kafka

為了理解Kafka會給你的架構帶來什麼,讓我們先談論一下消息隊列。我們之所以從消息隊列開始,是因為我們將討論它的局限性,然後看看Kafka是如何解決這些問題的。

消息隊列允許一組訂閱者從隊列的末尾提取一條或多條消息。在消息被移除之前,隊列通常允許執行某些級別的事務,以確保在消息被刪除之前執行所需的操作。

並不是所有的隊列系統都具有相同的功能,但是一旦消息被處理了,就會從隊列中刪除掉。如果你仔細想想,它其實與命令式編程非常類似,首先得發生一些事情,然後起始系統決定在下游系統中應該執行哪些操作。

儘管可以在隊列中擴展多個消費者,但它們都包含相同的功能,而這只是為了處理負載和並行處理消息,換句話說,它不允許你基於相同的事件啟動多個獨立的操作。隊列消息的所有處理器將在相同的域中執行相同類型的邏輯。這意味著隊列中的消息實際上是命令,它適合於命令式編程,而不是一個適合於響應式編程的事件。

對於隊列,通常在相同的域中為隊列中的每個消息執行相同的邏輯

另一方面,使用Kafka,你可以將消息/事件發布到主題上,它們會被持久化。當消費者收到這些消息時,他們也不會被移除掉。這允許你重放消息,但更重要的是,它允許大量的消費者基於相同的消息/事件處理各自不同邏輯。

你仍然可以在相同的域中進行並行處理,但是更重要的是,你還可以添加不同類型的消費者,這些消費者基於相同的事件執行不同的邏輯。換句話說,對於Kafka,用戶可以採用一個被動的pub/sub體系結構。

不同的邏輯可以由不同的系統基於相同的事件來執行

在使用Kafka的情況下,這是可能的,因為信息是保留的,消費者群體的概念也是如此。Kafka的消費者團體在向Kafka詢問關於某個話題的信息時,將自己定位於Kafka。Kafka將會記錄哪些消息(偏移量)被傳送到哪個消費者組,這樣它就不會再為它服務了。實際上,它比這要複雜一些,因為您有許多可用的配置選項來控制這一點,但是我們不需要全面地探索這些選項,只是為了在高層次上理解Kafka。

總結

Kafka還有其它很多的功能,比如它是如何管理擴展(分區)的、為可靠消息傳遞提供了哪些配置選項等等,但我希望這篇文章足夠好,讓你明白為什麼你會考慮採用Kafka而不是好的「ol消息隊列」。

點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

運營總監講述Instapaper宕機原因及故障恢復過程詳解
快哉!500 Startup創始人Dave McClure終下台,曾多次對女性創業者下骯髒之手
深入分析一波,你們說的雲安全到底是什麼鬼?是傳統廠商的盒子的iso化?是雲廠商自身具備的安全能力?

TAG:CSDN |

您可能感興趣

消息隊列CKafka
被視為代替Kafka的消息隊列:Apache Pulsar設計簡介
kafka消息隊列學習整理
RabbitMQ高級篇九TTL設置隊列或消息有效期隊列及消息
進程間的通信 IPC——實現消息隊列(msg)
Linux 下的進程間通信:使用管道和消息隊列
簡析Python中的四種隊列
Rocketmq之消息隊列分配策略演算法實現的源碼分析
RabbitMQ 高級篇八 消費端ACK與重回隊列
React、頁面渲染、任務隊列、Node.js
分散式隊列神器 Celery
用於腹側疝修復的改良Chevrel技術:單個中心隊列的長期結果
RabbitMQ消息中間件技術精講17 高級篇十 死信隊列
linux內核對網卡驅動多隊列的支持
Nature:氣勢磅礴!中國最大出生隊列研究碩果累累,引國際「圍觀」
日常生活中的膳食蛋白質來源和肌肉質量 「Lifelines」 隊列研究
List順序表,鏈表隊列,棧,字典
糞鈣衛蛋白和內鏡下UCEIS評分預測急性重症UC的短期結局:前瞻性隊列研究
消息隊列篇—常用消息隊列MQ產品介紹及對比
中軟國際哈爾濱ETC:消息隊列消息代理和消息中間件的區別聯繫