走进消息队列实践-搭建Kafka集群 | 青训营

109 阅读2分钟

环境准备

本次搭建基于Centos7平台搭建,使用Docker来搭建单zookeeper节点的Kafka集群,并进行简单测试。

使用Docker下载镜像

  • docker pull wurstmeister/kafka
  • docker pull wurstmeister/zookeeper

使用docker images命令检查镜像是否下载成功 image.png

启动zookeeper容器

docker run -d --name zk -p 2181:2181 -t wurstmeister/zookeeper

zookeeper容器命名为zk,端口映射为:2181:2181。

使用docker ps命令检查容器是否启动成功

image.png 这样就表示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命令检查容器是否启动成功 image.png 如图,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 image.png

收发消息测试

  1. 使用docker exec -it kafka1 /bin/bash进入kafka容器。
  2. 进入opt/bin/kafka目录
  3. 使用命令kafka-console-producer.sh --broker-list 192.168.81.131:9092 --topic test启动生产者
  4. 新开一个标签页,同样的步骤,使用命令kafka-console-consumer.sh --bootstrap-server 192.168.81.131:9092 --topic test启动消费者

生产者 image.png

消费者 image.png

可以看出,单节点的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

image.png 同样按照之前的步骤设置好分区、副本和主题。

在kafka2容器内创建第二个主题test2,分区和副本设置为 2 image.png 查询test2主题可以看到,已经是集群环境,可以看到leader机器、副本在分区上的保存情况,和ISR列表成员

测试

使用kafka1发送消息,kafka2接收消息。

kafka1发送消息

image.png

kafka2接收消息

image.png

至此,集群模式下也能正常收发消息。

小结

简单的搭建了kafka集群并进行了简单测试验证。整个搭建过程还是有一定难度的,尤其是在不熟悉命令的含义时很容易出错。

当然,搭建的过程中出现错误就要善于使用搜索引擎解决问题,你碰到的问题,也许有人曾经也碰到过相似的。