分享

about云日志分析项目准备8:Kafka集群安装

Oner 发表于 2016-12-27 13:20:22 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 0 2935
本帖最后由 Oner 于 2017-9-23 16:52 编辑
问题导读:
1. 如何搭建一个zookeeper集群?
2. 安装zookeeper集群中myid文件的作用是什么?
3. 如何搭建一个kafka集群?


接上篇:about云日志分析项目准备7:Hive安装和配置
这篇主要讲解kafka集群的安装,由于kafka一部分依赖于zookeeper,所以在安装kafka之前需要先安装zookeeper。
一、安装zookeeper

在master机器进行以下操作。
1. 解压zookeeper
下载zookeeper:http://apache.fayea.com/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
  1. tar -zxvf ~/jar/zookeeper-3.4.6.tar.gz -C /data
复制代码
网盘下载
链接: https://pan.baidu.com/s/1i50vzb3 密码: p5s5

2. 配置zookeeper
涉及到的配置文件为
  1. ${ZOOKEEPER_HOME}/conf/zoo.cfg
复制代码

zoo.cfg通过cp zoo_sample.cfg zoo.cfg得到。
  1. # The number of milliseconds of each tick
  2. tickTime=2000
  3. # The number of ticks that the initial
  4. # synchronization phase can take
  5. initLimit=10
  6. # The number of ticks that can pass between
  7. # sending a request and getting an acknowledgement
  8. syncLimit=5
  9. # the directory where the snapshot is stored.
  10. # do not use /tmp for storage, /tmp here is just
  11. # example sakes.
  12. dataDir=/data/zk_data
  13. # the port at which the clients will connect
  14. clientPort=2181

  15. server.1=master:2888:3888
  16. server.2=slave1:2888:3888
  17. server.3=slave2:2888:3888
复制代码
这儿解释下格式为server.X=host:port1:port2的意思,X表示当前host所运行的服务的zookeeper服务的id(在接下来填写myid时需要用到),port1表示zookeeper中的follower连接到leader的端口号,port2表示leadership时所用的端口号。注意:需要手动去创建dataDir所配置的/data/zk_data目录(mkdir -p /data/zk_data)更多配置可参考:
zookeeper配置文件详解
http://www.aboutyun.com/thread-13909-1-1.html


3. 填写myid
在zoo.cfg配置文件中的dataDir目录(在这儿是/data/data_zk)下创建myid文件,文件内容为zoo.cfg中master所对应的server.X。
  1. echo "1" > /data/zk_data/myid
复制代码

4. 复制到其他节点
  1. scp -r /data/zookeeper-3.4.6/ /data/zk_data  aboutyun@slave1:/data
  2. scp -r /data/zookeeper-3.4.6/ /data/zk_data  aboutyun@slave2:/data
复制代码
在slave1上,
  1. echo  "2" > /data/zk_data/myid
复制代码

在slave2上,
  1. echo "3" >/data/zk_data/myid
复制代码

5. 添加到环境变量
在master、slave1、slave2上,分别将以下内容添加到~/.bashrc文件中
  1. export ZOOKEEPER_HOME=/data/zookeeper-3.4.6
  2. export PATH=$ZOOKEEPER_HOME/bin:$PATH
复制代码
然后执行以下命令:source ~/.bashrc

6.  启动验证
在master、slave、slave2上,分别执行zookeeper启动命令。
  1. zkServer.sh start
复制代码
由于启动时,每个节点都会试图去连接其它节点,因此先启动的刚开始会连接不上其它的,导致日志中会包含错误信息,在未全启动之前,这个属正常现象。启动完成后,使用jps命令和zkServer.sh status命令经行验证
master机器情况:
20161227102149.jpg
slave1机器情况:
20161227102326.jpg
slave2机器情况:
20161227102350.jpg
说明每个节点都成功启动了QuorumPeerMain进程,并且slave1上的进程为leader,master和slave2上的进程为follower

二、安装kafka
在master上进行如下操作:

1. 解压kafka

下载kafka:http://apache.fayea.com/kafka/0.9.0.1/kafka_2.11-0.9.0.1.tgz
  1. tar -zxvf ~/jar/kafka_2.11-0.9.0.1.tgz -C /data
复制代码
链接: https://pan.baidu.com/s/1sk8CAeT 密码: 8h2r

2. 配置kakfa
涉及到的配置文件为${KAFA_HOME}/config/server.properties
必须要配置的是这三个参数:broker.id、log.dirs、zookeeper.connect
broker.id表示当前broker的id,要求是唯一的非负数。log.dirs表示kafka日志的存放目录。zookeeper.connect表示连接的zookeeper的地址。
  1. broker.id=0
  2. log.dirs=/data/kafka-logs
  3. zookeeper.connect=master:2181,slave1:2181,slave2:2181
复制代码
注意:需要手动在本地创建/data/kafka-logs目录

3. 复制到其他节点
  1. scp -r /data/kafka_2.11-0.9.0.1/ /data/kafka-logs/ aboutyun@slave1:/data
  2. scp -r /data/kafka_2.11-0.9.0.1/ /data/kafka-logs/ aboutyun@slave2:/data
复制代码
在slave1机器上将server.properties配置文件的broker.id值改为1在slave2机器上将server.properties配置文件的broker.id值改为2


4. 添加环境变量
在master、slave1、slave2机器上,分别将以下内容添加到~/.bashrc文件中
  1. export KAFKA_HOME=/data/kafka_2.11-0.9.0.1
  2. export PATH=$KAFKA_HOME/bin:$PATH
复制代码
然后执行以下命令:source ~/.bashrc


5. 启动验证
在master、slave1、slave2机器上,分别执行kafka启动命令
  1. cd $KAFKA_HOME
  2. kafka-server-start.sh -daemon ./config/server.properties
复制代码

之后在每台机器上执行jps命令:
20161227114609.jpg
如果每台机器上都成功启动了kafka这个进程,说明我们搭建成功。如果发现某台机器上没有kafka这个进程,可以将kafka的启动命令去掉参数-daemon(加上的话表示后台启动),这样可以直接在屏幕上看到错误信息。

三、kakfa使用示例

1. 创建topic
  1. #创建一个有3个partition、1个副本的 test topic
  2. kafka-topics.sh --zookeeper master:2181,slave1:2181,slave2:2181 --create --topic test --replication-factor 1 --partitions 3
复制代码
2. 创建producer
  1. kafka-console-producer.sh --broker-list master:9092,slave1:9092,slave2:9092 --topic test
复制代码
20161230162827.jpg

3. 创建consumer
重新打开一个窗口:
  1. kafka-console-consumer.sh --zookeeper master:2181,slave1:2181,slave2:2181  --topic test --from-beginning
复制代码
20161230162909.jpg

4. 产生消息并接受

在producer的窗口中输入几条测试信息
20161230163105.jpg


查看consumer窗口的情况
20161230163213.jpg
说明成功消费了的产生的3条信息

四、踩过的坑

1. org.I0Itec.zkclient.exception.ZkException: Unable to connect to master:2181,slave1:2181,slave3:2181
第一次启动时没有看到kafka进程,后来去掉-daemon参数,发现报了这样的错误,起初以为是zookeeper没安装成功,所以提示无法连接zookeeper服务,后来仔细检查了下,发现报错信息提示只是无法连接的zookeeper服务中包括了slave3:2181,由于我们这儿只有master、slave1和slave2三台机器安装了zookeeper,并不包含slave3。
解决办法:将kafka的server.properties配置文件中zookeeper.connect值改为正确值,在这儿应该是 master:2181,slave1:2181,slave2:2181












没找到任何评论,期待你打破沉寂

关闭

推荐上一条 /2 下一条