kafka 一些基本知識

kafka不一樣於activemq和rabbitmq等這種符合AMQP協議的標準消息隊列產品,它有一些list或者array的特徵,能夠指定從offset讀取。算法


kafka提倡使用拉模式,而且能夠對消息重複消費,看起來不符合傳統queue的思想,但卻提供了額外的好處,好比:某模塊更新到產線發現有bug,須要將上線以來的消息所有從新消費,即消息回溯。併發

 

kafka是高併發型的消息隊列,但這是有前提條件的。條件是topic要定義多個partition,將壓力分擔到各個partition上。topic是邏輯概念,partition是物理存在各個broker,以此達到負載均衡的目的。要注意的是,各個partition能夠獨立消費,各partition間的消息是沒法保證順序性的,順序只存在同一partition。以個人經驗看,不管哪一種MQ,要嚴格保證順序,都要付出昂貴的代價,所以弱化順序是有必要的。負載均衡

 

kafka的另外一個特性是高可用。放眼目前業界數據層的高可用解決方案,採用的無非都是兩種:冗餘數據和共享存儲。後者以價格昂貴著稱,好比SAN。冗餘數據最多見的即是日誌複製,kafka的道理也同樣。由一組節點組成leader,follower組成小的cluster,由zookeeper作協調(Paxos算法)。leader,follower的比例和數量可配置,通常爲1:2。在寫入的時候, follower會不斷複製leader的數據,leader掛掉後會從follwer中選舉新的leader。socket

 

kafka使用了零拷貝技術來優化性能,直接發送磁盤的數據到socket。此爲其極爲取巧的設計和亮點。ide

相關文章
相關標籤/搜索