kafka是分布式發布-訂閱訊息系統。它最初由linkedin公司開發,使用scala語言編寫,之後成為apache專案的一部分。kafka是乙個分布式的,可劃分的,多訂閱者,冗餘備份的永續性的日誌服務。它主要用於處理活躍的流式資料(實時性的計算)。
降低系統組網複雜度。
降低程式設計複雜度,各個子系統不在是相互協商介面,各個子系統類似插口插在插座上,kafka承擔高速資料匯流排的作用。
二.kafka的主要特點
同時為發布和訂閱提供高吞吐量。據了解,kafka每秒可以生產約25萬訊息(50 mb),每秒處理55萬訊息(110 mb)。
可進行持久化操作。將訊息持久化到磁碟,因此可用於批量消費,例如etl,以及實時應用程式。通過將資料持久化到硬碟以及replication防止資料丟失。
分布式系統,易於向外擴充套件,可以和zookeeper結合。所有的producer、broker和consumer都會有多個,均為分布式的。無需停機即可擴充套件機器。
訊息被處理的狀態是在consumer端維護,而不是由server端維護。當失敗時能自動平衡。
支援online和offline的場景。
可以通過訊息佇列做系統之間的通訊,即系統之間的相互協調和呼叫
注意:使用訊息佇列和soa架構的區別?
1.soa是直接呼叫的(可以通過rpc和httpclient來直接呼叫)
2.使用訊息佇列是通過訊息的傳遞,來完成兩個系統之間的整合和呼叫
帶來的好處:
例子:訂單處理
訂單支付成功的方法()
注:
1.原來系統中這個三個步驟要同時處理後再返回,這樣比較耗時;
2.現在可以先處理使用者最關心的,最急需看到的修改訂單狀態成功資訊,這樣可以先處理
"修改訂單狀態"
,然後立刻返回給使用者,
後面的
「計算會員積分」,「通知物流進行配送」,放入訊息佇列中交給後面的系統繼續處理。
訊息佇列的分類:點對點,發布/訂閱
1.點對點
訊息生產者生產訊息傳送到queue
中,然後
訊息消費者從queue中取出
並且消費訊息
注意(缺點):
1.訊息
被消費以後,
queue中不再有儲存
,所以消費者不可肯消費到已經被消費的訊息。
2.queue中
支援存在多個消費者
,但是對乙個訊息而言,
只會有乙個消費者可以消費。
(當乙個系統消費了該個訊息後,其他的系統不能再消費了)
2.發布/訂閱(最常用的)
訊息生產者(發布)將訊息發布到topic中,同時有多個訊息消費者(訂閱)消費該訊息。和點對點方式不同,發布到topic的訊息會被所有訂閱的消費者消費。
1.rabbitmq:支援的協議多,非常
重量級訊息佇列,對
路由(routing),負載均衡(load balance)或者資料持久化
都有很好的支援。
2.zeromq:號稱最快的訊息佇列系統,尤其針對大吞吐量的需求場景,擅長的高階/複雜的佇列,但是技術也複雜,並且只提供非永續性的佇列。
3.activemq(jms的實現):apache下的乙個子項,類似zeromq,能夠以**人和點對點的技術實現佇列 。
4.redis:是乙個key-value的nosql資料庫,但也支援mq功能,資料量較小,效能優於rabbitmq,資料超過10k就慢的無法忍受。
注:訊息佇列不可能是單點的,也需要集群。這樣就涉及到了,負載均衡和訊息的持久化
六.kafka的測試效果
Kafka學習 一 Kafka背景及架構介紹
kafka是分布式發布 訂閱訊息系統。它最初由linkedin公司開發,使用scala語言編寫,之後成為apache專案的一部分。kafka是乙個分布式的,可劃分的,多訂閱者,冗餘備份的永續性的日誌服務。它主要用於處理活躍的流式資料 實時性的計算 降低系統組網複雜度。降低程式設計複雜度,各個子系統不...
Kafka 溫故 一 Kafka背景及架構介紹
kafka是分布式發布 訂閱訊息系統。它最初由linkedin公司開發,使用scala語言編寫,之後成為apache專案的一部分。kafka是乙個分布式的,可劃分的,多訂閱者,冗餘備份的永續性的日誌服務。它主要用於處理活躍的流式資料 實時性的計算 1.降低系統組網複雜度。2.降低程式設計複雜度,各個...
學習kafka教程(一)
簡介 kafka是用於構建實時資料管道和流應用程式。具有橫向擴充套件,容錯,wicked fast 快 等優點,並已在成千上萬家公司執行。目標相關概念 producer 生產者,就是它來生產 叉燒包 的飯堂阿姨。consumer 消費者,生產出來的 叉燒包 它來消費。topic 你把它理解為標籤,生...