在Docker环境下部署Kafka

1.下载kafka和zookeeper镜像

  1. 直接下载最新的zookeeper镜像,由于我已经下载过了,这里只做了更新

    1
    docker pull zookeeper

    zookeeper镜像下载

  2. 下载kafka镜像,这里使用wurstmeister/kafka的最新镜像

    1
    docker pull wurstmeister/kafka

    kafka镜像下载

下载完成后,运行docker images查看下载的镜像

1
docker images

docker镜像

2.启动容器

    由于要涉及到zookeeper和kafka之间的通信,所以我们运用docker内部容器通信机制先新建一个网络。

  1. 新建网络

    1
    docker network create app

    新建docker网络

    运行 docker network ls查看新建的网络

    1
    docker network ls

    查看新建网络

    运行docker network inspect app查看网络详细信息

    1
    docker network inspect app

    网络详细信息

    从详细信息中可以看到其连接的containers为空,说明还没有容器连接进来

  2. 新建zookeeper和kafka容器

    创建zookeeper容器

    1
    docker run --net=app --name zookeeper -p 2181 -t zookeeper

    创建kafka容器,注意由于使用的是docker创建的网络,所以KAFKA_ADVERTISED_HOST_NAME参数需要设置为0.0.0.0

    1
    2
    3
    4
    5
    6
    docker run --net=app --name kafka -p 9092 \
    --link zookeeper \
    --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 \
    --env KAFKA_ADVERTISED_HOST_NAME=0.0.0.0 \
    --env KAFKA_ADVERTISED_PORT=9092 \
    wurstmeister/kafka:latest

    运行docker ps查看正在运行的容器

    1
    docker ps

    docker启动的容器

3.测试发送消息和接受消息

在命令行下运行 docker exec -it kafka /bin/bash命令,进入kafka容器内部

1
docker exec -it kafka /bin/bash

kafka容器内部命令行

kafka文件存放在/opt/kafka_2.12-0.11.0.1/目录下

1
cd /opt/kafka_2.12-0.11.0.1/

调用kafka-topics.sh创建一个mykafka的topic

1
bin/kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic mykafka

调用kafka-console-producer.sh运行一个生产者

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

启动生产者

启动另一个窗口,按照上边的步骤启动kafka容器的命令行,执行如下消费者命令

1
bin/kafka-console-consumer.sh --zookeeper zookeeper:2181 --topic mykafka --from-beginning

在生产者窗口发送一条命令,查看消费者端口是否接到命令

发送消息

接收消息