WSL и Docker для локального развертывания Apache Kafka с GUI и всеми компонентами в контейнере: моя реальная история поиска веб-интерфейса и настройки портов (начало).
Развертывание Kafka на Windows с Docker в WSL
В конце августа 2024 года команда serverless-платформы Upstash, на которой у меня есть рабочий инстанс Apache Kafka, разослала своим пользователям «письма счастья», о том, что через полгода поддержка этого брокера сообщений прекращается. Поиск бесплатного аналога не дал результатов, поэтому пришлось разворачивать собственный экземпляр Kafka. Исходных требований к нему у меня было совсем немного:
- возможность запуска по желанию в любое время суток;
- невысокое потребление ресурсов обычного офисного ноутбука с ОС Windows;
- наличие GUI.
Требования 1 и 2 можно реализовать с помощью Docker-контейнеров, запускаемых на WSL (Windows Subsystem for Linux) — подсистеме Windows для Linux, позволяющей запускать среду Linux на ОС Windows без отдельной виртуальной машины. С помощью Windows Subsystem for Linux (WSL) можно запускать Linux в оболочке Bash, чтобы работать с CLI-интерфейсом и приложениями Linux. В отличие от полноценной виртуальной машины, WSL потребляет сильно меньше ресурсов (ЦП, памяти и хранилища), а также может обращаться к файлам Windows в Linux.
А чтобы изолировать приложения друг от друга, исключая конфликты с взаимозависимостями, WSL поддерживает контейнеризацию. Самым известным инструментом контейнеризации сегодня является Docker, который позволяет упаковать приложение со всем его окружением и зависимостями в контейнер, чтобы запустить его на любой Linux-подобной системе. Так можно изолировать приложения от инфраструктуры, перезапуская их по мере необходимости в виде контейнеров. Docker-контейнер – это запущенный и изолированный образ одного или нескольких приложений, поддерживающий временное хранение данных, которые записываются в его верхний слой и удаляются при удалении контейнера. Каждый контейнер запускается в отдельном процессе. Контейнеры создаются на основе Docker-образа — исполняемого пакета со всеми компонентами для запуска приложения: код, среда выполнения, библиотеки, переменные окружения и файлы конфигурации. Он состоит из слоев, причем каждое изменение записывается в новый слой. Docker-образ можно развертывать многократно, получая независимые контейнеры с рабочими приложениями. Инструкция о том, как собран Docker-образ и как запускать контейнеры, хранится в конфигурационном файле Dockerfile.
Приняв решение об использовании Docker как среды развертывания Kafka и всех ее компонентов, мне нужно было найти подходящий Docker-образ. Все нужные мне компоненты платформы Kafka (сам Kafka брокер, Zookeeper, Kafka JMX, ksqlDB, Kafka Connect, REST Proxy и Schema Registry) есть в Docker-образе от Confluent. Его описание можно посмотреть в Github-репозитории [1]. Однако, версия сообщества cp-all-in-one-community не содержит веб-интерфейса для работы с компонентами Kafka и мониторинга системы. Поэтому в качестве GUI я решила выбрать сервис AKHQ – веб-интерфейс для управления и мониторинга Apache Kafka. AKHQ предоставляет мощный набор инструментов для администрирования и мониторинга Kafka, позволяя достаточно просто управлять кластером Kafka даже неопытным пользователям. AKHQ поддерживает управление топиками, включая создание, удаление и изменение конфигураций, а также просмотр их метаданных: количество разделов и реплик. Можно просматривать и фильтровать сообщения в реальном времени, следить за статистикой отправки сообщений, состоянием продюсеров, потребителей и их групп, смещением и задержками. Еще AKHQ поддерживает интеграцию с системами аутентификации и авторизации, такими как LDAP, системами мониторинга, такими как Prometheus и Grafana, позволяет настраивать роли и разрешения для пользователей. Наконец, с AKHQ можно развернуть Kafka в Kubernetes, в т.ч. с использованием Helm Chart для упрощения установки. AKHQ отлично разворачивается в Docker, интегрируясь с платформой Kafka и всеми ее компонентами: Kafka брокер, Zookeeper, Kafka JMX, ksqlDB, Kafka Connect, REST Proxy и Schema Registry.
Docker Compose и настройка конфигураций
Таким образом, чтобы развернуть Kafka с веб-GUI в контейнере, необходимо модифицировать Docker-образ от Confluent под названием cp-all-in-one-community, включив в него AKHQ для визуального управления кластером. Поскольку этот Docker-образ будет запускать несколько контейнеров, надо использовать Docker Compose — систему сборки, запуска и управления множеством контейнеров. Она позволяет управлять набором контейнеров, включая сборку, запуск с учетом зависимостей и конфигурирование. Конфигурация Docker Compose описывается в YAML-файле docker-compose.yml, лежащем в корне проекта. В моем первоначальном варианте это файл выглядел так:
После создания Docker-контейнеров с помощью команды
в WSL из директории, где лежит YAML-файл docker-compose.yml, веб-GUI AKHQ успешно запустился на локальном хосте, на порту 8080, как и прописано в конфигурации. Однако, чтобы полноценно работать с Kafka, публикуя и потребляя из нее сообщения с помощью программного кода, этого оказалось недостаточно. Проблема была связана с портами и слушателями этой потоковой платформы передачи событий. Как ее удалось решить, изменив конфигурационный файл docker-compose.yml, я расскажу завтра.
Научитесь администрированию и эксплуатации Apache Kafka на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Копирование, размножение, распространение, перепечатка (целиком или частично), или иное использование материала допускается только с письменного разрешения правообладателя ООО "УЦ Коммерсант"