Кафка с Docker Swarm - Как выполнять команды Кафки - PullRequest
0 голосов
/ 28 января 2020

Я новичок в Kafka и немного растерялся.

До сих пор я создал две docker машины, менеджера и рабочего с этими командами:

docker-machine create manager
docker-machine create worker1

Я добавил эти два узла в docker рой.

docker@manager:~$ docker node ls                                                                                                                                                                             
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
6bmovp3hr0j2w5irmexvvjgzq *   manager             Ready               Active              Leader              19.03.5
mtgbd9bg8d6q0lk9ycw10bxos     worker1             Ready               Active                                  19.03.5

Я хочу создать кластер кафки внутри docker роя. Мой docker-compose.yml выглядит следующим образом

version: '3.2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka:latest
    ports:
      - target: 9094
        published: 9094
        protocol: tcp
        mode: host
    environment:
      HOSTNAME_COMMAND: "hostname | awk -F'-' '{print $$2}'"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: INSIDE://:9092,OUTSIDE://_{HOSTNAME_COMMAND}:9094
      KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9094
      KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

, где hostname | awk -F'-' '{print $$2}' команда возвращает manager из worker.

Затем я выполняю развертывание с помощью команды docker stack deploy -c docker-compose.yml kafka, которая возвращает

Creating network kafka_default
Creating service kafka_zookeeper
Creating service kafka_kafka

Я проверил, что служба запущена с docker service ls

ID                  NAME                MODE                REPLICAS            IMAGE                           PORTS
ttprq3ak98om        kafka_kafka         replicated          0/1                 wurstmeister/kafka:latest       
vxdhkaonrbpe        kafka_zookeeper     replicated          0/1                 wurstmeister/zookeeper:latest   *:2181->2181/tcp

, а затем масштабирую службу с docker service scale kafka_kafka=2. Когда я выполняю docker service ps kafka_kafka, я получаю

ID                  NAME                IMAGE                       NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
ydn64mwvlasr        kafka_kafka.1       wurstmeister/kafka:latest   worker1             Running             Running 27 minutes ago                       *:9094->9094/tcp
shkpd2jv6s29        kafka_kafka.2       wurstmeister/kafka:latest   manager             Running             Running 27 minutes ago                       *:9094->9094/tcp

Пока у меня есть один ZooKeeper и два брокера Kafka. Один брокер на менеджера и один на работника. Это означает, что брокер на рабочем сервере реплицирует брокер на диспетчере?

Также мне интересно, как запускать команды Kafka на этом шаге. Предположим, что я хочу создать топи c. Как мне этого добиться? Я должен загрузить бинарный файл Кафки отсюда: https://kafka.apache.org/downloads? И если ответ да, я должен страт сервер Zookeeper? Это уже не работает?

Ответы [ 2 ]

1 голос
/ 28 января 2020

Это означает, что посредник на работнике реплицирует посредник на менеджере?

Для целей вашего вопроса Kafka можно охарактеризовать как master-less. Все брокеры функционируют одинаково, и их процессы взаимодействуют друг с другом только для репликации.

(Если вы хотите проникнуть во внутренние органы, вы можете изучить процесс Controller, который выполняется на одном из брокеров)

Мне нужно указать сервер zookeeper? Это уже не работает?

Да, это так. Ref - kafka_zookeeper изображение.

Предположим, я хочу создать топи c. Как мне этого добиться?

Ну, вы можете вообще пропустить использование команд CLI и использовать другой контейнер, такой как Kafka topi c manager

Мне нужно скачать бинарный файл Кафки отсюда

В противном случае, да / нет. Если вы хотите создавать темы с вашего хоста , то да. Внутри контейнера тоже работает (подсказка: выучить docker-compose exec)

0 голосов
/ 28 января 2020

для запуска команд kafka внутри контейнера, вам необходимо сначала получить идентификатор контейнера kafka

$ docker ps -a  
  CONTAINER ID                 IMAGE  
   1239075412         wurstmeister/kafka:latest  

Теперь возьмите этот идентификатор контейнера (в вашем случае будет другим) для kafka

$ docker exec -it 1239075412 sh  

журналы присутствуют в следующей папке

# cd kafka/kafka-logs-1239075412  

команды kafka будут присутствовать в этом контейнере типа kafka-, а затем дважды нажмите вкладку
, вы получите все команды kafka для создания тем et c ..

...