分布式訊息系統Kafka初步

2021-06-19 04:54:35 字數 2100 閱讀 7578

在我們大量使用分布式資料庫、分布式計算集群的時候,是否會遇到這樣的一些問題:

l  我想分析一下使用者行為(pageviews),以便我能設計出更好的廣告位

l  有些資料,我覺得存資料庫浪費,直接存硬碟又怕到時候操作效率低。

這個時候,我們就可以用到分布式訊息系統了。雖然上面的描述更偏向於乙個日誌系統,但確實kafka在實際應用中被大量的用於日誌系統。

首先我們要明白什麼是訊息系統,在kafka官網上對kafka的定義叫:a distributed publish-subscribe messaging system。publish-subscribe是發布和訂閱的意思,所以更準確的說kafka是乙個訊息訂閱和發布的系統。publish-subscribe這個概念很重要,因為kafka的設計理念就可以從這裡說起。

我們將訊息的發布(publish)暫時稱作producer,將訊息的訂閱(subscribe)表述為consumer,將中間的儲存陣列稱作broker,這樣我們就可以大致描繪出這樣乙個場面:

生產者(藍色,藍領麼,總是辛苦點兒)將資料生產出來,丟給broker進行儲存,消費者需要消費資料了,就從broker中去拿出資料來,然後完成一系列對資料的處理。

乍一看這也太簡單了,不是說了它是分布式麼,難道把producer、broker和consumer放在三颱不同的機器上就算是分布式了麼。我們看kafka官方給出的圖:

多個broker協同合作,producer和consumer部署在各個業務邏輯中被頻繁的呼叫,三者通過zookeeper管理協調請求和**。這樣乙個高效能的分布式訊息發布與訂閱系統就完成了。圖上有個細節需要注意,producer到broker的過程是push,也就是有資料就推送到broker,而consumer到broker的過程是pull,是通過consumer主動去拉資料的,而不是broker把資料主動傳送到consumer端的。

這樣乙個系統到底在**體現出了它的高效能,我們看官網上的描述:

至於為什麼會有o(1)這樣的效率,為什麼能有很高的吞吐量我們在後面的文章中都會講述,今天我們主要關注的還是kafka的設計理念。了解完了效能,我們來看下kafka到底能用來做什麼,除了我開始的時候提到的之外,我們看看kafka已經實際在跑的,用在哪些方面:

至此你應該對kafka是乙個什麼樣的系統有所體會,並能了解他的基本結構,還有就是他能用來做什麼。那麼接下來,我們再回到producer、consumer、broker以及zookeeper這四者的關係中來。

我們看上面的圖,我們把broker的數量減少,只有一台。現在假設我們按照上圖進行部署:

l  server-1 broker其實就是kafka的server,因為producer和consumer都要去連它。broker主要還是做儲存用。

l  server-2是zookeeper的server端,zookeeper的具體作用你可以去官網查,在這裡你可以先想象,它維持了一張表,記錄了各個節點的ip、埠等資訊(以後還會講到,它裡面還存了kafka的相關資訊)。

l  server-3、4、5他們的共同之處就是都配置了zkclient,更明確的說,就是執行前必須配置zookeeper的位址,道理也很簡單,這之間的連線都是需要zookeeper來進行分發的。

l  server-1和server-2的關係,他們可以放在一台機器上,也可以分開放,zookeeper也可以配集群。目的是防止某一台掛了。

簡單說下整個系統執行的順序:

1.         啟動zookeeper的server

2.         啟動kafka的server

3.         producer如果生產了資料,會先通過zookeeper找到broker,然後將資料存放進broker

4.         consumer如果要消費資料,會先通過zookeeper找對應的broker,然後消費。

對kafka的初步認識就寫到這裡,接下去我會寫如何搭建kafka的環境。最後感謝大神 @rockybean

的指導和幫助。

分布式訊息系統Kafka初步

在我們大量使用分布式資料庫 分布式計算集群的時候,是否會遇到這樣的一些問題 l 我想分析一下使用者行為 pageviews 以便我能設計出更好的廣告位 l 有些資料,我覺得存資料庫浪費,直接存硬碟又怕到時候操作效率低。這個時候,我們就可以用到分布式訊息系統了。雖然上面的描述更偏向於乙個日誌系統,但確...

分布式訊息系統Kafka初步

在我們大量使用分布式資料庫 分布式計算集群的時候,是否會遇到這樣的一些問題 l 我想分析一下使用者行為 pageviews 以便我能設計出更好的廣告位 l 有些資料,我覺得存資料庫浪費,直接存硬碟又怕到時候操作效率低。這個時候,我們就可以用到分布式訊息系統了。雖然上面的描述更偏向於乙個日誌系統,但確...

分布式訊息系統Kafka初步

在我們大量使用分布式資料庫 分布式計算集群的時候,是否會遇到這樣的一些問題 l 我想分析一下使用者行為 pageviews 以便我能設計出更好的廣告位 l 有些資料,我覺得存資料庫浪費,直接存硬碟又怕到時候操作效率低。這個時候,我們就可以用到分布式訊息系統了。雖然上面的描述更偏向於乙個日誌系統,但確...