回覆列表
  • 1 # 小馬過河Vizit

    [動畫] 為什麼我們需要訊息系統 Kafka

    系統通訊方式的變革

    簡單的說,計算機各個服務系統之間需要通訊,不用訊息系統的時候,系統通訊是這樣的:

    各個系統之間,同步的、點對點的互聯,非常複雜、凌亂,難以維護。用了訊息系統之後:

    訊息系統作為中間代理解耦了各個系統之間的直接聯絡,系統設計變得簡單。

    Kafka 就像是一個大超市

    可以用一個大超市(或者購物商城,網上商城)來比喻Kafka,訊息就是超市裡面的各種產品。

    在Kafka裡面有主題Topic和分割槽partition的概念。

    主題可以比喻成商品類別。分割槽partition可以比喻成同一類別的商品在不同的貨架上擺放。

    各種商品的廠家就像生產者producer一樣往超市傳送貨品。各個訊息系統的消費者consumer就像超市的消費者一樣按需消費。

    Kafka裡面還有一個消費者組(consumer group)的概念,可以比喻成一個家庭,共同消費。

    試想一下,如果沒有超市,商家怎麼把商品賣到消費者手中的。消費者又是怎麼樣買到自己需要的商品的。

    生產廠家往超市發貨不是一件一件的傳送的,而是一車一車傳送的。生產者也是不是生產出一件就發一件,發完再生產下一件的(這個是同步傳送的方式)。生產者是把生產好的商品先放到倉庫,然後一批一批的傳送的(這就是非同步傳送)。倉庫就像是生產者客戶程式的緩衝區buffer。貨車就是批次傳送。

    我有一個影片介紹了生產者的非同步,批次傳送。

    有了超市之後,廠家只管把貨物送達到超市。消費者也只管到超市買東西。彼此幾乎可以不用聯絡。這樣就實現了生成者和消費者之間的解耦。

    大資料時代需要高可用,高吞吐量的訊息系統

    Kafka就是一個分散式訊息系統。可靠,每秒可以達到幾百萬的寫入速度。

    分散式,就是指同樣一個訊息服務有多個伺服器提供。一臺伺服器掛掉,另外一臺可以繼續。就像汽車的備胎一樣,萬一輪胎壞了,你可以用備胎,這樣汽車可以繼續執行,只是Kafka的備胎一般是兩個。這就是伺服器的容災(failover)。

  • 2 # struggles123

    你好,最近做實時處理業務比較多,很榮幸來交流這個問題

    簡單的來說一下kafka分散式訊息系統

    概述

    1. 分散式訊息佇列,由Scala寫成,由Apache軟體基金會開發

    2. 它提供了類似於JMS的特性,但是在設計實現上完全不同

    3. 在流式計算中,用Kafka來快取資料,Storm消費Kafka中的資料。

    4. 依賴zookeeper儲存meta資訊,來保證系統可用性

    解釋下JMS :java 訊息服務

    1. Java提供的一套技術規範:生產消費者模式(生產者、伺服器、消費者)

    2. JMS訊息傳輸模型

    點對點模式:一對一,消費者主動拉取資料,訊息收到後訊息清除

    釋出/訂閱模式:一對多,資料生產後,推送給所有訂閱者

    3.元件

    各種MQ

    Kafka核心元件

    //Producer

    1. 生產者,負責資料生產

    2. 資料的分發策略(分發給Partition)由producer決定

    預設是defaultPartition:Utils.abs(key.hashCode) % numPartitions

    //Broker

    1. 一臺kafka伺服器就是一個broker,一個kafka叢集由多個broker組成

    2. 叢集中每個broker都有一個唯一brokerid

    3. 一個broker可以容納多個topic

    4. 只管資料儲存,不管是誰生產,誰消費。

    //Topic

    1. 訊息在Broker上的目的地,一個邏輯上的概念,訊息儲存在partition目錄中

    2. 一個Topic對應多個partition[0,1,2,3]

    //partition

    1. 一個Topic的多個partition,按照輪詢規則分佈在多個Broker上

    2. 每個partition對應一個partition目錄

    3. 目錄中有多個segment檔案,每個檔案預設的大小是1G

    4. 每個partition有多個副本(不在一個broker上),設定副本數<=broker數

    5. 從所有中選取一個leade,所有讀寫操作都是leader進行

    6. 每個partition是一個有序的佇列,保證partition中的訊息按順序消費

    7. 不保證一個topic(多個partition間)的訊息安序消費:全域性無序

    //ConsumerGroup:

    1. 把多個consumer執行緒組成一組:資料消費者組

    2. 多個consumer同時消費:提高效率

    一個consumer宕掉後,其他consumer自動接管它的partition:提高"故障容錯"性

    3. 組裡consumer共同消費一個topic的資料,組員之間不能重複消費資料

    4. ConsumerGroup可以有多個,每個ConsumerGroup消費的資料都是一樣的

    kafka儲存機制

    1. 透過硬碟持久儲存message,儲存時間由配置檔案決定,預設7天

    3. 將segment的索引儲存在記憶體中,減少硬碟IO

    4. 使用page cache(物理記憶體)提高讀寫速度

    上述就是對kafka 的一些簡單介紹,由於篇幅有限,講解的不太細緻。

    學習使人充實!!!最後祝大家都可以在大資料的海洋裡隨心遨遊!

  • 中秋節和大豐收的關聯?
  • 30w以內想要一個四驅2.0或者以上的suv哪個好一點?