Kafka:分布式消息队列的抽象模型
生活随笔
收集整理的這篇文章主要介紹了
Kafka:分布式消息队列的抽象模型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最基礎的分布式隊列編程抽象模型是點對點模型,其他抽象構架模型居于改基本模型上各角色的數量和交互變化所導致的不同拓撲圖。具體而言,不同數量的發送者、分布式隊列以及接收者組合形成了不同的分布式隊列編程模型。消息中間件的主要功能是**消息的路由(Routing)和緩存(Buffering)**。Java Message Service,**JMS**,指的是面向消息中間件(MOM),用于在兩個應用程序之間,或分布式系統中發送消息,進行異步通信。JMS中定義了兩種消息模型:**點對點**(point to point, queue)和**發布/訂閱**(publish/subscribe,topic),主要區別就是是否能重復消費。
1、點對點:Queue,不可重復消費
1、消息生產者生產消息發送到queue中,然后消息消費者從queue中取出并且消費消息。
2、消息被消費以后,queue中不再有存儲,所以消息消費者不可能消費到已經被消費的消息。
Queue支持存在多個消費者,但是對一個消息而言,只會有一個消費者可以消費。
注:Kafka不遵守JMS協議,所以Kafka實際應用中,很可能會需要ack,然后多個消費者能夠會同時消費。。需要具體看。
2、發布/訂閱:Topic,可以重復消費
消息生產者(發布)將消息發布到topic中,同時有多個消息消費者(訂閱)消費該消息。
和點對點方式不同,發布到topic的消息會被所有訂閱者消費。
基于訂閱組的發布訂閱模式
發布訂閱模式下,當發布者消息量很大時,顯然單個訂閱者的處理能力是不足的。
實際上現實場景中是多個訂閱者節點組成一個訂閱組負載均衡消費topic消息即分組訂閱,這樣訂閱者很容易實現消費能力線性擴展。
3、推、拉模型
對于消費者而言有兩種方式從消息中間件獲取消息:
- Push方式:由消息中間件主動地將消息推送給消費者;
- **Pull方式:**由消費者主動向消息中間件拉取消息。
兩種方式比較:
- 采用Push方式,可以盡可能快地將消息發送給消費者,缺點是如果消費者的處理消息的能力很弱(一條消息需要很長的時間處理),而消息中間件不斷地向消費者Push消息,消費者的緩沖區可能會溢出。
- 而采用Pull方式,雖然能解決Push方式的缺點,但會增加消息的延遲,即消息到達消費者的時間有點長。
例如:Kafka的消費端就是采用Pull方式,而RabbitMQ的消費端采用的是Push模式。
參考:https://www.cnblogs.com/charlesblc/p/6045238.html
總結
以上是生活随笔為你收集整理的Kafka:分布式消息队列的抽象模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一周一论文(翻译)——[VLDB 19]
- 下一篇: Kafka:Kafka核心概念