Kafka 分散式環境搭建

五柳-先生發表於2015-11-17

這篇文章將介紹如何搭建kafka環境,我們會從單機版開始,然後逐漸往分散式擴充套件。單機版的搭建官網上就有,比較容易實現,這裡我就簡單介紹下即可,而分散式的搭建官網卻沒有描述,我們最終的目的還是用分散式來解決問題,所以這部分會是重點。

Kafka的中文文件並不多,所以我們儘量詳細點兒寫。要交會你搭建分散式其實很簡單,手把手的教程大不了我錄個視訊就好了,可我覺得那不是走這條路的方 式。只有真正瞭解原理,並且理解的透徹了才能最大限度的發揮一個框架的作用。所以,如果你不瞭解什麼事kafka,請先看:《kafka初步》

我們從搭建單機版的環境開始說起,如果你喜歡看英文版:這裡有官方的《quick start》

單機版的部署很簡單,我就講幾點比較重要的,首先kafka是用scala編寫的,可以跑在JVM上,所以我們並不需要單獨去搭建scala的環境,後面會涉及到程式設計的時候我們再說如何去配置scala的問題,這裡用不到,當然你要知道這個是跑在linux上的。第二,我用的是最新版0.7.2的版本,你下載完kafka你可以開啟它的目錄瀏覽一下:

Kafka 分散式環境搭建

我就不介紹每個包裡的內容是幹嘛的,我就著重說一點,你在這個資料夾裡只能找到3jar包,並且這3個還不能用於後面的程式設計,而且你也沒法在裡面找到pom這樣用於構建的xml。也別急,也別滿世界找,這些依賴庫得等你把它放到linux上才會出現(當然需要命令)。

搭建單機版環境,簡單的說有那麼幾步:

1. 安裝java環境,我用的是最新的版本jdk7

2. 將下載下來的kafka扔到linux上,並解壓。我用的red het serverlinux

3. 接下來就是下載kafka的依賴包和構建kafka的環境。注意,這一步需要電腦聯網。具體命令就是官網介紹的./sbt update ./sbt package

4.  執行完上面這步大概會花個10多分鐘吧,我在自己家裡ubuntu沒有成功,報了下載不到jline的錯。單位裡用虛擬機器ubuntu成功了,我深刻懷疑是網的問題。上面這不執行完了有兩點要注意,一是sbt幫你下載完了所有依賴庫,但是這些jar都是分散在各個目錄下的,注意區分。二是,這些jar一部分是kafka的程式設計包,一部分是scala的環境包,上面說了沒必要自己去搭scala的環境道理就在這邊,你自己去下一個2.9scala,但人家kafka只支援2.82.7。所以程式設計的時候就用sbt給你下好的包即可。後面講到程式設計的時候,會寫怎麼搭程式設計環境,很簡單的。

上面的步驟都執行完了,環境算是好了,下面我們要測試下是否能成功執行kafka:

1.   啟動zookeeper server bin/zookeeper-server-start.sh ../config/zookeeper.properties  & (&是為了能退出命令列)

2.    啟動kafka server:  bin/kafka-server-start.sh ../config/server.properties  &

3.    Kafka為我們提供了一個console來做連通性測試,下面我們先執行producerbin/kafka-console-producer.sh --zookeeper localhost:2181 --topic test 這是相當於開啟了一個producer的命令列。命令列的引數我們一會兒再解釋。

4.    接下來執行consumer,新啟一個terminalbin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

5.    執行完consumer的命令後,你可以在producerterminal中輸入資訊,馬上在consumerterminal中就會出現你輸的資訊。有點兒像一個通訊客戶端。

具體可看《quick start》

如果你能看到5執行了,說明你單機版部署成功了。下面解釋下兩條命令中引數的意思。--zookeeper localhost:2181 這個說明了去連本機2181埠的zookeeper server--topic test,在kafka裡,訊息按topic來區分,我們這裡的topictest,所以不管是consumer還是producer都指向了test。其他的引數,我就截圖了,首先是producer的引數:

Kafka 分散式環境搭建

Consumer的引數:

Kafka 分散式環境搭建

這些引數你可以先看個大概,之後會在程式設計中使用到,都可以動態的配置。

好了單機版就部署完了,那是不是我把consumer的放到另一臺機器上就算分散式了呢。是的,前提是,你還能執行到上面的第5步。在講配置之前,我們還是將上篇寫的分散式來回顧一下,當然我們簡化一下情況,按照實際部署的分析:

Kafka 分散式環境搭建

假設我只有兩臺機器,server1server2。我現在想把zookeeper serverkafka server producer都放在一臺機器上server1,把consumer放在server2上。這當然也叫分散式了,雖然機子不多,但是這個部署成功了,擴充套件是相當的容易。

我們還是按照那5個步驟來做,當然你肯定能知道,34兩步的引數要改了,我們假設server1IP192.168.10.11 server2IP192.168.10.10

1.  啟動zookeeper server bin/zookeeper-server-start.sh ../config/zookeeper.properties  & (&是為了能退出命令列)

2.  啟動kafka server:  bin/kafka-server-start.sh ../config/server.properties  &

3.   Kafka為我們提供了一個console來做連通性測試,下面我們先執行producerbin/kafka-console-producer.sh --zookeeper 192.168.10.11:2181 --topic test 這是相當於開啟了一個producer的命令列。

4.   接下來執行consumer,新啟一個terminalbin/kafka-console-consumer.sh --zookeeper 192.168.10.11:2181 --topic test --from-beginning

5.   執行完consumer的命令後,你可以在producerterminal中輸入資訊,馬上在consumerterminal中就會出現你輸的資訊。

這個時候你能執行出第5步的效果麼,是不是報了下面的錯了:

Kafka 分散式環境搭建

我來說原因,在這之前想請你再回去看看《kafka初步》,看看裡面講分散式的內容:

這裡的kafka server就是brokerbroker是存資料的,producer把資料給brokerconsumerbroker取資料。那zookeeper是幹嘛的,說的膚淺點兒,zookeeper就是他們之間的選擇分發器,所有的連線都要先註冊到zookeeper上。你可以把它想象成NIOzookeeper就是selectorproducerconsumerbroker都要註冊到selector上,並且留下了相應的key

所以問題就出在了kafka server的配置server.properties上。Kafka註冊到zookeeper上的資訊不對,才導致了上面的錯誤。我們看config中server.properties的配置就可以知道:


?
1
2
3
4
# Hostname the broker will advertise to consumers. If not set, kafka will use the value returned
# from InetAddress.getLocalHost().  If there are multiple interfaces getLocalHost
# may not be what you want.
#hostname=

預設的hostname如果你不設定,就是127.0.0.1,所以你把這個hostname設定成192.168.10.11即可,這樣你重啟下kafka server端,就能執行第5步了。

成功配置的話,你能看到下面的效果,左邊的是producer,右邊的是consumer,看最下面兩行好了,前面的是我之前測試用過的:

Kafka 分散式環境搭建

如果你還是雲裡霧裡的,建議你回頭去看看上篇文章,將kafka分散式基本原理的,kafka實際操作是要建立在對原理熟悉的情況下的。

搭建完了環境,後面就要開始寫程式去處理實際問題了。當然再寫程式之前,下一篇我會先寫一點 kafka為什麼會有如此高的效能,它是怎麼保障這些效能的。

轉載: http://www.open-open.com/lib/view/open1354349590601.html

相關文章