本文将阐述如何用Docker在本地搭一套简单的 Kafka + Zookeeper


搭建

第一步:上GitHub 下载 或者 clone 这个项目

https://github.com/wurstmeister/kafka-dockergithub.com

这个项目的文档都偏向于如何在远端搭建 kafka,反而忽略(简单化)了本地使用的教程


第二步:修改 docker-compose-single-broker.yml 文件

把 KAFKA_ADVERTISED_HOST_NAME 改成 localhost ,改完后如下


version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    build: .
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: localhost
      KAFKA_CREATE_TOPICS: "test:1:1"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock


第三步: 在对应的目录下,运行以下指令

docker-compose -f docker-compose-single-broker.yml up -d


第四步:确认 kafka 和 zookeeper 运行正常

在对应目录下 运行

docker-compose ps

可以看到

使用Docker搭一套本地Kafka+Zookeeper_Docke


或者运行

docker ps

使用Docker搭一套本地Kafka+Zookeeper_Docke_02



简单把玩 kafka

第一步:下载 官方 Kafka 源码包

参考官方文档 https://kafka.apache.org/quickstart 下载 kafka_2.12-2.4.0.tgz (当前版本),解压, 在解压目录下我们可以看到 一个叫 bin 的目录,里面存放了很多官方提供的 命令行工具


第二步:调用 bin 目录下的命令行工具 查看和创建 topic

从 docker-compose-single-broker.yml 可以看到,启动时会默认帮我们生成一个 topic 叫 test

运行以下指令看看 test topic 是不是真的存在

bin/kafka-topics.sh --list --bootstrap-server localhost:9092


我们再创建一个叫 hello 的 topic

 bin/kafka-topics.sh --create  --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic hello

运行成功可以看到

使用Docker搭一套本地Kafka+Zookeeper_Zookeeper_03

再次运行

bin/kafka-topics.sh --list --bootstrap-server localhost:9092

使用Docker搭一套本地Kafka+Zookeeper_Docke_04


第三步:调用 bin 目录下的命令行工具作为 producer 发送一些消息

 bin/kafka-console-producer.sh --broker-list localhost:9092  --topic test

使用Docker搭一套本地Kafka+Zookeeper_Docke_05

我往 test topic 里发送了 “hello” 和 “world” 两条消息


第四步:调用 bin 目录下的命令行工具作为consumer 消费消息

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

使用Docker搭一套本地Kafka+Zookeeper_Docke_06

两条消息都成功收到了



以上实验都证明了本地 kafka 搭建成功了,除了使用命令行工具也可以写一些程序来尝试发送或者消费 kafka 里的消息


把玩结束后,只需要在 wurstmeister/kafka-docker 的目录下运行以下指令就能关闭本地的 kafka 和 zookeeper 的 Docker container 了

docker-compose down


最后附上使用上述方案本地搭起的docker的架构图

使用Docker搭一套本地Kafka+Zookeeper_Docke_07

(图片来自 : https://github.com/wurstmeister/kafka-docker/wiki/Connectivity )