自己使用的版本为zookeeper-3.4.7.tar.gz和kafka_2.10-0.9.0.0.tgz。首先要安装JDK(jdk-7u9-linux-i586.tar.gz)和SSH,IP地址的分配为Kafka1(192.168.56.136),Kafka2(192.168.56.137),Kafka3(192.168.56.138)。下面主要介绍SSH的安装,ZooKeeper和Kafka集群的搭建和使用。
一. SSH的安装
(1)apt-get install ssh
(2)/etc/init.d/ssh start
(3)ssh-keygen –t rsa –P “”(敲三次回车即可)
说明:在/root/.ssh生成2个文件:id_rsa和id_rsa.pub。前者为私钥,后者为公钥。
(4)cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
说明:我们将公钥id_rsa.pub追加到authorized_keys中,因为authorized_keys用于保存所有允许以当前用户身份登录到ssh客户端用户的公钥内容。
(5)设置Kafka1可以免密码登录Kafka2和Kafka3,如下所示:
scp root@Kafka2:~/.ssh/id_rsa.pub ~/.ssh/Kafka2_rsa.pub
scp root@Kafka3:~/.ssh/id_rsa.pub ~/.ssh/Kafka3_rsa.pub
cat Kafka2_rsa.pub >> authorized_keys
cat Kafka3_rsa.pub >> authorized_keys
说明:我们从Kafka1通过命令远程访问ssh Kafka2和ssh Kafka3就可以成功了。
二. ZooKeeper集群的搭建
1. 将zookeeper复制到/usr/local/zookeeper目录,并且解压
root@Kafka1:~# mkdir /usr/local/zookeeper
root@Kafka1:~# cp ~/Downloads/zookeeper-3.4.7.tar.gz /usr/local/zookeeper/
root@Kafka1:/usr/local/zookeeper# tar -zxvf zookeeper-3.4.7.tar.gz
2. zookeeper环境变量配置
export ZOOKEEPER_HOME=/usr/local/zookeeper/zookeeper-3.4.7
export PATH=$ZOOKEEPER_HOME/bin:$PATH
说明:各个节点都需要配置。
3. 集群相关文件配置
(1)vim /conf/zoo.cfg
dataDir=/usr/local/zookeeper/zookeeper-3.4.7/data
clientPort=2181 initLimit=10 syncLimit=5 tickTime=2000 Kafka1=192.168.56.136:2888:3888 Kafka2=192.168.56.137:2888:3888 Kafka3=192.168.56.138:2888:3888
(2)vim /usr/local/zookeeper/zookeeper-3.4.7/data/myid 在Kafka1上,“myid”内容是1,在Kafka2上,内容是2,在Kafka3上,内容是3。
(3)通过scp将Kafka1上的ZooKeeper配置拷贝到Kafka2和Kafka3上
(4)开启和停止,查看状态(所有节点)
./zkServer.sh start/stop/status
说明:在状态中mode显示了所在server在集群中扮演的角色,每个server的角色不是固定的,leader是通过zookeeper的Fast Leader选举算法产生的。至此,ZooKeeper集群搭建完毕,根据实际业务需要,修改相应的配置文件。
三. Kafka集群的搭建
说明:
消息的发布(publish)称作producer,消息的订阅(subscribe)称作consumer,中间的存储阵列称作broker。
1. 将kafka复制到/usr/local/kafka目录,并且解压
root@Kafka1:~# mkdir /usr/local/kafka
root@Kafka1:~# cp ~/Downloads/kafka_2.10-0.9.0.0.tgz /usr/local/kafka/
root@Kafka1:/usr/local/kafka# tar -zxvf kafka_2.10-0.9.0.0.tgz
2. kafka环境变量配置
export KAFKA_HOME=/usr/local/kafka/kafka_2.10-0.9.0.0
export PATH=$KAFKA_HOME/bin:$PATH
说明:各个节点都需要配置。
3. 集群相关文件配置
(1)vim config/server.properties
需要配置的属性有broker.id,host.name,zookeeper.connect,log.dirs。相关配置如下所示:
broker.id=1
port=9092 host.name=Kafka1 log.dirs=${KAFKA_HOME}/kafka-logs zookeeper.connect=192.168.56.136:2181,192.168.56.137:2181,192.168.56.138:2181
(2)vim zookeeper.properties
dataDir=/usr/local/zookeeper/zookeeper-3.4.7/data
(3)vim producer.properties
metadata.broker.list=192.168.56.136:9092,192.168.56.137:9092,192.168.56.138:9092
(4)vim consumer.properties
zookeeper.connect=192.168.56.136:2181,192.168.56.137:2181,192.168.56.138:2181
(5)通过scp将Kafka1上的Kafka配置拷贝到Kafka2和Kafka3上
broker.id从1开始递增,每台server必须唯一。并且修改相应的broker.id和host.name属性。
(6)首先启动ZooKeeper集群,然后再启动Kakfa集群
解析:
./zkServer.sh start/stop/status(各个节点)
nohup ./kafka-server-start.sh ./../config/server.properties &(各个节点)
说明:关闭Kakfa集群的命令为./kafka-server-stop.sh。(各个节点)
集群启动成功后,首先创建topic,在一台server上创建producer,另外一台server上创建consumer,从producer上发送信息,看consumer是否能接收到,以验证集群是否成功。
创建topic:sudo ./kafka-topics.sh --zookeeper Kafka1:2181,Kafka2:2181,Kafka3:2181 --topic test --replication-factor 2 --partitions 5 --create 查看topic:sudo ./kafka-topics.sh --zookeeper Kafka1:2181,Kafka2:2181,Kafka3:2181 --list 创建producer:sudo ./kafka-console-producer.sh --broker-list 192.168.56.136:9092,192.168.56.137:9092,192.168.56.138:9092 --topic test 创建consumer:sudo ./kafka-console-consumer.sh --zookeeper server1:2181,server2:2181,server3:2181 --from-beginning --topic test
说明:执行命令kafka-console-producer.sh的时候,KafkaX必须写成对应的IP才不会报错,否则Caused by: org.apache.kafka.common.config.ConfigException: DNS resolution failed for url in bootstrap.servers: KafkaX:9092。可能是自己文件配置的问题,这个问题现在还没有解决。
至此,Kafka集群搭建完毕,接下来就可以通过调用Kafka的Java API来测试Kafka集群的状态了。
参考文献:
[1] ZooKeeper集群环境安装与配置:http://blog.csdn.net/unix21/article/details/18990123
[2] Apache Zookeeper 集群环境搭建:http://bigcat2013.iteye.com/blog/2175538
[3] Zookeeper安装和配置:http://coolxing.iteye.com/blog/1871009
[4] 分布式消息系统Kafka:http://blog.jobbole.com/75328/%20
[5] Apache Kafka集群环境搭建:http://bigcat2013.iteye.com/blog/2175880?utm_source=tuicool&utm_medium=referral
[6] Kafka 2.9.2的分布式集群安装和demo:http://www.aboutyun.com/thread-8919-1-1.html
[7] Kafka集群--3个broker 3个zookeeper创建实战:http://www.cnblogs.com/davidwang456/p/4238536.html
[8] flume+kafka+storm搭建:http://wenku.baidu.com/link?url=hTPgtuZtUob7mZ8nWYgZkGLHK7r71-tVQnJIgPzjpT7dTKnnDggfEeCZuFvXDI575PASNE4QpqzFsNCm7GznINiJAiXxdqf8FfNevlPkHKS