IBM Senior DevOps Engineer & Integration Architect   Привет Хабр!Сегодня у нас будет возможность установить Kafka с одной из самых простых конфигураций. Эта установка не оптимизирована для производственных сред, но идеально подходит для быстрой и локальной разработки.Apache Kafka — это фреймворк, реализующий программную шину, использующую потоковую обработку. Это программная платформа с открытым исходным кодом, разработанная Apache Software Foundation и написанная на Scala и Java. Проект направлен на предоставление унифицированной платформы с высокой пропускной способностью и малой задержкой для обработки потоков данных в реальном времени.Иными же словами распределенная система обмена сообщениями между серверными приложениями в режиме реального времени. Эта установка Kafka использует проект ранней версии под названием Apache Kafka Raft (KRaft). Это проект, в котором устранена зависимость от ZooKeeper.Сперва нам будет полезно иметь реестр на этапах билда, пуша и деплоймента. Нет необходимости передавать частные образы через Интернет. Вместо этого мы сохраняем все в локальном реестре. Существует множество вариантов создания реестра образов контейнеров. Мы предпочитаем чистое решение Kubernetes и поэтому устанавливаем реестр через Docker Registry Helm Chart. Добавим репозиторий для установки диаграммы Helm:helm repo add twuni https://helm.twun.io && helm repo listУстановите чарт для частного реестра контейнеров: Реестр теперь доступен как услуга. Его можно вывести:kubectl get service --namespace kube-system Не забудьте назначить переменную среды общему расположению реестра:У меня былоexport REGISTRY=4f809e0c89d3406b8e4ccc59da3d2223-2887247877-31500-kira01.environments.vmoops.comПройдет несколько секунд, прежде чем развертывание реестра сообщит, что оно доступно:kubectl get deployments registry-docker-registry --namespace kube-system Как только реестр станет доступен, проверим содержимое пустого реестра:curl $REGISTRY/v2/_catalog | jq -cВы увидите этот ответ реестра с ожидаемым пустым массивом: {"repositories":[]} Kafka — это распределенная система, в которой реализованы основные функции системы публикации-подписки. На каждом хосте в кластере Kafka работает сервер, называемый брокером, который хранит сообщения, отправленные в топики, и обслуживает запросы консьюмеров. В настоящее время Kafka использует ZooKeeper для отслеживания состояния брокеров в кластере Kafka и ведения списка топиков и сообщений Kafka. На сегодня мы будем использовать ранний доступ и, возможно, будущую реализацию Kafka, использующую KRaft. Вместо того, чтобы полагаться на ZooKeeper, управление метаданными реализовано в ядре Kafka в виде набора контроллеров кворума. Как и ZooKeeper, они основаны на алгоритме консенсуса Raft, поэтому реализация является надежной и отказоустойчивой, и она обещает улучшить производительность и безопасность Kafka. Конфигурация KRaft также хорошо подходит для быстрой разработки.В настоящее время нет официального образа контейнера, поддерживающего реализацию KRaft. Однако IBM предоставляет два файла — Dockerfile и entrypoint.sh, которые были загружены в домашний каталог нашей ВМ.Dockerfile: entrypoint.sh: Из этих двух файлов можно создать надежный образ Kafka на основе KRaft. Создадим образ KRaft:docker build -t $REGISTRY/kafka-kraft .Создание образа контейнера займет несколько минут. Отправим образ KRaft в реестр образов контейнеров в локальном кластере Kubernetes, который был настроен ранее:docker push $REGISTRY/kafka-kraftIBM также предоставляет манифест StatefulSet для запуска KRaft в Kubernetes kafka.yaml: Один из манифестов — это объявление PersistentVolume для хранения данных Kafka. Для этого создадим локальную директорию:mkdir /mnt/kafkaИмея KRaft в реестре образов контейнеров, мы можем запустить KRaft:envsubst < kafka.yaml | kubectl apply -f - envsubst используется для ввода значения $REGISTRY в YAML. KRaft устанавливается в пространство имен kafka-kraft; переключим контекст на это пространство имен, чтобы последующие команды предполагали этот контекст:kubectl config set-context --current --namespace=kafka-kraftПроверим статус установки:kubectl get services,statefulsets,pods,pv,pvc Когда хотя бы первый брокер Kafka запущен, проверьте его логи:kubectl logs kafka-0Если вы видите ошибки в логах, такие как Error connecting to node (Ошибка подключения к узлу), в настоящее время являются нормальной активностью, поскольку брокеры пытаются соединиться друг с другом при запуске.Через несколько секунд поды будут сообщать о том, что они запущены, а StatefulSet сообщит о готовности 3/3:kubectl get services,statefulsets,pods | grep -z 'Running\|3/3\|kafka-svc\|9092' Обратите внимание, что служба Kafka доступна в кластере по адресу kafka-svc:9092. В завершение хочу пригласить вас на бесплатный урок, где мои коллеги из OTUS расскажут как устроен мониторинг кластера, его компоненты и приложения в кластере. Вы изучите различные подходы мониторинга, подходы к мониторингу как приложения так и компонентов кластера, основные метрики Kubernetes. Также узнаете про кластеризацию/федерацию Prometheus, дополнительные хранилища метрик для prometheus (victoria metrics; thanos, cortex). Зарегистрироваться на бесплатный вебинар  Редактор