zookeeper+kafka叢集安裝之二
此為上一篇文章的續篇, kafka安裝需要依賴zookeeper, 本文與上一篇文章都是真正分布式安裝配置, 可以直接用於生產環境.
zookeeper安裝參考:
http://blog.csdn.net/ubuntu64fan/article/details/26678877
首先瞭解幾個kafka中的概念:
假定我們有一個名稱為test的topic, 分區數目為2, 當我們發送到這個test具體的訊息"msg1:hello beijing"和"msg2:hello shanghai"的時候,我們如何知道訊息的發送路徑呢(發往哪個分區)?msg1如果被發送到分區test.1,則肯定不會發送到test.2. 資料發送直接選取決策受kafka.producer.Partitioner的影響:interface Partitioner { int partition(java.lang.Object key, int numPartitions);}
一個虛擬碼的實現如下:
package org.mymibao.mq.client;import kafka.producer.Partitioner;public class DefaultKafkaPartitioner implements Partitioner { private final static int FIRST_PARTITION_ID = 1; public int partition(Object key, int numPartitions) { return FIRST_PARTITION_ID; }}
分區API根據相關的索引值以及系統中具有的代理分區的數量返回一個分區id。將該id用作索引,在broker_id和partition組成的經過排序的列表中為相應的生產者請求找出一個代理分區。預設的分區策略是hash(key)%numPartitions。如果key為null,那就進行隨機播放。使用partitioner.class這個配置參數可用插入自訂的分區策略.分區檔案不會跨越broker,但是多個broker上可以有某個topic的分區副本.
kafka安裝配置參考:
1)下載KAFKA
$ wget http://apache.fayea.com/apache-mirror/kafka/0.8.1.1/kafka_2.9.2-0.8.1.1.tgz
安裝和配置參考上一篇文章:
http://blog.csdn.net/ubuntu64fan/article/details/26678877
2)配置$KAFKA_HOME/config/server.properties
我們安裝3個broker,分別在3個vm上:zk1,zk2,zk3:
zk1:
$ vi /etc/sysconfig/network
NETWORKING=yesHOSTNAME=zk1
$ vi $KAFKA_HOME/config/server.properties
broker.id=0port=9092host.name=zk1advertised.host.name=zk1...num.partitions=2...zookeeper.contact=zk1:2181,zk2:2181,zk3:2181
zk2:
$ vi /etc/sysconfig/network
NETWORKING=yesHOSTNAME=zk2
$ vi $KAFKA_HOME/config/server.properties
broker.id=1port=9092host.name=zk2advertised.host.name=zk2...num.partitions=2...zookeeper.contact=zk1:2181,zk2:2181,zk3:2181
zk3:
$ vi /etc/sysconfig/network
NETWORKING=yesHOSTNAME=zk3
$ vi $KAFKA_HOME/config/server.properties
broker.id=2port=9092host.name=zk3advertised.host.name=zk3...num.partitions=2...zookeeper.contact=zk1:2181,zk2:2181,zk3:2181
3)啟動zookeeper服務, 在zk1,zk2,zk3上分別運行:
$ zkServer.sh start
4)啟動kafka服務, 在zk1,zk2,zk3上分別運行:
$ kafka-server-start.sh $KAFKA_HOME/config/server.properties
5) 建立一個TOPIC(replication-factor=num of brokers)
$ kafka-topics.sh --create --topic test --replication-factor 3 --partitions 2 --zookeeper zk1:2181
6)假設我們在zk2上,開一個終端,發送訊息至kafka(zk2類比producer)
$ kafka-console-producer.sh --broker-list zk1:9092 --sync --topic test
在發送訊息的終端輸入:Hello Kafka
7)假設我們在zk3上,開一個終端,顯示訊息的消費(zk3類比consumer)
$ kafka-console-consumer.sh --zookeeper zk1:2181 --topic test --from-beginning
在消費訊息的終端顯示:Hello Kafka
8) 編程操作Producer和Consumer的例子參考:
http://shift-alt-ctrl.iteye.com/blog/1930791