kafka叢集安裝

破棉襖發表於2014-09-10


首先了解幾個kafka中的概念:
kafka是一個訊息佇列伺服器,服務稱為broker, 訊息傳送者稱為producer, 訊息接收者稱為consumer;通常我們部署多個broker以提供高可用性的訊息服務叢集.典型的是3個broker;訊息以topic的形式傳送到broker,消費者訂閱topic,實現按需取用的消費模式;建立topic需要指定replication-factor(複製數目, 通常=broker數目);每個topic可能有多個分割槽(partition), 每個分割槽的訊息內容不會重複:

假定我們有一個名稱為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;
    }
}

kafka安裝配置參考:

1)下載KAFKA
$ wget

2)配置$KAFKA_HOME/config/server.properties

我們安裝3個broker,分別在3個vm上:zk1,zk2,zk3:

zk1:
$ vi /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=zk1

$ vi $KAFKA_HOME/config/server.properties 
broker.id=0
port=9092
host.name=zk1
advertised.host.name=zk1
...
num.partitions=2
...
zookeeper.contact=zk1:2181,zk2:2181,zk3:2181

zk2:
$ vi /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=zk2

broker.id=1
port=9092
host.name=zk2
advertised.host.name=zk2
...
num.partitions=2
...
zookeeper.contact=zk1:2181,zk2:2181,zk3:2181

zk3: 
$ vi /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=zk3


broker.id=2
port=9092
host.name=zk3
advertised.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  ../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

原文:http://blog.csdn.net/ubuntu64fan/article/details/2668

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29754888/viewspace-1267107/,如需轉載,請註明出處,否則將追究法律責任。

相關文章