| |

Как установить Apache Kafka в Docker

Apache Kafka — это мощная система обмена сообщениями, которая широко используется в разработке для передачи и обработки данных в реальном времени. Установка Kafka в Docker обеспечивает удобный и изолированный способ развертывания этой системы на вашем сервере.

Kafka или RabbitMQ

Установка Docker

Для начала необходимо скачать с сайта и установить Docker на Windows 10. Сложностей с этим возникнуть не должно, после установки необходимо установить или обновить ядро Linux по инструкции. Так же рекомендую к прочтению, как установить Docker в Debian.

После того, как Docker установлен, запустим его.

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

Архитектура Kafka

Рассмотрим основные термины:

  • Producer – производитель Kafka — это приложение, которое отправляет данные / события в раздел Kafka. Производители отправляют сообщения брокеру, который затем распределяет данные по доступным разделам.
  • Consumer — программа, которая подписывается на одну или несколько тем и получает сообщения от брокеров.
  • Topics — категория или название канала, в котором публикуются сообщения. Оно представляет определенный поток данных.
  • Partitions – это разделы, в которых хранятся сообщения внутри раздела. Каждый раздел создается с одним или несколькими разделами. Разделы оказывают значительное влияние на масштабируемое потребление сообщений. Каждый раздел размещен на отдельном брокере Kafka.
  • Broker – единый экземпляр сервера Kafka, который хранит разделы и управляет ими. Брокеры действуют как мост между потребителями и производителями.
  • Leader в каждом разделе есть один брокер, действующий как лидер, ответственный за обработку всех запросов на чтение и запись для этого раздела. Лидер реплицирует данные другим брокерам для обеспечения отказоустойчивости.
  • Replication Factor коэффициент репликации — это количество копий сообщения через несколько брокеров. Значение должно быть меньше или равно количеству имеющихся у нас брокеров. Репликация обеспечивает высокую доступность и отказоустойчивость.
  • Offset каждому сообщению в разделе присваивается уникальный идентификатор, называемый смещением. Он представляет положение сообщения в разделе.
  • Consumer Offset указывает позицию последнего сообщения, отправленного потребителем из определенного раздела. Это помогает потребителям отслеживать свой прогресс в разделе.
  • Producer Acknowledgment это параметр конфигурации для уровня подтверждения, требуемого от брокеров Kafka после публикации сообщения. Его можно настроить для обеспечения долговечности и надежности сообщения.

Кроме того, Kafka использует Apache ZooKeeper для распределенной координации, включая управление и поддержание метаданных кластера (обо всех узлах, темах, разделах и т.д.), отслеживание статуса узлов, выбор лидера и отслеживание смещений потребителей.

Схема полноценного кластера должна kafka должна выглядеть вот так, но рассмотрим ее в следующей инструкции.

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

Запуск Kafka в Docker

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

После успешной установки Docker загрузите образ Kafka из официального репозитория Docker Hub, выполнив следующую команду к командной строке (CMD):

docker pull wurstmeister/kafka

После загрузки образа Kafka создайте Docker-контейнер, используя следующую команду:

docker run -d --name kafka -p 9092:9092 --env ADVERTISED_HOST=ваш_IP --env ADVERTISED_PORT=9092 --link zookeeper:zookeeper wurstmeister/kafka

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

Для проверки установки Kafka в Docker выполните следующую команду:

docker ps

Поздравляю! Теперь у вас установлена Kafka в Docker. Вы можете начать использовать Kafka для обмена сообщениями и обработки данных в реальном времени.

Запуск Kafka с помощью Docker-compose

Так же настроим брокер Kafka с одним узлом с помощью Docker Compose, создадим файл Docker Compose. Файл Docker Compose – это файл YAML, который определяет службы, сети и тома, составляющие наше приложение.

image 36

Создайте файл docker-compose.yml в вашей рабочей директории или в любой другой удобной для вас папке. Вот пример содержимого файла docker-compose.yml для Kafka и Zookeeper:

version: '3'
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
      
  kafka-ui:
    image: provectuslabs/kafka-ui
    container_name: kafka-ui
    ports:
      - 8090:8080
    restart: always
    environment:
      - KAFKA_CLUSTERS_0_NAME=local
      - KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka:9092
      - KAFKA_CLUSTERS_0_ZOOKEEPER=zookeeper:2181

Этот файл определяет две службы: Zookeeper и Kafka. Zookeeper необходим для работы Kafka. Вы можете настроить порты и другие параметры по вашему усмотрению.

В командной строке перейдите в директорию, где находится ваш файл docker-compose.yml, и выполните следующую команду:

docker-compose up -d

Это запустит Kafka и Zookeeper в фоновом режиме.

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

  • version: ‘3’: Здесь указывается версия формата файла Docker Compose, который мы используем.
  • services: В этом разделе определяется служба Kafka, которую мы хотим развернуть. В данном случае мы используем официальный образ Docker zookeeper: и kafka: с включенным плагином управления.
  • image: wurstmeister/zookeeper: Здесь указывается образ докера, который мы хотим использовать.
  • container_name: kafka При этом параметре контейнеру присваивается имя.
  • environment: В этом разделе задаются переменные среды для контейнера Kafka.
  • ports: В этом разделе порты, используемые kafka, сопоставляются с соответствующими портами на главном компьютере. В этом случае мы сопоставляем порт 9092.
  • networks: В этом разделе задаются сетевые настройки для контейнера Kafka. В этом примере мы используем сеть Docker bridge по умолчанию.

Запуск и проверка kafka-ui

Мы уже установили веб-консоль управления kafka-ui Apache Kafka в Docker, добавив брокер в docker-compose.yml, так же кластер можно добавить по адресу:

http://localhost:8080/ui/clusters/create-new-cluster 
image 40

Перейдем в консоль kafka-ui для проверки работы Kafka :

image 38
http://localhost:8090/

Так же для проверки работы Kafka вы можете использовать инструмент Kafka Console Producer и Kafka Console Consumer. Выполните следующие команды:

docker exec -it <имя_контейнера_kafka> /opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic example-topic

Замените <имя_контейнера_kafka> на имя контейнера, который был создан для Kafka в результате выполнения docker-compose up -d.

Предлагаю обсудить инструкцию в телеграмм.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *