kafka優點

Kafka是由LinkedIn開發的一個分佈式的消息系統,同時支持離線和在線日誌處理。

Kafka框架本身使用Scala編寫,因其可水平擴展和高吞吐率而被廣泛使用。目前,越來越多的開源分佈式處理系統如Cloudera、Apache Storm、Spark都支持與Kafka集成。

Kafka的持久化方案是寫入磁盤,雖然內存讀寫速度明顯快過磁盤讀寫速度,但Kafka卻通過線性讀寫的方式實現快速讀寫。

Kafka保存消息時根據topic進行歸類,消息的發佈者稱爲producer,消息的訂閱者稱爲consumer,每個Kafka實例稱爲broker(中間的存儲陣列)。後三者都通過Zookeeper進行協調,也就是

1、啓動Zookeeper的server
2、啓動Kafka的server
3、Producer生產數據,然後通過Zookeeper找到broker,再將數據發佈到broker進行保存
4、Consumer通過Zookeeper找到broker,然後再消費數據

這裏寫圖片描述

Topic

這裏寫圖片描述
每個Topic被分成多個partition(區)。每條消息在partition中的位置稱爲offset(偏移量),類型爲long型數字。消息即使被消費了,也不會被立即刪除,而是根據broker裏的設置,保存一定時間後再清除。比如log文件設置存儲兩天,那兩天後消息不論是否被消費,都會被清除。

Consumer

每個consumer屬於一個consumer group。在Kafka中,一個partition的消息只會被group中的一個consumer消費;可以認爲一個group就是一個“訂閱者”。一個Topic中的每個partition只會被一個“訂閱者”中的一個consumer消費。

Kafka優點

  • 解耦和擴展性
    消息隊列中間件都有着解耦的功能,解耦也意味着擴展性。將複雜的代碼邏輯移至到遠端程序上,而源程序本身只需要發送一個消息,通知遠端程序消費。兩邊的程序可以獨立擴展、修改,不相互影響。

  • 冗餘
    Kafka會將partition中的消息存儲一段時間,消息即使被消費了,也不會被立即刪除,通過這一方式規避了數據丟失風險。

  • 削峯填谷
    我們不能以一個應用系統峯值流量所需要的資源來部署服務,因爲這樣的突發流量並不常見,所以這會是巨大的浪費。那麼,系統具有”削峯填谷”的能力是至關重要的。使用消息隊列將峯值時的流量請求持久化,待稍後流量正常或低谷時再取出消費。

  • 容錯性
    當消費者組中的其中一臺或幾臺消費者實例掛掉,它們消費的partition消息會被轉移到同組的其它存活着的消費者實例。系統的一部分組件失效時,不會影響到整個系統。

  • 順序保證
    Kafka保證一個Partition內的消息的有序性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章