Kafka開發環境搭建

瓜瓜東西發表於2014-09-04

轉自:http://my.oschina.net/ielts0909/blog/95440


如果你要利用程式碼來跑kafka的應用,那你最好先把官網給出的example先在單機環境和分散式環境下跑通,然後再逐步將原有的consumerproducerbroker替換成自己寫的程式碼。所以在閱讀這篇文章前你需要具備以下前提:

1.  簡單瞭解kafka功能,理解kafka的分散式原理

2.  能在分散式環境下成功執行—topic test

如果你還沒有完成上述兩個前提,請先看:

kafka分散式初步      kafka搭建分散式環境

接下來我們就簡單介紹下kafka開發環境的搭建。

1.    搭建scala環境,這裡有兩種方案,第一直接去scala官網下載SDK,解壓配置環境變數;第二種辦法,你可以不用安裝SDK,直接在專案中引用kafka編譯後下載下來的scala編譯包和編碼包(scala-compiler.jarscala-library.jar)。我推薦第二種,因為通過kafka編譯下載下來的scala版本和kafka版本都是匹配的(但是有時候可能會跟eclipse的外掛需要的環境衝突,所以最好把第一種也安裝一下,以防萬一),而一般我們用的是java專案來寫,所以直接匯入相關依賴包就可以了,第一種方案有助於我們看原始碼和用scala開發。這些jar的路徑位於kafka-0.7.2-incubating-src\javatest\lib目錄下。

2.    eclipse安裝scala開發環境。這只是一個外掛,可以在:http://scala-ide.org/中下載安裝或者線上安裝。裝完之後,你就能在eclipse中建立scala的專案了。

我們可以先寫一個hello world試一下,這樣一來,是不是又多了一種語言寫hello world了。

有些人new的時候找不到scala相關的類,那是因為你eclipseperspective不對,切換到scalaperspective下就可以了。注意new的是object,然後輸入:

1 package com.a2.kafka.scala.test
2  
3 object Hello {
4  
5   def main(args: Array[String]): Unit = {
6     printf("Hello Scala!!");
7   }
8 }

3.     找到編碼需要的依賴包。記住去你linux上經過updatekafka資料夾裡找,不要從直接從官網上下載的檔案裡找。具體路徑是:kafka-0.7.2-incubating-src\javatest\lib 這是你用java開發kafka相關程式用到的最基礎的包,如果你用到了hadoop,只要去相關的資料夾找一下就可以了。然後把這些包加到專案裡即可。

到了這裡,基本的開發環境應該是搭建完了,然後我們要開始寫點兒簡單的程式碼了。我們還是根據之前《分散式環境搭建》中給出的例子。稍微回憶下:

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中就會出現你輸的資訊。

這個例子就是在分散式的環境下producer生產資料,然後consumerbroker抓取資料顯示在console上。當然注意一點server.properties中的hostname需要換成你的對應地址,具體可以回去看《分散式環境搭建》。現在我們就用程式碼來模擬producer傳送資料的過程:

這裡我們建一個java project就可以了,匯入依賴包。kafka-0.7.2-incubating-src\javatest\lib目錄下的jar.

01 package com.a2.test.kafka;
02  
03 import java.util.Properties;
04  
05 import kafka.javaapi.producer.Producer;
06 import kafka.javaapi.producer.ProducerData;
07  
08 import kafka.producer.ProducerConfig;
09  
10 public class Producertest {
11     public static void main(String[] args) {
12         Properties props = new Properties();
13         props.put("zk.connect""192.168.10.11:2181");
14         props.put("serializer.class""kafka.serializer.StringEncoder");
15         ProducerConfig config = new ProducerConfig(props);
16         Producer<String, String> producer = new Producer<String, String>(config);
17         ProducerData<String, String> data = new ProducerData<String, String>("test""Hello");
18         producer.send(data);
19     }
20 }

這樣我們就用程式碼代替了console去傳送資訊了,這裡我們用了utils中的properties物件直接構建了配置,而不是直接讀取,當然你也可以讀配置。Data裡的兩個引數,第一個是指定topic,第二個是傳送的內容。

接下來就是執行了,如果你是在windows下,可能會等待很久然後報Unable to connect to zookeeper server within timeout: 6000,這個可能是網路卡的原因,你可以直接放到linux上,然後用命令列執行,注意引包。

1 Java –jar test.jar  Dclasspath=/lib

Consumer的程式碼以及實現和producer差不多,如果你感興趣可以去官網找相關的程式碼,都很簡單。當然還有一部分關於producerconsumer的配置,我們下篇再說。



相關文章