本小节的目的不是搭建一个高可用的、生产的kafka集群,而是提供给大家一个快速搭建方式,讲解搭建一个kafka的单机版的过程,方便大家用于学习使用。
本文配套视频:https://www.bilibili.com/video/BV1Ri4y12731/
一、前置要求
本节使用的稳定版本2.8.0(3.0版本之后zookeeper会被去掉),目前绝大多数生产环境比较稳定的搭建方式仍然需要依赖于zookeeper,所以需要先下载好下面的两个安装包以及一个安装脚本(点这里)。
后续文章会讲解3.0版本的搭建方式,从编码实验学习的角度而言,使用2.8或3.0的kafka服务并没有什么重要的区别。从kafka集群运维的角度差异会比较大。所以这篇文章我们暂时还是用2.8版本进行安装,对于学习来讲什么都不耽误。
- kafka_2.13-2.8.0.tgz
- apache-zookeeper-3.6.3-bin.tar.gz
下载完成之后,将kafka安装包、zookeeper安装包、setup.sh
放到linux系统的一个独立目录里面。
注意:如果你想顺利的使用我在下文中提供的shell安装脚本setup.sh,就请不要随意下载其他的版本的kafka和zookeeper. 因为shell脚本里面版本号是写死的。当然如果你会自己修改shell,那就是另外一回事了。
- 宿主机服务器JDK版本要求JDK8 或者 JDK11,
Java -version
命令能够正确执行。 请自行安装。 - 确保linux操作系统内目前不存在这两个目录
/opt/kafka
、/opt/zookeeper
。shell脚本执行后,kafka和zookeeper将被安装在这两个目录里面 。 - 如果安装失败需要重新安装,先执行
rm -fR /opt/kafka /opt/zookeeper
二、安装方法
setup.sh
为安装脚本,需要root权限执行。为setup.sh
设置可执行权限,命令为 chmod u+x /root/kafka-setup/setup.sh
,根据自己的主机环境修改setup.sh
中的下面四个配置
- IP_ADDRESS=kafka对外提供服务的ip,注意如果一个主机多个网卡多个ip,请配置为对外提供服务的ip。
- ZOOKEEPER_DATADIR=zookeeper数据存放的目录,自己定义
- ZOOKEEPER_LOGDIR=zookeeper日志存放的目录,自己定义
- KAFKA_LOGDIR=kafka日志(即消息数据)存放的目录,自己定义
上面的配置完成之后,进入setup.sh
及kafka、zookeeper安装包所在目录,执行./setup.sh
,注意看输出日志,没有ERROR,kafka单机版就安装成功
三、启动、测试zookeeper的可用性
启动命令:/opt/zookeeper/default/bin/zkServer.sh start
,启动成功状态如下
# /opt/zookeeper/default/bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/default/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
状态查看:/opt/zookeeper/default/bin/zkServer.sh status
出现下面日志表示zookeeper服务正常运行
# /opt/zookeeper/default/bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/default/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: standalone
四、启动测试kafka可用性
启动kafka命令:/opt/kafka/default/bin/kafka-server-start.sh -daemon /opt/kafka/default/config/server.properties
正常启动之后不会输出任何日志,但使用jps命令查看会发现kafka进程
[root@zimug1 kafka-setup]# jps
1941 QuorumPeerMain
2348 Kafka
2366 Jps
4.1.创建名为test的topic
一个partition分区,每个分区一个副本replication
/opt/kafka/default/bin/kafka-topics.sh --create \
--bootstrap-server 192.168.1.111:9092 \
--replication-factor 1 --partitions 1 --topic test
响应如下结果,表示test主题创建成功
Created topic test.
选项 说明:
- –topic 定义topic名称
- –replication-factor 定义副本数 (注意:单机版只能创建1个分区副本,因为只有一个broker,你创建多了kafka没地方放置)
- –partitions 定义分区数
许多旧的kafka版本中只用
--zookeeper ip:2181
来连接zookeeper进而控制broker服务执行命令,在kafka较新的版本中虽然仍然支持该参数,但是已经不建议使用,因为在kafka的发展路线图中zookeeper会逐步被剔除。所以建议大家采用--bootstrap-server ip:9092
方式进行服务连接。
4.2.查看已创建的topic主题及分区信息
查看test主题的命令,ip换成你自己的kafka服务ip
/opt/kafka/default/bin/kafka-topics.sh --describe \
--bootstrap-server 192.168.1.111:9092 --topic test
响应结果:
Topic: test TopicId: POmPtQ70SNWVPVvgvbR1Og PartitionCount: 1 ReplicationFactor: 1 Configs: segment.bytes=1073741824
Topic: test Partition: 0 Leader: 1 Replicas: 1 Isr: 1
4.3.模拟生产者生产数据
下面的命令ip换成自己的kafka服务ip
/opt/kafka/default/bin/kafka-console-producer.sh --bootstrap-server 192.168.1.111:9092 --topic test
执行命令后随便输入一条消息,比如:11111111111,回车
4.4.模拟消费者
另外开一个终端,执行
/opt/kafka/default/bin/kafka-console-consumer.sh \
--bootstrap-server 192.168.1.111:9092 --from-beginning --topic test
消费者端收到消息11111111111,表示测试成功。--from-beginning
用于把主题中历史所有的数据都读取出来。
四、停止kafka与zookeeper
执行下面命令,停止kafka进程。正常执行之后是没有任何响应结果的,可以用jps命令查看kafka进程是否还在(命令执行后完全停止进程,会有一点延时,稍等片刻再看)
/opt/kafka/default/bin/kafka-server-stop.sh
执行下面命令,停止zookeeper进程
/opt/zookeeper/default/bin/zkServer.sh stop
如下相应信息证明stop成功。
# /opt/zookeeper/default/bin/zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/default/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED