Если вы не знаете, как использовать kafka-docker, см. здесь

Kafka

предисловие

В этой статье в основном описывается, как использовать Docker для сборки автономной версии и кластерной версии Kafka, а также даются некоторые ответы на возникающие проблемы, которые могут быть полезны новичкам.

В этой статье использовано зеркало: wurstmeister/kafka.

полагаться

1. Поскольку контейнер kafka используетdocker-composebuild, поэтому убедитесь, что у вас установлен этот инструмент.
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 выглядит следующим образом:20200929092457.png

Топология сети кластерной версии следующая:20200929093934.png

Для автономной версии у него есть только один Брокер, и его порт 9092 можно напрямую сопоставить с портом 9092 хоста, не вызываяпортовый конфликт, поэтому используйте"9092:9092"Все хорошо.

Для версии кластера у него есть несколько брокеров.Если все порты брокера сопоставлены с портом 9092 хоста, это вызоветпортовый конфликт(то есть и 32200, и 32201 на картинке выше становятся 9092), поэтому вы должны использовать"9092"заменять.

Примечание. Если вы хотите пойти дальше, вы можете проверить вики автора по справочной ссылке.

Ссылаться на

kafka-docker README
kafka-docker wiki

Если вас интересуют другие мои статьи, вы можете проверить мою домашнюю страницу Nuggets или подписаться на мой общедоступный аккаунт «Ян Ган Шуо». Вы можете поставить лайк и подписаться!