文章目录
集群规划
主机名 | NameNode1 | NameNode2 | DataNode | ZKFC | JNN | RS | NodeManager | zookeeper | kafka |
---|---|---|---|---|---|---|---|---|---|
node01 | √ | √ | √ | √ | |||||
node02 | √ | √ | √ | √ | |||||
node03 | √ | √ | √ | ||||||
node04 | √ | √ | |||||||
node05 | √ | √ | √ | √ | |||||
node06 | √ | √ | √ | √ | |||||
node07 | √ | √ | √ | √ | |||||
client |
集群搭建
1. 下载kafka安装包
访问Apache Kafka官网下载安装包,地址:http://kafka.apache.org/
点击download按钮,进入版本选择,这里选择0.9.0.1版本的基于Scala 2.11的kafka_2.10-0.8.2.1.tgz安装包
注意不要安装0.9.0.0的版本,这个版本存在问题,并且已经在0.9.0.1中得到修复
2. 启动zookeeper集群
安装kafka集群之前,确保zookeeper服务已经正常运行,因为我们使用的是外部的zookeeper集群,偏移量offset和元数据等都交给了外部的zookeeper进行维护,所以启动kafka之前,一定要保证zookeeper的正常运行。
分别的node05,node06,node07上启动zookeeper
./zkServer.sh start
3. 解压
tar -zxvf kafka_2.10-0.8.2.1.tgz.gz kafka
4. 修改配置文件
这里只需要修改一个配置文件
4.1 进入conf目录
[root@node01 software]# cd kafka_2.10-0.8.2.1/config/
[root@node01 config]# ll
total 36
-rwxr-xr-x. 1 root root 1199 Nov 19 17:13 consumer.properties
-rwxr-xr-x. 1 root root 58 Nov 19 17:28 kafka.log
-rwxr-xr-x. 1 root root 3846 Nov 19 17:13 log4j.properties
-rwxr-xr-x. 1 root root 2228 Nov 19 17:13 producer.properties
-rwxr-xr-x. 1 root root 5576 Nov 19 17:15 server.properties
-rwxr-xr-x. 1 root root 3325 Nov 19 17:13 test-log4j.properties
-rwxr-xr-x. 1 root root 993 Nov 19 17:13 tools-log4j.properties
-rwxr-xr-x. 1 root root 1023 Nov 19 17:13 zookeeper.properties
4.2 修改server.properties文件配置
这里需要修改三个地方,请注意仔细查找
broker.id=0 修改broker id号,注意kafka集群的broker id也是递增的形式
# A comma seperated list of directories under which to store log files
log.dirs=/kafka-logs 设置存储日志文件的目录位置
#zookeeper的节点位置
zookeeper.connect=node05:2181,node06:2181,node07:2181
5. 启动
配置修改完成后就可以启动了,但是启动命令有点长,我们可以把它设置到脚本里,并且添加到环境变量里,方便我们后续的关闭与启动。
5.1 启动脚本编写
[root@node01 bin]# vim start-kafka.sh
/opt/software/kafka_2.10-0.8.2.1/bin/kafka-server-start.sh /opt/software/kafka_2.10-0.8.2.1/config/server.properties >> kafka.log 2>&1 &
5.2 环境变量配置
[root@node01 bin]# vim ~/.bashrc
export KAFKA_HOME=/opt/software/kafka_2.10-0.8.2.1
export PATH=$KAFKA_HOME/bin
5.3 启动
[root@node01 bin]# start-kafka.sh
6. 验证是否正常启动
[root@node01 bin]# jps
67639 ConsoleProducer
67018 ResourceManager
68140 Jps
66607 NameNode
66911 DFSZKFailoverController
65471 Kafka
看到Kafka进程启动,说明搭建没有问题。
7. 创建Topic话题
kafka-topics.sh --create --zookeeper node05:2181,node06:2181,node07:2181 --topic "mdj" --partitions 3 --replication-factor 3
8. 查询topic的详细信息
kafka-topics.sh --describe --zookeeper node05:2181 --topic "mdj"
9. 生产数据
kafka-console-producer.sh --broker-list node01:9092,node02:9092,node03:9092 --topic "mdj"
10. 消费数据
kafka-console-consumer.sh --zookeeper node05:2181 --topic "mdj"
11. 生产消费验证
在node01上生产
[root@node01 ~]# kafka-console-producer.sh --broker-list node01:9092,node02:9092,node03:9092 --topic "mdj"[2018-11-20 11:23:23,743] WARN Property topic is not valid (kafka.utils.VerifiableProperties)
hello sh
hello bj
hello sz
在node02上消费,可以观察到消息是同步的,说明生产和消费正常。
[root@node02 ~]# kafka-console-consumer.sh --zookeeper node05:2181 --topic "mdj"
hello sh
hello bj
hello sz
问题总结
-
注意启动或者搭建kafka集群前,一定要先启动zookeeper,保证zookeeper的正常运行。
-
注意zookeeper和kafka的端口号
zookeeper:2181
kafka:9092 -
注意broker id递增,不要配置错了。