kafka知識體系-消息模型

本系列主要講解kafka基本設計和原理分析,分以下內容:html

  1. 基本概念
  2. 消息模型
  3. kafka副本同步機制
  4. kafka文件存儲機制
  5. kafka數據可靠性和一致性保證
  6. kafka leader選舉
  7. kafka消息傳遞語義
  8. Kafka集羣partitions/replicas默認分配解析

消息模型

JMS協議(ActiveMQ)

Java消息服務(Java Message Service,JMS)應用程序接口是一個Java平臺中關於面向消息中間件的API,用於在兩個應用程序之間,或分佈式系統中發送消息,進行異步通訊。
點對點與發佈訂閱最初是由JMS定義的。這兩種模式主要區別或解決的問題就是發送到隊列的消息可否重複消費(多訂閱)。
JMS規範目前支持兩種消息模型:點對點(point to point, queue)和發佈/訂閱(publish/subscribe,topic)。編程

點對點併發

消息生產者生產消息發送到queue中,而後消息消費者從queue中取出而且消費消息。這裏要注意:
消息被消費之後,queue中再也不有存儲,因此消息消費者不可能消費到已經被消費的消息。
Queue支持存在多個消費者,可是對一個消息而言,只會有一個消費者能夠消費。
異步

生產者發送一條消息到queue,只有一個消費者能收到。分佈式

發佈/訂閱
消息生產者(發佈)將消息發佈到topic中,同時有多個消息消費者(訂閱)消費該消息。和點對點方式不一樣,發佈到topic的消息會被全部訂閱者消費。
高併發

發佈者發送到topic的消息,訂閱了topic的全部訂閱者都會收到消息。設計

AQMP協議(RabbitMQ)

RabbitMQ實現了AQMP協議,AQMP協議定義了消息路由規則和方式。生產端經過路由規則發送消息到不一樣queue,消費端根據queue名稱消費消息。此外RabbitMQ是向消費端推送消息,訂閱關係和消費狀態保存在服務端。
點對點
3d

生產端發送一條消息經過路由投遞到Queue,只有一個消費者能消費到。htm

發佈/訂閱
中間件

當RabbitMQ須要支持多訂閱時,發佈者發送的消息經過路由同時寫到多個Queue,不一樣訂閱組消費此消息。
RabbitMQ既支持內存隊列也支持持久化隊列,消費端爲推模型,消費狀態和訂閱關係由服務端負責維護,消息消費完後當即刪除,不保留歷史消息。因此支持多訂閱時,消息會多個拷貝。

kafka

kafka沒有實現JMS協議,但其消費組能夠像點對點模型同樣讓消息被一組進程處理,同時也能夠像發佈/訂閱模式同樣,讓你發送廣播消息到多個消費組。
點對點
當多個消費者同屬一個消費組時,對應消息會被同消費組的當個消費組消費使用,相似點對點的消息模型。

即消息Message1只會被消費組GroupA中的Consumer_一、Consumer_二、Consumer_3消費

發佈/訂閱

當每一個消費者都屬於不一樣的消費組時,對應的消息會被每一個消費者消費使用,相似訂閱/發佈的消息模型。


關於做者
愛編程、愛鑽研、愛分享、愛生活
關注分佈式、高併發、數據挖掘
如需捐贈,請掃碼

相關文章
相關標籤/搜索