KAFKA-開發者視角-概念理解

kafka是目前應對大數據需求下支持高吞吐量,高可用性,大數據量的消息隊列。靈活使用kafka的特性可以解決很多實際的業務問題.
        kafka是採用集羣部署可以橫向擴展的架構。
        說到集羣就不得不說一下分佈式,兩者都有壓力分攤爲設計目的。簡單說一下對集羣和分佈式的理解。

集羣:通過分流數據達到壓力分攤的目的。同一功能模塊,多實例部署模式。可以簡單理解爲功能相同,數據分流處理的架構。擴展方式爲橫向擴展,一般擴展能力比較強。

分佈式:通過拆分爲多個功能模塊,從而實現系統壓力的分攤.可以簡單理解爲功能不同,但數據流相同的架構。擴展方式爲縱向擴展,一般在系統架構設計完後就固定了。業務系統設計成分佈式之後,隨之而來的一個問題就是各個分佈式模塊之間通信,消息隊列的應用就不可少了。對於解耦各模塊的消息隊裏而言,kafka是個不錯的選擇。

        然後說一下kafka設計理念相關的概念
        producer:生產者,發送數據到kafka集羣的程序。
        consumer:消費者,從kafka消費數據的程序。
        topic:隊列,一般一個topic裏面放置的數據是同一業務類型。應用場景:通過不同的隊列來區分業務數據。
        group:分組,對於同一份數據一般有兩種消費方式,重複消費和分流消費。通過group就可以事項這兩種不同的模式。在同一個分組的消費者是分流消費,份數不同分組的消費者是重複消費。應用場景:對同一份業務數據,如果有不同的處理,使用重複消費;如果要進行集羣分壓,可以採用分流方式。

        對於kafka簡單使用而言,知道這兩個概念就可以了。但是要使用kafka的高級功能,還需要繼續深入學習...
        partition:分區,是topic存儲數據的重要概念,數據分塊。分區的多寡,需要按照業務需求設置,影響消費者和生產者。對於消費者而言,一個消費者可以對於多個分區,但是一個分區只能對應一個消費者,最理想的情況就是一個分區對應一個消費者。不當的分區數會帶來性能上的浪費,反例1:一個消費者,100個分區,那麼這個消費者每次消費的時候就要輪詢(簡單理解爲輪詢策略)100個分區的數據,對這100個分區消費的切換就是額外的性能浪費。反例2:10個消費者,一個分區,那麼其中9個消費者都是拿不到數據的,傻傻杵在哪兒。
    生產者往kafka發送數據,可以指定具體要發送哪個分區,也可以指定發送多個分區的策略。現舉一例:有時候處理業務數據需要嚴格按照時序,kafka中怎麼實現呢,就是topic只創建一個分區,這樣在消費的時候就可以保證消息的順序和發送的時候一致了。

    replication factor:複製因子,也可以通俗說成用於備份數。對於一些系統,不僅僅要考慮性能還要考慮高可用,也就是要求系統對故障和錯誤有一定的抵抗能力。kafka就是通過複製因子實現部分高可用功能的。這部分高可用簡單講一下,在創建topic的時候指定的複製因子的個數就是當前topic數據的副本數,而這些副本會落到集羣不同的機器上,一旦其中一臺機器宕機,只要還存有一個副本,這部分數據就不會丟失。前面說到的集羣也是高可用的實現,集羣中一個節點宕機,其他節點依然可以提供服務。


每取得些許進步,都是站在巨人的肩膀上。 

每取得些許進步,都像個撿到貝殼的孩子。

每次總結都有額外的收穫。

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