activemq和kafka
阿新 • • 發佈:2018-12-05
1、activemq
對於訊息的傳遞有兩種型別:
一種是點對點的,即一個生產者和一個消費者一一對應:
另一種是釋出/ 訂閱模式,即一個生產者產生訊息並進行傳送後,可以由多個消費者進行接收:
2、 kafka
每條釋出到Kafka叢集的訊息都有一個類別,這個類別被稱為topic,一個主題可以劃分多個分割槽。
3、區別
一個分組中的消費者消費主題上的訊息,類似於activemq的佇列模式
1、當多個消費者監聽同一個佇列時,activemq隨機將訊息隨機分配給一個消費者,訊息只被一個消費者消費,但是不能保證訊息的有序性,要想保證有序性,有兩種方式:一是所有不同型別的訊息傳送到一個佇列上,只有一個消費者;二是,不同的訊息分別傳送到不同的佇列上,各佇列對應一個消費者,這樣可以提供效率,但是程式碼結構複雜,需要維護多個佇列。
2、kafka的同一個分割槽只會被分配給一個消費者消費,且同一個分割槽的訊息被按序處理
3、activemq無法保證消費者只被處理一次。當activemq掛了,沒有收到消費者的應答訊息時,會認為訊息未被處理,重新給消費者處理。
4、kafka streams方式可以保證訊息只被處理一次。
kafka streams中,kvstore、sink訊息到kafka主題、kafka broker從消費者拉取offsert應答,三個操作是原子操作
當最後kafka broker拉取應答時,若kafka broker掛了,則kvstore、sink的操作都會
回滾
,從而保證只有一次消費