предисловие
В этой статье в основном описывается, как использовать Docker для сборки автономной версии и кластерной версии Kafka, а также даются некоторые ответы на возникающие проблемы, которые могут быть полезны новичкам.
В этой статье использовано зеркало: wurstmeister/kafka.
полагаться
1. Поскольку контейнер kafka используетdocker-compose
build, поэтому убедитесь, что у вас установлен этот инструмент.
2. kafka зависит от Zookeeper, поэтому скачайте зеркальное изображение Zookeeper.
единое видение
Согласно README проекта wurstmeister/kafka-docker, шаги по сборке автономной версии Kafka следующие:
Примечание. Количество брокеров в kafka таким образом не масштабируется.
# 1.第一步需要拷贝项目,目的是得到 docker-compose-single-broker.yml
git clone git@github.com:wurstmeister/kafka-docker.git
# 2.手动下拉镜像(主要是想指定版本)
$ docker pull wurstmeister/kafka:2.11-0.11.0.3
$ docker pull wurstmeister/zookeeper
# 3.单机版的配置如下(docker-compose-single-broker.yml):
# 这里修改了两处:一是指定kafka镜像的版本;二是去掉KAFKA_CREATE_TOPICS配置,方便对比
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka:2.11-0.11.0.3
ports:
- "9092:9092"
environment:
# 注意这里需要替换为你自己的IP
KAFKA_ADVERTISED_HOST_NAME: 192.168.0.101
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# 4.启动一个单机版kafka
$ docker-compose -f docker-compose-single-broker.yml up -d
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a658b963e52c wurstmeister/kafka:2.11-0.11.0.3 "start-kafka.sh" 7 seconds ago Up 6 seconds 0.0.0.0:9092->9092/tcp kafka-docker_kafka_1
6c0a820e0a5a wurstmeister/zookeeper "/bin/sh -c '/usr/sb…" 7 seconds ago Up 6 seconds 22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp kafka-docker_zookeeper_1
# 测试能否扩展(docker-compose --scale 等同于 docker-compose scale)
$ docker-compose stop
$ docker-compose -f docker-compose-single-broker.yml up --scale kafka=3 -d
创建失败,提示 WARNING: The "kafka" service specifies a port on the host.
If multiple containers for this service are created on a single host, the port will clash.
Кластерная версия
Кластерная версия и автономная версия в основном отличаются по конфигурации, поэтому некоторые похожие шаги опущены ниже.
# 1.前面和单机版一样,需要下载镜像
# 2.集群版配置(docker-compose.yml)
# 可以看到,集群版和单机版只在于端口的不同
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka:2.11-0.11.0.3
ports:
- "9092"
environment:
# 注意这里需要替换为你自己的IP
KAFKA_ADVERTISED_HOST_NAME: 192.168.0.101
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# 3.测试运行集群版的kafka
docker-compose -f docker-compose.yml up --scale kafka=3 -d
# 可以看到启动了一个集群
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
77b73c627b46 wurstmeister/kafka:2.11-0.11.0.3 "start-kafka.sh" 6 seconds ago Up 3 seconds 0.0.0.0:32773->9092/tcp kafka-docker_kafka_1
fb4f8b6f7989 wurstmeister/kafka:2.11-0.11.0.3 "start-kafka.sh" 10 seconds ago Up 8 seconds 0.0.0.0:32772->9092/tcp kafka-docker_kafka_2
d67ba904e1d0 wurstmeister/kafka:2.11-0.11.0.3 "start-kafka.sh" 10 seconds ago Up 8 seconds 0.0.0.0:32771->9092/tcp kafka-docker_kafka_3
6c0a820e0a5a wurstmeister/zookeeper "/bin/sh -c '/usr/sb…" 11 minutes ago Up 6 minutes 22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp kafka-docker_zookeeper_1
тест соединения
# 创建一个topic
$ docker exec kafka-docker_kafka_1 \
kafka-topics.sh \
--create --topic topic001 \
--partitions 1 \
--zookeeper zookeeper:2181 \
--replication-factor 1
Created topic "topic001".
# 查看topic
$ docker exec kafka-docker_kafka_1 kafka-topics.sh --list --zookeeper zookeeper:2181 topic001
topic001
вопросы и ответы
Многим может быть любопытно, почему разница между автономной версией и версией для кластера только в порте?
Согласно вики автора, схема топологии сети автономной версии kafka выглядит следующим образом:
Топология сети кластерной версии следующая:
Для автономной версии у него есть только один Брокер, и его порт 9092 можно напрямую сопоставить с портом 9092 хоста, не вызываяпортовый конфликт, поэтому используйте"9092:9092"
Все хорошо.
Для версии кластера у него есть несколько брокеров.Если все порты брокера сопоставлены с портом 9092 хоста, это вызоветпортовый конфликт(то есть и 32200, и 32201 на картинке выше становятся 9092), поэтому вы должны использовать"9092"
заменять.
Примечание. Если вы хотите пойти дальше, вы можете проверить вики автора по справочной ссылке.
Ссылаться на
kafka-docker README
kafka-docker wiki
Если вас интересуют другие мои статьи, вы можете проверить мою домашнюю страницу Nuggets или подписаться на мой общедоступный аккаунт «Ян Ган Шуо». Вы можете поставить лайк и подписаться!