Настройка локального экземпляра Apache Kafka для тестирования

Недавно я начал копаться в Apache Kafka для проекта, над которым я работаю на работе. Чем больше я начинал изучать его, тем больше понимал, что мне нужно создать локальный кластер Kafka для тестирования. Эта статья проведет вас через этот процесс и, надеюсь, сэкономит ваше время 😄.

Если вы не знаете, что такое Kafka, вот отличное видео от Confluent.

💡 Вы можете следовать за мной, клонируя репозиторий, который я создал здесь.

Установка двоичных файлов

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

Способ Docker

Это, безусловно, самый простой способ, который я нашел, и он сэкономит вам массу времени. После клонирования репозитория просто запустите его!

docker-compose up -d
Войдите в полноэкранный режим Выйдите из полноэкранного режима

Если вы хотите узнать, что здесь происходит, давайте посмотрим на файл docker-compose.yaml.

docker-compose.yaml

---
version: '3'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:7.0.1
    container_name: zookeeper
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  broker:
    image: confluentinc/cp-kafka:7.0.1
    container_name: broker
    ports:
    # To learn about configuring Kafka for access across networks see
    # https://www.confluent.io/blog/kafka-client-cannot-connect-to-broker-on-aws-on-docker-etc/
      - "9092:9092"
    depends_on:
      - zookeeper
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092,PLAINTEXT_INTERNAL://broker:29092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
Вход в полноэкранный режим Выйти из полноэкранного режима
  1. Мы запускаем экземпляр Zookeeper на порту 2181 внутри сети Docker (т.е. недоступен с хоста).
  2. Затем мы запускаем наш брокер, который является экземпляром Kafka, зависящим от Zookeeper. Он открыт на порту 9092 и доступен с хоста.

Все остальное установлено по умолчанию. Если вы хотите узнать, что делает каждая переменная окружения, перейдите по этой ссылке. Вы можете добавить несколько брокеров (экземпляров Kafka) в один и тот же файл docker-compose.

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

Взаимодействие с кластером

Прежде чем публиковать что-либо, давайте запустим потребителя, чтобы убедиться, что наша установка работает. Для этого выполните следующую команду из CLI.

docker exec --interactive --tty broker 
kafka-console-consumer --bootstrap-server localhost:9092 
                       --topic example-topic 
                       --from-beginning
Войти в полноэкранный режим Выйти из полноэкранного режима

Теперь давайте создадим несколько сообщений и посмотрим их в действии!

docker exec --interactive --tty broker 
kafka-console-producer --bootstrap-server localhost:9092 
                       --topic example-topic
Войти в полноэкранный режим Выйти из полноэкранного режима

Вот как это будет выглядеть из терминала. Слева от вас находится производитель, а справа потребитель.

Возможно, графический интерфейс?

Не любите CLI? Существует множество инструментов. Я хотел найти хорошее, легкое, OSS решение для этого. Я решил остановиться на Tools for Apache Kafka for VS Code.

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

Вот как это выглядит, когда он находит ваш экземпляр.

producer.kafka

PRODUCER keyed-message
topic: example-topic
key: mykeyq
record content

###

PRODUCER non-keyed-json-message
topic: example-topic
{
    "type": "my_test_event-{{random.number}}"
}
Вход в полноэкранный режим Выход из полноэкранного режима

потребитель.kafka

CONSUMER consumer-group-id
topic: example-topic
partitions: 0
from: 1
Войти в полноэкранный режим Выйти из полноэкранного режима

Вы можете вызывать производителей и потребителей прямо в VS Code, что довольно просто и здорово!

Заключение

Ну вот и все! Создание контейнера docker, безусловно, сэкономило мне немного времени только для тестирования. Надеюсь, вам понравился этот пост и до встречи в следующий раз 👋

Ссылки

  1. https://developer.confluent.io/quickstart/kafka-docker/
  2. https://marketplace.visualstudio.com/items?itemName=jeppeandersen.vscode-kafka
  3. https://docs.confluent.io/platform/current/kafka/multi-node.html

Оцените статью
devanswers.ru
Добавить комментарий