如何通俗的理解kafka分布式消息發布訂閱系統?
一圖勝千言,我做了一個動畫視頻解釋了消息系統的由來,以及我們為什么需要Kafka,歡迎觀看和評論。
[動畫] 為什么我們需要消息系統 Kafka
系統通信方式的變革
簡單的說,計算機各個服務系統之間需要通信,不用消息系統的時候,系統通信是這樣的:
各個系統之間,同步的、點對點的互聯,非常復雜、凌亂,難以維護。用了消息系統之后:
消息系統作為中間代理解耦了各個系統之間的直接聯系,系統設計變得簡單。
Kafka 就像是一個大超市可以用一個大超市(或者購物商城,網上商城)來比喻Kafka,消息就是超市里面的各種產品。
在Kafka里面有主題Topic和分區partition的概念。
主題可以比喻成商品類別。分區partition可以比喻成同一類別的商品在不同的貨架上擺放。
各種商品的廠家就像生產者producer一樣往超市發送貨品。各個消息系統的消費者consumer就像超市的消費者一樣按需消費。
Kafka里面還有一個消費者組(consumer group)的概念,可以比喻成一個家庭,共同消費。
試想一下,如果沒有超市,商家怎么把商品賣到消費者手中的。消費者又是怎么樣買到自己需要的商品的。
生產廠家往超市發貨不是一件一件的發送的,而是一車一車發送的。生產者也是不是生產出一件就發一件,發完再生產下一件的(這個是同步發送的方式)。生產者是把生產好的商品先放到倉庫,然后一批一批的發送的(這就是異步發送)。倉庫就像是生產者客戶程序的緩沖區buffer。貨車就是批量發送。
我有一個視頻介紹了生產者的異步,批量發送。
有了超市之后,廠家只管把貨物送達到超市。消費者也只管到超市買東西。彼此幾乎可以不用聯系。這樣就實現了生成者和消費者之間的解耦。
超市的商品也是有有效期的,超市的倉庫大小也是有限的。如果某種商品超過7天,就會被超市清理掉。這就是Kafka服務器的舊的日志刪除,log retention。
大數據時代需要高可用,高吞吐量的消息系統Kafka就是一個分布式消息系統。可靠,每秒可以達到幾百萬的寫入速度。
分布式,就是指同樣一個消息服務有多個服務器提供。一臺服務器掛掉,另外一臺可以繼續。就像汽車的備胎一樣,萬一輪胎壞了,你可以用備胎,這樣汽車可以繼續運行,只是Kafka的備胎一般是兩個。這就是服務器的容災(failover)。
我的主頁還分享了幾個關于kafka的動畫視頻,通俗易懂,歡迎觀看和評論。
本人,@小馬過河Vizit,專注于分布式系統原理和實踐分享。希望利用動畫生動而又準確的演示抽象的原理。歡迎關注。
關于我的名字:小馬過河Vizit,意為凡事像小馬過河一樣,需要自己親自嘗試,探索才能獲得樂趣和新知。Vizit是指Visualize it的縮寫。一圖勝千言,希望可以利用動畫來可視化一些抽象的原理。