Kafka是什麼,JMS是什麼,常見的類JMS消息伺服器,為什麼需要消息隊列(來自學習筆記)
Apache Kafka是一個開源消息系統,由Scala寫成。是由Apache軟體基金會開發的一個開源消息系統項目。
Kafka最初是由LinkedIn開發,并于2011年初開源。2012年10月從Apache Incubator畢業。該項目的目标是為處理實時資料提供一個統一、高通量、低等待的平台。
Kafka是一個分布式消息隊列:生産者、消費者的功能。它提供了類似于JMS的特性,但是在設計實作上完全不同,此外它并不是JMS規範的實作。
Kafka對消息儲存時根據Topic進行歸類,發送消息者稱為Producer,消息接受者稱為Consumer,此外kafka叢集有多個kafka執行個體組成,每個執行個體(server)成為broker。
無論是kafka叢集,還是producer和consumer都依賴于zookeeper叢集儲存一些meta資訊,來保證系統可用性
JMS幹什麼用:用來異構系統 內建通信,緩解系統瓶頸,提高系統的伸縮性增強系統使用者體驗,使得系統子產品化群組件化變得可行并更加靈活
通過什麼方式:生産消費者模式(生産者、伺服器、消費者)

jdk,kafka,activemq……
點對點模式(一對一,消費者主動拉取資料,消息收到後消息清除)
點對點模型通常是一個基于拉取或者輪詢的消息傳送模型,這種模型從隊列中請求資訊,而不是将消息推送到用戶端。這個模型的特點是發送到隊列的消息被一個且隻有一個接收者接收處理,即使有多個消息監聽者也是如此。
釋出/訂閱模式(一對多,資料生産後,推送給所有訂閱者)
釋出訂閱模型則是一個基于推送的消息傳送模型。釋出訂閱模型可以有多種不同的訂閱者,臨時訂閱者隻在主動監聽主題時才接收消息,而持久訂閱者則監聽主題的所有消息,即使目前訂閱者不可用,處于離線狀态。
queue.put(object) 資料生産
queue.take(object) 資料消費
Destination:消息發送的目的地,也就是前面說的Queue和Topic。
Message :從字面上就可以看出是被發送的消息。
Producer: 消息的生産者,要發送一個消息,必須通過這個生産者來發送。
MessageConsumer: 與生産者相對應,這是消息的消費者或接收者,通過它來接收一個消息。
通過與ConnectionFactory可以獲得一個connection
通過connection可以獲得一個session會話。
ActiveMQ 是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ 是一個完全支援JMS1.1和J2EE 1.4規範的。
主要特點:
多種語言和協定編寫用戶端。語言: Java, C, C++, C#, Ruby, Perl, Python, PHP。應用協定: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
完全支援JMS1.1和J2EE 1.4規範 (持久化,XA消息,事務)
對Spring的支援,ActiveMQ可以很容易内嵌到使用Spring的系統裡面去,而且也支援Spring2.0的特性
通過了常見J2EE伺服器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的測試,其中通過JCA 1.5 resource adaptors的配置,可以讓ActiveMQ可以自動的部署到任何相容J2EE 1.4 商業伺服器上
支援多種傳送協定:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
支援通過JDBC和journal提供高速的消息持久化
從設計上保證了高性能的叢集,用戶端-伺服器,點對點
支援Ajax
支援與Axis的整合
可以很容易得調用内嵌JMS provider,進行測試
Metamorphosis (MetaQ) 是一個高性能、高可用、可擴充的分布式消息中間件,類似于LinkedIn的Kafka,具有消息存儲順序寫、吞吐量大和支援本地和XA事務等特性,适用于大吞吐量、順序消息、廣播和日志資料傳輸等場景,在淘寶和支付寶有着廣泛的應用,現已開源。
生産者、伺服器和消費者都可分布
消息存儲順序寫
性能極高,吞吐量大
支援消息順序
支援本地和XA事務
用戶端pull,随機讀,利用sendfile系統調用,zero-copy ,批量拉資料
支援消費端事務
支援消息廣播模式
支援異步發送消息
支援http協定
支援消息重試和recover
資料遷移、擴容對使用者透明
消費狀态儲存在用戶端
支援同步和異步複制兩種HA
支援group commit
RocketMQ 是一款分布式、隊列模型的消息中間件,具有以下特點:
能夠保證嚴格的消息順序
提供豐富的消息拉取模式
高效的訂閱者水準擴充能力
實時的消息訂閱機制
億級消息堆積能力
Metaq3.0 版本改名,産品名稱改為RocketMQ
.NET消息中間件 DotNetMQ
基于HBase的消息隊列 HQueue
Go 的 MQ 架構 KiteQ
AMQP消息伺服器 RabbitMQ
MemcacheQ 是一個基于 MemcacheDB 的消息隊列伺服器。
消息系統的核心作用就是三點:解耦,異步和并行
以使用者注冊的案列來說明消息系統的作用
問題:随着後端流程越來越多,每步流程都需要額外的耗費很多時間,進而會導緻使用者更長的等待延遲。
問題:系統并行的發起了4個請求,4個請求中,如果某一個環節執行1分鐘,其他環節再快,使用者也需要等待1分鐘。如果其中一個環節異常之後,整個服務挂掉了。
1、 保證主流程的正常執行、執行成功之後,發送MQ消息出去。
2、 需要這個destination的其他系統通過消費資料再執行,最終一緻。
原文位址http://www.bieryun.com/2113.html