Найти в Дзене

Как запустить Apache Kafka с GUI на офисном ноутбуке и Windows: Docker в WSL

WSL и Docker для локального развертывания Apache Kafka с GUI и всеми компонентами в контейнере: моя реальная история поиска веб-интерфейса и настройки портов (начало). В конце августа 2024 года команда serverless-платформы Upstash, на которой у меня есть рабочий инстанс Apache Kafka, разослала своим пользователям «письма счастья», о том, что через полгода поддержка этого брокера сообщений прекращается. Поиск бесплатного аналога не дал результатов, поэтому пришлось разворачивать собственный экземпляр Kafka. Исходных требований к нему у меня было совсем немного: Требования 1 и 2 можно реализовать с помощью Docker-контейнеров, запускаемых на WSL (Windows Subsystem for Linux) — подсистеме Windows для Linux, позволяющей запускать среду Linux на ОС Windows без отдельной виртуальной машины. С помощью Windows Subsystem for Linux (WSL) можно запускать Linux в оболочке Bash, чтобы работать с CLI-интерфейсом и приложениями Linux. В отличие от полноценной виртуальной машины, WSL потребляет сильно
Оглавление

WSL и Docker для локального развертывания Apache Kafka с GUI и всеми компонентами в контейнере: моя реальная история поиска веб-интерфейса и настройки портов (начало).

Развертывание Kafka на Windows с Docker в WSL

В конце августа 2024 года команда serverless-платформы Upstash, на которой у меня есть рабочий инстанс Apache Kafka, разослала своим пользователям «письма счастья», о том, что через полгода поддержка этого брокера сообщений прекращается. Поиск бесплатного аналога не дал результатов, поэтому пришлось разворачивать собственный экземпляр Kafka. Исходных требований к нему у меня было совсем немного:

  1. возможность запуска по желанию в любое время суток;
  2. невысокое потребление ресурсов обычного офисного ноутбука с ОС Windows;
  3. наличие всех необходимых компонентов для работы платформы, таких как Zookeeper, JMX и пр., а также дополнительных модулей (ksqlDB, Kafka Connect, REST Proxy, Schema Registry);
  4. наличие 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.

Просмотр списка топиков Kafka в веб-интерфейсе AKHQ
Просмотр списка топиков Kafka в веб-интерфейсе AKHQ

Docker Compose и настройка конфигураций

Таким образом, чтобы развернуть Kafka с веб-GUI в контейнере, необходимо модифицировать Docker-образ от Confluent под названием cp-all-in-one-community, включив в него AKHQ для визуального управления кластером. Поскольку этот Docker-образ будет запускать несколько контейнеров, надо использовать Docker Compose — систему сборки, запуска и управления множеством контейнеров. Она позволяет управлять набором контейнеров, включая сборку, запуск с учетом зависимостей и конфигурирование. Конфигурация Docker Compose описывается в YAML-файле docker-compose.yml, лежащем в корне проекта. В моем первоначальном варианте это файл выглядел так:

-3
-4
-5
-6

После создания Docker-контейнеров с помощью команды

-7

в WSL из директории, где лежит YAML-файл docker-compose.yml, веб-GUI AKHQ успешно запустился на локальном хосте, на порту 8080, как и прописано в конфигурации. Однако, чтобы полноценно работать с Kafka, публикуя и потребляя из нее сообщения с помощью программного кода, этого оказалось недостаточно. Проблема была связана с портами и слушателями этой потоковой платформы передачи событий. Как ее удалось решить, изменив конфигурационный файл docker-compose.yml, я расскажу завтра.

Научитесь администрированию и эксплуатации Apache Kafka на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Статья

Курсы: DEVKI KAFKA ADS-KAFKA

Наш сайт

Копирование, размножение, распространение, перепечатка (целиком или частично), или иное использование материала допускается только с письменного разрешения правообладателя ООО "УЦ Коммерсант"