Перейти к основному содержимому

Руководство по настройке Apache Kafka с помощью Docker

· 5 мин. чтения

1. Обзор

Docker — один из самых популярных контейнерных движков, используемых в индустрии программного обеспечения для создания, упаковки и развертывания приложений.

В этом руководстве мы узнаем, как настроить Apache Kafka с помощью Docker.

2. Настройка одного узла

Настройка брокера Kafka с одним узлом удовлетворит большинство потребностей локальной разработки , поэтому давайте начнем с изучения этой простой настройки.

2.1. docker-compose.yml Конфигурация

Чтобы запустить сервер Apache Kafka, нам сначала нужно запустить сервер Zookeeper .

Мы можем настроить эту зависимость в файле docker-compose.yml , что гарантирует, что сервер Zookeeper всегда будет запускаться раньше сервера Kafka и останавливаться после него.

Давайте создадим простой файл docker-compose.yml с двумя сервисами, а именно zookeeper и kafka :

version: '2'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- 22181:2181

kafka:
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper
ports:
- 29092:29092
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

В этой настройке наш сервер Zookeeper прослушивает порт = 2181 для службы kafka , которая определена в той же настройке контейнера. Однако для любого клиента, работающего на хосте, он будет доступен через порт 22181 .

Точно так же служба kafka доступна для хост-приложений через порт 29092 , но на самом деле она объявляется через порт 9092 в среде контейнера , настроенной свойством KAFKA_ADVERTISED_LISTENERS .

2.2. Запустите сервер Кафка

Давайте запустим сервер Kafka, запустив контейнеры с помощью команды docker-compose :

$ docker-compose up -d
Creating network "kafka_default" with the default driver
Creating kafka_zookeeper_1 ... done
Creating kafka_kafka_1 ... done

Теперь воспользуемся командой nc , чтобы убедиться, что оба сервера прослушивают соответствующие порты :

$ nc -z localhost 22181
Connection to localhost port 22181 [tcp/*] succeeded!
$ nc -z localhost 29092
Connection to localhost port 29092 [tcp/*] succeeded!

Кроме того, мы также можем проверить подробные журналы во время запуска контейнеров и убедиться, что сервер Kafka работает:

$ docker-compose logs kafka | grep -i started
kafka_1 | [2021-04-10 22:57:40,413] DEBUG [ReplicaStateMachine controllerId=1] Started replica state machine with initial state -> HashMap() (kafka.controller.ZkReplicaStateMachine)
kafka_1 | [2021-04-10 22:57:40,418] DEBUG [PartitionStateMachine controllerId=1] Started partition state machine with initial state -> HashMap() (kafka.controller.ZkPartitionStateMachine)
kafka_1 | [2021-04-10 22:57:40,447] INFO [SocketServer brokerId=1] Started data-plane acceptor and processor(s) for endpoint : ListenerName(PLAINTEXT) (kafka.network.SocketServer)
kafka_1 | [2021-04-10 22:57:40,448] INFO [SocketServer brokerId=1] Started socket server acceptors and processors (kafka.network.SocketServer)
kafka_1 | [2021-04-10 22:57:40,458] INFO [KafkaServer id=1] started (kafka.server.KafkaServer)

После этого наша установка Kafka готова к использованию.

2.3. Подключение с помощью инструмента Kafka

Наконец, давайте воспользуемся графической утилитой Kafka Tool , чтобы установить соединение с нашим недавно созданным сервером Kafka , а позже мы визуализируем эту настройку:

./d9c6833996f1a8c8bede781a4d1104b8.png

Мы должны отметить, что нам нужно использовать свойство серверов Bootstrap для подключения к серверу Kafka, прослушивающему порт 29092 для хост-компьютера.

Наконец, мы должны визуализировать соединение на левой боковой панели:

./f784775be657e17e961f63a9a7451a47.png

Таким образом, записи для тем и потребителей пусты, потому что это новая настройка. После создания тем мы должны иметь возможность визуализировать данные по разделам. Более того, если к нашему серверу Kafka подключены активные потребители, мы также можем просмотреть их данные.

3. Настройка кластера Kafka

Для более стабильной среды нам понадобится устойчивая установка. Давайте расширим наш файл docker-compose.yml , чтобы создать установку кластера Kafka с несколькими узлами.

3.1. docker-compose.yml Конфигурация

Настройка кластера для Apache Kafka должна иметь избыточность как для серверов Zookeeper, так и для серверов Kafka.

Итак, добавим конфигурацию еще по одной ноде для сервисов Zookeeper и Kafka:

---
version: '2'
services:
zookeeper-1:
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- 22181:2181

zookeeper-2:
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- 32181:2181

kafka-1:
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper-1
- zookeeper-2

ports:
- 29092:29092
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-1:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
kafka-2:
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper-1
- zookeeper-2
ports:
- 39092:39092
environment:
KAFKA_BROKER_ID: 2
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-2:9092,PLAINTEXT_HOST://localhost:39092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

Мы должны убедиться, что имена сервисов и KAFKA_BROKER_ID уникальны для сервисов.

Кроме того, каждая служба должна предоставлять хост-компьютеру уникальный порт. Хотя zookeeper-1 и zookeeper-2 прослушивают порт 2181 , они предоставляют его хосту через порты 22181 и 32181 соответственно. Та же логика применима к сервисам kafka-1 и kafka-2 , где они будут прослушивать порты 29092 и 39092 соответственно.

3.2. Запустите кластер Kafka

Давайте раскрутим кластер с помощью команды docker-compose :

$ docker-compose up -d
Creating network "kafka_default" with the default driver
Creating kafka_zookeeper-1_1 ... done
Creating kafka_zookeeper-2_1 ... done
Creating kafka_kafka-2_1 ... done
Creating kafka_kafka-1_1 ... done

Когда кластер запущен, давайте воспользуемся Kafka Tool для подключения к кластеру, указав через запятую значения для серверов Kafka и соответствующих портов:

./0d9d93934f24a38766fe9410112f4bce.png

Наконец, давайте взглянем на несколько узлов брокера, доступных в кластере:

./a2a55f9f8a6b2a8dd14ddbdef6256201.png

4. Вывод

В этой статье мы использовали технологию Docker для создания одноузловых и многоузловых установок Apache Kafka.

Мы также использовали Kafka Tool для подключения и визуализации сведений о настроенном сервере брокера.