MultiBroker for Kafka Cluster on Ubuntu

              Apache Kafka 
A high-throughput distributed messaging system.
Kafka簡介
Apache Kafka 是一個傳送訊息的系統,原本開發來自Linkedln,用作Linkedln的活動資料傳,和數據處理管道的基礎,現在它已被不同類型的大公司作為多種類型的資料數據傳送系統使用。

Apache Kafka是一種分散式的,高吐量,速度快同時支持即時與離線兩種解決方案。在建置Apache Kafka Cluster需要Apache Zookeeper,建置Kafka 分散式平台時建議3台主機,Kafka也是可以使用單機平台。

Kafka Cluster安裝條件
我們使用三台虛擬機建置Kafka Cluster平台
Ubuntu 14.04版本
Java8
至官方KafkaZookeeper下載

1. Install Zookeeper
First Download Zookeeper
Zookeeper  3.4.8
使用Wget 取得Zookeeper檔案

user@host:~$ wget http://apache.stu.edu.tw/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz

將下載完的Zookeeper解壓縮

user@host:~$ tar -xzf zookeeper-3.4.8.tar.gz
user@host:~$ cd zookeeper-3.4.8

將zookeeper conf檔複製成zoo.cfg
user@host:~/zookeeper-3.4.8$ cp conf/zoo_sample.cfg con/zoo.cfg
user@host:

編輯zoo.cfg檔案

user@host:~/zookeeper-3.4.8$ vi conf/zoo.cfg
tickTime=2000 
initLimit=10 
syncLimit=5 
dataDir=/tmp/zookeeper    //Zookeeper 資料儲存路徑
clientPort=2182           //使用Zookeeper Port 
server.1=zoo1:2888:3888,zoo2:2888:3888,zoo3:2888:3888

說明一下Server.1: 是Zookeeper Cluster 我們將使用三台虛擬機以 ","格開,設定完成Zookeeper 複製zoo.cfg檔案到其他虛擬機

user@host:~/zookeeper-3.4.8$ scp conf/zoo.cfg user@zoo2:~/zookeeper-3.4.8/conf
user@host:~/zookeeper-3.4.8$ scp conf/zoo.cfg user@zoo3:~/zookeeper-3.4.8/conf

create zookeeper myid , so each node can identify itself

//Server1
user@Server1:~$ echo "1" > /var/lib/zookeeper/myid
//Server2
user@Server2:~$ echo "2" > /var/lib/zookeeper/myid
//Server3
user@Server3:~$ echo "3" > /var/lib/zookeeper/myid

2.Install Kafka
Download Kafka 0.8.2.2
使用Wget 取得Kafka檔案

user@host:~$ wget http://apache.stu.edu.tw/kafka/0.8.2.2/kafka_2.10-0.8.2.2.tgz
user@host:~$

解壓縮 Kafka檔案
user@host:~$ tar -xzf kafka_2.10-0.8.2.2.tgz
user@host:~$ cd kafka_2.10-0.8.2.2

編輯Kafka Servier.properties
user@host:~/kafka_2.10-0.8.2.2$ vi server.properties  
user@host:

修改zoo1虛擬機 broker.id
broker.id=1 
port=6667 
zookeeper.connect=zoo1:2181,zoo2:2181,zoo3:2181

修改zoo2虛擬機 broker.id
broker.id=2 
port=6667  
zookeeper.connect=zoo1:2181,zoo2:2181,zoo3:2181

修改zoo3虛擬機 broker.id
broker.id=3 
port=6667  
zookeeper.connect=zoo1:2181,zoo2:2181,zoo3:2181

3. Start Application 

Start Zookeeper Cluster Server1 to Server3
user@host:~$ zookeeper-3.4.8/bin/zkServer.sh start"
user@host:

Start Kafka Cluster Server1 to Server3

nohup kafka_2.10-0.8.2.2/bin/kafka-server-start.sh kafka_2.10-0.8.2.2/config/server.properties > /dev/null 2>&1 &

4. Test Kafka and Zookeeper
user@host:~$ zookeeper-3.4.8/bin/zkCli.sh -server Server1:2181,Server2:2181,Server3:2181
 
 
[zk: Server1:2181,Server2:2181,Server3:2181(CONNECTED) 0] ls /
// zookeeper data
[controller_epoch, controller, brokers, zookeeper, admin, consumers, config]

Connect Zookeeper Cluster

open  Terminal input command line
//create kafka topic  test
user@host:~$ kafka_2.10-0.8.2.2/bin/kafka-topics.sh --create --zookeeper Server1:2181,Server2:2181,Server3:2181 --partitions 3 --replication-factor 1 --topic test

Open Terminal Application
//send message

user@host:~$ kafka_2.10-0.8.2.2/bin/kafka-console-producer.sh --zookeeper Server1:6667,Server2:6667,Server3:6667 --topic test 
 
[2016-04-01 16:45:26,695] WARN Property topic is not valid (kafka.utils.VerifiableProperties)
message,123

open Terminal Application
//accept message

user@host:~$ kafka_2.10-0.8.2.2/bin/kafka-console-consumer.sh --zookeeper Server1:2181,Server2:2181,Server3:2181 --topic test
message,123

5. Download Kafka Tool UI

Download KafkaOffsetMonitor-assembly-0.2.1.jar Website toole
KafkaFile

Start Kafka Offset Tools

nohup java -cp /user/KafkaOffsetMonitor-assembly-0.2.1.jar com.quantifind.kafka.offsetapp.OffsetGetterWeb \
--zk Server1:2181,Server2:2181,Server3:2181 \
--port 9090 \
--refresh 10.seconds \
--retain 2.days > /dev/null 2>&1 &

open browser http://localhost:9090












References:
http://kafka.apache.org/
https://zookeeper.apache.org/
https://github.com/quantifind/KafkaOffsetMonitor