环境准备
本次搭建基于Centos7平台搭建,使用Docker来搭建单zookeeper节点的Kafka集群,并进行简单测试。
使用Docker下载镜像
docker pull wurstmeister/kafkadocker pull wurstmeister/zookeeper
使用docker images命令检查镜像是否下载成功
启动zookeeper容器
docker run -d --name zk -p 2181:2181 -t wurstmeister/zookeeper
zookeeper容器命名为zk,端口映射为:2181:2181。
使用docker ps命令检查容器是否启动成功
这样就表示zookeeper容器启动成功了。接下来就着手搭建kafka集群。
启动kafka容器
启动命令
docker run -d --name kafka1 \
-p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=192.168.81.131:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.81.131:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka
ip地址注意改为自己虚拟机的ip地址
使用docker ps命令检查容器是否启动成功
如图,kafka1容器启动成功。
进入kafka容器创建主题(Topic)
输入命令来创建主题test
$KAFKA_HOME/bin/kafka-topics.sh --create --topic test --zookeeper 192.168.81.131:2181 --replication-factor 1 --partitions 1
创建了一个名为test的主题,一个副本一个分区,注意指定好zookeeper的地址,否则会创建失败。
通过命令检查主题是否创建成功
$KAFKA_HOME/bin/kafka-topics.sh --zookeeper 192.168.81.131:2181 --describe --topic test
收发消息测试
- 使用
docker exec -it kafka1 /bin/bash进入kafka容器。 - 进入
opt/bin/kafka目录 - 使用命令
kafka-console-producer.sh --broker-list 192.168.81.131:9092 --topic test启动生产者 - 新开一个标签页,同样的步骤,使用命令
kafka-console-consumer.sh --bootstrap-server 192.168.81.131:9092 --topic test启动消费者
生产者
消费者
可以看出,单节点的hello world测试没有问题。
搭建集群
简单改下配置,即可再次启动一个kafka容器,用于组建集群。
启动命令
docker run -d --name kafka2 \
-p 9093:9093 \
-e KAFKA_BROKER_ID=1 \
-e KAFKA_ZOOKEEPER_CONNECT=192.168.81.131:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.81.131:9093 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9093 -t wurstmeister/kafka
同样按照之前的步骤设置好分区、副本和主题。
在kafka2容器内创建第二个主题test2,分区和副本设置为 2
查询test2主题可以看到,已经是集群环境,可以看到leader机器、副本在分区上的保存情况,和ISR列表成员
测试
使用kafka1发送消息,kafka2接收消息。
kafka1发送消息
kafka2接收消息
至此,集群模式下也能正常收发消息。
小结
简单的搭建了kafka集群并进行了简单测试验证。整个搭建过程还是有一定难度的,尤其是在不熟悉命令的含义时很容易出错。
当然,搭建的过程中出现错误就要善于使用搜索引擎解决问题,你碰到的问题,也许有人曾经也碰到过相似的。