強大的分布式訊息系統kafka

2021-07-25 11:32:57 字數 2146 閱讀 4749

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

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端的。

這樣乙個系統到底**體現出了它的高效能,如官網上所述,翻譯如下:

(1)資料在磁碟上訪問代價為o(1)。一般資料在磁碟上是使用btree儲存的,訪問代價為o(lgn)。

(2)高吞吐率。即使在普通的節點上每秒鐘也能處理成百上千的message。

(3)顯式分布式,即所有的producer、broker和consumer都會有多個,均為分布式的。

(4)支援資料並行載入到hadoop中。

等等至此你應該對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分布式訊息系統

什麼是apache kafka?系統應用 使用者的活動資料 請求 資料 互動資料 執行維護資料如效能 監測 伺服器cpu 指標這些大量的資料都在無時無刻的產生,kafka 便是有著一套成熟的訊息處理方案的訊息系統,支援 高吞吐量的 分布式發布訂閱訊息 模式,它可以處理消費者規模的 中的所有動作流資料...

分布式訊息系統Kafka初步

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

分布式訊息系統Kafka初步

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