Как защитить и наблюдать за Kafka

Введение

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

В этом руководстве вы усилите безопасность вашей установки Kafka, настроив шифрование трафика TLS и аутентификацию SASL для обеспечения стандартного процесса входа с именем пользователя и паролем. Вы узнаете, как настроить предоставленные скрипты производителя и потребителя для подключения к защищенному кластеру. Затем вы узнаете, как экспортировать метрики Kafka и визуализировать их в Grafana. Вы также узнаете, как доступиться к узлам и темам вашего кластера через удобный веб-интерфейс, предоставляемый AKHQ.

Требования

Для завершения этого руководства вам потребуется:

  • Капля с минимумом 4 ГБ оперативной памяти и 2 процессорами. В случае с сервером Ubuntu следуйте инструкциям Начальная настройка сервера для настройки.
  • Apache Kafka установлен и настроен на вашей капле. Для получения инструкций по настройке следуйте руководству Введение в Kafka. Вам нужно выполнить только Шаг 1 и Шаг 2.
  • Понимание того, как Java обрабатывает ключи и сертификаты. Для получения дополнительной информации посетите руководство Основы Java Keytool: Работа с хранилищами ключей Java.
  • Grafana установлен на вашем сервере или локальном компьютере. Пожалуйста, посетите руководство Как установить и защитить Grafana на Ubuntu для получения инструкций. Вам нужно выполнить только первые четыре шага.
  • Полностью зарегистрированное доменное имя направлено на вашу каплю. В этом руководстве будет использоваться ваш_домен и будет ссылаться на тот же доменное имя, что и требование для Grafana. Вы можете купить доменное имя на Namecheap, получить его бесплатно на Freenom или использовать регистратора доменных имен по вашему выбору.

Шаг 1 – Конфигурация безопасных протоколов Kafka

В стандартной конфигурации Kafka всем разрешено соединяться с ней без проверки происхождения запроса. Это意味着 ваш кластер доступен для всех по умолчанию.尽管这对于测试来说是好的,因为它减少了本地计算机和私人安装的维护负担,但是生产环境和面向公众的 Kafka 安装必须启用安全特性,以防止未授权的访问。

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

Генерация сертификата TLS и хранений

Чтобы создать сертификаты и ключи, необходимые для установки TLS, вы будете использовать скрипт из репозитория Confluent Platform Security Tools. Сначала клонируйте его в ваш домашний каталог, выполнив следующую команду:

git clone https://github.com/confluentinc/confluent-platform-security-tools.git ~/kafka-ssl

Перейдите к нему:

cd ~/kafka-ssl

Скрипт, который вы будете использовать, называется kafka-generate-ssl-automatic.sh, и требует, чтобы вы предоставили свою страну, штат, организацию и город в виде переменных окружения. Эти параметры используются для создания сертификатов, но их содержимое не имеет значения. Вам также потребуется предоставить пароль, который будет использован для защиты созданного Java хранилища доверия и ключей.

Выполните следующие команды для настройки требуемых переменных окружения, заменив ваш_пароль_tls на желаемое значение:

export COUNTRY=US
export STATE=NY
export ORGANIZATION_UNIT=SE
export CITY=New York
export PASSWORD=your_tls_password

Обратите внимание, что PASSWORD должен быть не короче шести символов.

Дайте скрипту права на выполнение, выполнив:

chmod +x kafka-generate-ssl-automatic.sh

Затем выполните его для создания необходимых файлов:

./kafka-generate-ssl-automatic.sh

Появится много вывода. После завершения перечислите файлы в каталоге:

ls -l

Вывод должен быть похожим на это:

Output
rw-rw-r-- 1 kafka kafka 964 May 13 09:33 README.md -rw-rw-r-- 1 kafka kafka 1063 May 13 09:34 cert-file -rw-rw-r-- 1 kafka kafka 1159 May 13 09:34 cert-signed -rwxrw-r-- 1 kafka kafka 6016 May 13 09:33 kafka-generate-ssl-automatic.sh -rwxrwxr-x 1 kafka kafka 7382 May 13 09:33 kafka-generate-ssl.sh drwxrwxr-x 2 kafka kafka 4096 May 13 09:34 keystore -rw-rw-r-- 1 kafka kafka 184929 May 13 09:33 single-trust-store-diagram.pages -rw-rw-r-- 1 kafka kafka 36980 May 13 09:33 single-trust-store-diagram.pdf drwxrwxr-x 2 kafka kafka 4096 May 13 09:34 truststore

Вы увидите, что сертификат, хранилище доверия и хранилище ключей были успешно созданы.

Конфигурация Kafka для TLS и SASL

Теперь, когда у вас есть необходимые файлы для включения шифрования TLS, вы настроите Kafka для их использования и аутентификации пользователей с помощью SASL.

Вы будете изменять файл server.properties в каталоге config/kraft в установленном каталоге. Вы установили его в каталоге kafka в вашем домашнем каталоге как часть предварительных требований. Перейдите к нему, выполнив:

cd ~/kafka

Откройте основной конфигурационный файл для редактирования:

nano config/kraft/server.properties

Найдите следующие строки:

config/kraft/server.properties
...
listeners=PLAINTEXT://:9092,CONTROLLER://:9093

# Имя слушателя, используемое для общения между брокерами.
inter.broker.listener.name=PLAINTEXT

# Имя слушателя, имя хоста и порт, которые брокер будет рекламировать для клиентов.
# Если не установлено, используется значение для "listeners".
advertised.listeners=PLAINTEXT://localhost:9092

Измените их так, что они будут выглядеть так, как показано ниже, заменив PLAINTEXT на BROKER:

config/kraft/server.properties
...
listeners=BROKER://:9092,CONTROLLER://:9093

# Имя слушателя, используемое для общения между брокерами.
inter.broker.listener.name=BROKER

# Имя слушателя, имя хоста и порт, которые брокер будет рекламировать для клиентов.
# Если не установлено, используется значение для "listeners".
advertised.listeners=BROKER://localhost:9092

Потом найдите строку listener.security.protocol.map:

config/kraft/server.properties
# Мapping слушателей на безопасные протоколы, по умолчанию их значения совпадают.更多详情请参阅配置文档
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL

Сопоставите BROKER с SASL_SSL, добавив определение значению:

config/kraft/server.properties
# Мapping слушателей на безопасные протоколы, по умолчанию их значения совпадают.更多详情请参阅配置文档
listener.security.protocol.map=BROKER:SASL_SSL,CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL

Здесь вы добавили определение для псевдонима BROKER, который вы использовали в слушателях, и сопоставили его с SASL_SSL, что указывает на использование как SSL (более раннее название TLS), так и SASL.

Далее перейдите к концу файла и добавьте следующие строки:

config/kraft/server.properties
ssl.truststore.location=/home/kafka/kafka-ssl/truststore/kafka.truststore.jks
ssl.truststore.password=your_tls_password
ssl.keystore.location=/home/kafka/kafka-ssl/keystore/kafka.keystore.jks
ssl.keystore.password=your_tls_password
ssl.key.password=your_tls_password
ssl.client.auth=required

sasl.enabled.mechanisms=PLAIN
sasl.mechanism.controller.protocol=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN

authorizer.class.name=org.apache.kafka.metadata.authorizer.StandardAuthorizer
allow.everyone.if.no.acl.found=false
super.users=User:admin

Сначала вы определяете местоположения и пароли для сгенерированных хранилищ доверия и ключей. Вы устанавливаете параметр ssl.client.auth равным required, указывая Kafka не разрешать соединения, которые не предоставляют действительный сертификат TLS. Затем вы устанавливаете механизм SASL равным PLAIN, что его включает. PLAIN отличается от PLAINTEXT тем, что требует использования шифрованного соединения, и оба опираются на комбинацию учетных данных имени пользователя и пароля.

Наконец, вы устанавливаете класс аутентификатора StandardAuthorizer, который проверяет учетные данные по конфигурационному файлу, который вы создадите в ближайшее время. Затем вы устанавливаете параметр allow.everyone.if.no.acl.found равным false, ограничивая доступ для соединений с неподходящими учетными данными. Вы также указываете пользователя admin как суперпользователя, поскольку должен быть хотя бы один для выполнения административных задач в кластере.

Не забудьте заменить your_tls_password на пароль, который вы передали в скрипт в предыдущем разделе, затем сохраните и закройте файл.

Теперь, когда вы настроили Kafka, вам нужно создать файл, который определяет допустимые учетные данные для подключения. Kafka поддерживает Java Authentication and Authorization Service (JAAS), фреймворк для реализации рабочих процессов аутентификации, и принимает определения учетных данных в формате JAAS.

Вы сохраните их в файле с именем kafka-server-jaas.conf в каталоге config/kraft. Создайте и откройте его для редактирования, выполнив следующую команду:

nano config/kraft/kafka-server-jaas.conf

Добавьте следующие строки:

config/kraft/kafka-server-jaas.conf
KafkaServer {
 org.apache.kafka.common.security.plain.PlainLoginModule required
 username="admin"
 password="admin"
 user_admin="admin";
};

Затем username и password определяют основные учетные данные, используемые для общения между узлами кластера при наличии нескольких узлов. строка user_admin определяет пользователя с именем admin и паролем admin, который может подключиться к брокеру снаружи. Сохраните и закройте файл, когда вы этого сделаете.

Kafka должен знать о файле kafka-server-jaas.conf, поскольку он дополняет основную конфигурацию. вам нужно будет изменить конфигурацию сервиса kafka systemd и передать ссылку на него. Выполните следующую команду, чтобы открыть сервис для редактирования:

sudo systemctl edit --full kafka

При использовании опции --full вы получите доступ к полному содержимому сервиса. найдите строку ExecStart:

kafka.service
...
User=kafka
ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/kraft/server.properties > /home/kafka/kafka/kafka.log 2>&1'
...

Добавьте следующую строку выше нее, чтобы она выглядела так:

kafka.service
...
User=kafka
Environment="KAFKA_OPTS=-Djava.security.auth.login.config=/home/kafka/kafka/config/kraft/kafka-server-jaas.conf"
ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/kraft/server.properties > /home/kafka/kafka/kafka.log 2>&1'
...

С этим вы устанавливаете параметр java.security.auth.login.config в конфиге на путь к файлу JAAS конфигурации, отделяя его от основного конфига Kafka. После завершения сохраните и закройте файл. Загрузите определение службы, запустив:

sudo systemctl daemon-reload

затем перезапустите Kafka:

sudo systemctl restart kafka

Теперь вы настроили одновременно TLS-encryption и SASL-аутентификацию для установки Kafka, и вам потребуется leanb чтобы узнать, как соединиться с помощью предоставленных консольных скриптов.

Step 2 – Connecting To a Secured Cluster

В этом шаге вы leanedb, как соединиться с защищенным кластером Kafka с использованием файлов JAAS конфигурации с помощью предоставленных консольных скриптов.

Предоставленные скрипты для манипуляции топиками и процессами отправки и получения сообщений также используют Java внутренне, и поэтому принимают JAAS-конфигурацию, описывающую места хранения доверия и ключевых магазинов, а также данные SASL.

Вы сохраните эту конфигурацию в файле с именем client-jaas.conf в вашем домашнем каталоге. Создайте и откройте его для редактирования:

nano ~/client-jaas.conf

Добавьте следующие строки:

~/client-jaas.conf
security.protocol=SASL_SSL
ssl.truststore.location=/home/kafka/kafka-ssl/truststore/kafka.truststore.jks
ssl.truststore.password=your_tls_password
ssl.keystore.location=/home/kafka/kafka-ssl/keystore/kafka.keystore.jks
ssl.keystore.password=your_tls_password

sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin";
ssl.endpoint.identification.algorithm=

Так же, как и ранее, вы устанавливаете протокол на SASL_SSL и предоставляете пути и пароль для ключевых и доверенных хранилищ, которые вы создали. Затем вы устанавливаете механизм SASL на PLAIN и предоставляете учетные данные пользователя admin. Явно очищаете параметр ssl.endpoint.identification.algorithm, чтобы предотвратить проблемы с подключением, т.к. исходные скрипты устанавливают имя хоста машины, на которой они запущены, как endpoint сертификата, что может быть неверно.

замените your_tls_password на правильное значение, затем сохраните и закройте файл.

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

bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic new_topic --command-config ~/client-jaas.conf

Команда должна выполняться успешно:

Output
... Created topic new_topic.

Для проверки того, была ли она создана, запустите следующую команду:

bin/kafka-topics.sh --bootstrap-server localhost:9092 --list --command-config ~/client-jaas.conf

Выходные данные покажут, что присутствует тема new_topic:

Output
__consumer_offsets new_topic ...

В этом разделе вы настроили вашу установку Kafka, чтобы использовать TLS-encryption для трафика и SASL для аутентификации с помощью комбинаций имён пользователя и паролей. Теперь вы leanr, как экспортировать различные метрики Kafka через JMX с использованием Prometheus.

Шаг 3 – Мониторинг метрик JMX Kafka с использованием Prometheus

В этом разделе вы будете использовать Prometheus для сбора метрик Kafka и их доступности для запросов в Grafana. Это требует настройки JMX экспортера для Kafka и подключения его к Prometheus.

[Java Management Extensions (JMX) — это фреймворк для приложений Java, который позволяет разработчикам собирать общие и пользовательские метрики о работе приложения во время выполнения в стандартизированном формате. Так как Kafka написан на Java, он поддерживает протокол JMX и открывает свои пользовательские метрики через него, такие как статус тем и брокеров.

Конфигурация Kafka и Prometheus

Перед началом работы вам нужно установить Prometheus. На машинах с Ubuntu вы можете использовать apt. Обновите его репозитории, выполнив:

sudo apt update

Затем установите Prometheus:

sudo apt install prometheus -y

Для других платформ следуйте инструкциям по установке на официальном сайте.

После установки вам потребуется добавить библиотеку JMX экспортера для Prometheus к вашему установленному Kafka. Перейдите на страницу релизов и выберите последний релиз с javaagent в названии. В момент написания статьи самый последний доступный релиз был 0.20.0. Используйте следующий команду, чтобы скачать его в директорию libs/, где установлен Kafka:

curl https://repo.maven.apache.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.20.0/jmx_prometheus_javaagent-0.20.0.jar -o ~/kafka/libs/jmx_prometheus_javaagent.jar

Теперь библиотека JMX экспортера будет использоваться Kafka.

Перед активацией экспортера вам нужно определить, какие метрики он будет отправлять в Prometheus, и вы сохраните эту конфигурацию в файле с именем jmx-exporter.yml в директории config/ установки Kafka. Проект JMX экспортера предоставляет соответствующую default конфигурацию, поэтому вы можете выполнить следующую команду, чтобы сохранить ее как jmx-exporter.yml в config/ вашего Kafka установки:

curl https://raw.githubusercontent.com/prometheus/jmx_exporter/main/example_configs/kafka-2_0_0.yml -o ~/kafka/config/jmx-exporter.yml

Далее, чтобы активировать экспортер, вам нужно будет модифицировать системную службу Kafka systemd. Вам нужно будет изменить переменную среды KAFKA_OPTS, чтобы включить экспортер и его конфигурацию. Вы можете выполнить следующую команду, чтобы редактировать службу:

sudo systemctl edit --full kafka

Измените строку Environment так:

kafka.service
Environment="KAFKA_OPTS=-Djava.security.auth.login.config=/home/kafka/kafka/config/kraft/kafka-server-jaas.conf -javaagent:/home/kafka/kafka/libs/jmx_prometheus_javaagent.jar=7075:/home/kafka/kafka/config/jmx-exporter.yml"

В этом месте вы используете аргумент -javaagent, чтобы инициализировать JMX экспортер с его конфигурацией.

По завершении работы сохраните и закройте файл, а затем запустите Kafka следующим образом:

sudo systemctl restart kafka

После минуты проверите, запущен ли JMX экспортер, проверив, используется ли порт 7075:

sudo ss -tunelp | grep 7075
Output
tcp LISTEN 0 3 *:7075 *:* users:(("java",pid=6311,fd=137)) uid:1000 ino:48151 sk:8 cgroup:/system.slice/kafka.service v6only:0 <->

Эта строка показывает, что порт 7075 используется процессом Java, запущенным службой Kafka, что относится к экспортеру JMX.

Теперь вы настроите Prometheus для мониторинга экспортированных метрик JMX. Основной файл конфигурации находится по пути /etc/prometheus/prometheus.yml, откройте его для редактирования:

sudo nano /etc/prometheus/prometheus.yml

Найдите следующие строки:

/etc/prometheus/prometheus.yml
...
# Конфигурация сбора, содержащая ровно один конечный точку для сбора:
# Здесь это сам Prometheus.
scrape_configs:
  # Имя задания добавляется в виде метки `job=<job_name>` к любым временным рядам, собранным из этой конфигурации.
  - job_name: 'prometheus'

    # Переопределите глобальное значение по умолчанию и собирайте цели из этой задачи каждые 5 секунд.
    scrape_interval: 5s
    scrape_timeout: 5s

    # Значение metrics_path по умолчанию равно '/metrics'
    # Значение scheme по умолчанию равно 'http'.

    static_configs:
      - targets: ['localhost:9090']

  - job_name: node
    # Если установлен prometheus-node-exporter, получите статистику о локальной
    # машине по умолчанию.
    static_configs:
      - targets: ['localhost:9100']

Под scrape_configs, который указывает, какие конечные точки должен контролировать Prometheus, добавьте новый раздел для сбора метрик Kafka:

/etc/prometheus/prometheus.yml
# Configuración de scraping que contiene exactamente un punto final para scrapear:
# Aquí es Prometheus en sí mismo.
scrape_configs:
  # El nombre del trabajo se agrega como una etiqueta `job=` a cualquier serie de tiempo scrapeada desde esta configuración.
  - job_name: 'prometheus'

    # Anula la configuración global predeterminada y extrae objetivos de este trabajo cada 5 segundos.
    scrape_interval: 5s
    scrape_timeout: 5s

    # metrics_path predeterminado a '/metrics'
    # El esquema predeterminado es 'http'.

    static_configs:
      - targets: ['localhost:9090']

  - job_name: node
    # Si está instalado prometheus-node-exporter, obtenga estadísticas sobre la máquina local predeterminadamente.
    # La máquina.
    static_configs:
      - targets: ['localhost:9100']

  - job_name: 'kafka'
    static_configs:
    - targets: ['your_domain:7075']

El trabajo kafka tiene un solo objetivo, que apunta al punto final del exporter JMX.

Recuerde reemplazar your_domain con su nombre de dominio, a continuación, guardar y cerrar el archivo. Luego, reinicie Prometheus ejecutando:

sudo systemctl restart prometheus

En su navegador, navegue a la puerto 9090 de su dominio. Accederá a la interfaz de usuario de Prometheus. En Status, haga clic en Targets para listar los trabajos:

Observe que Prometheus ha aceptado el trabajo kafka y ha comenzado a extraer sus métricas. Ahora aprenderá cómo acceder a ellas en Grafana.

Запрос метрик в Grafana

В рамках предварительных требований вы установили Grafana на вашем Droplet и сделали её доступной по адресу ваш_домен. Перейдите к ней в вашем браузере и в боковой панели под Соединения нажмите на Добавить новое соединение, затем введите Prometheus в поле поиска.

Нажмите на Prometheus, затем на кнопку Добавить новый источник данных в правом верхнем углу. Вам будет предложено заполнить адрес экземпляра Prometheus:

Введите http://ваш_имя_домена:9090, заменив на ваше действительное имя домена, затем прокрутите вниз и нажмите Сохранить и проверить. Вы должны получить сообщение об успешной операции:

Соединение с Prometheus добавлено в Grafana. Нажмите на Обзор в боковой панели, и вам будет предложено выбрать метрику. Вы можете ввести kafka_, чтобы вывести все метрики, связанные с кластером, как показано:

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

В этом шаге вы установили экспорт метрик JMX, которые Kafka обеспечивает, и настроили Prometheus, чтобы он их считывал. Затем вы подключились к нему из Grafana и выполнили запрос на метрики Kafka. Теперь вы leaned о том, как управлять кластером Kafka с помощью веб-интерфейса.

Шаг 4 – Управление кластерами Kafka с помощью AKHQ

В этом шаге вы leaned о том, как настроить и использовать AKHQ, веб-приложение для управления кластерами Kafka. Оно позволяет вам списывать и манипулировать топиками, разделами, группами потребителей и параметрами конфигурации, а также отправлять и принимать сообщения из топиков из одного места.

Вы сохраните экспорт и его конфигурацию в каталоге с именем akhq. Создайте его в вашем домашнем каталоге, выполнив следующую команду:

mkdir ~/akhq

Перейдите к нему:

cd ~/akhq

В вашем браузере посетите страницу официальных выпусков и скопируйте ссылку на JAR-файл последнего выпуска. В момент написания этого текста, последняя версия была 0.24.0. Запустите следующую команду, чтобы скачать ее в ваш домашний каталог:

curl -L https://github.com/tchiotludo/akhq/releases/download/0.24.0/akhq-0.24.0-all.jar -o ~/akhq/akhq.jar

Теперь вы скачали AKHQ и готовы определить его конфигурацию для подключения к вашему кластеру. Вы сохраните ее в файле с именем akhq-config.yml. Создайте и откройте его для редактирования, выполнив следующую команду:

nano ~/akhq/akhq-config.yml

Добавьте следующие строки:

~/akhq/akhq-config.yml
akhq:
  connections:
    localhost-sasl:
      properties:
        bootstrap.servers: "localhost:9092"
        security.protocol: SASL_SSL
        sasl.mechanism: PLAIN
        sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin";
        ssl.truststore.location: /home/kafka/kafka-ssl/truststore/kafka.truststore.jks
        ssl.truststore.password: secret
        ssl.keystore.location: /home/kafka/kafka-ssl/keystore/kafka.keystore.jks
        ssl.keystore.password: secret
        ssl.key.password: secret
        ssl.endpoint.identification.algorithm: ""

Это базовая конфигурация AKHQ, указавшая один кластер на localhost:9092 с сопутствующими SASL и TLS параметрами. Simultaneous support for multiple clusters is also possible because you can define as many connections as you want. Это делает AKHQ гибкой для управления Kafka. When you’re done, save and close the file.

Next, you’ll need to define a systemd service for running AKHQ in the background. systemd services can be started, stopped, and restarted consistently.

You’ll store the service configuration in a file named code-server.service, in the /lib/systemd/system directory, where systemd stores its services. Create it using your text editor:

sudo nano /etc/systemd/system/akhq.service

Add the following lines:

/etc/systemd/system/akhq.service
[Unit]
Description=akhq

[Service]
Type=simple
User=kafka
ExecStart=/bin/sh -c 'java -Dmicronaut.config.files=/home/kafka/akhq/akhq-config.yml -jar /home/kafka/akhq/akhq.jar'
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

You first specify the service’s description. Then, in the [Service] section, you define the type of the service (simple means that the command should simply execute) and provide the command that will be run. You also specify that the user it runs as is kafka and that the service should be automatically restarted if it exits.

The [Install] section orders systemd to start this service when you can log in to your server. Save and close the file when you’re done.

Load the service configuration by running:

sudo systemctl daemon-reload

Start the AKHQ service by running the following command:

sudo systemctl start akhq

Then, check that it’s started correctly by observing its status:

sudo systemctl status akhq

The output should look like this:

Output
● akhq.service - akhq Loaded: loaded (/etc/systemd/system/akhq.service; disabled; vendor preset: enabled) Active: active (running) since Wed 2024-05-15 07:37:10 UTC; 3s ago Main PID: 3241 (sh) Tasks: 21 (limit: 4647) Memory: 123.3M CPU: 4.474s CGroup: /system.slice/akhq.service ├─3241 /bin/sh -c "java -Dmicronaut.config.files=/home/kafka/akhq/akhq-config.yml -jar /home/kafka/akhq/akhq.jar" └─3242 java -Dmicronaut.config.files=/home/kafka/akhq/akhq-config.yml -jar /home/kafka/akhq/akhq.jar

AKHQ сейчас работает в фоновом режиме. По умолчанию он доступен на порту 8080. В вашем браузере перейдите к вашему домену с этим портом, чтобы получить доступ. Вы увидите вид по умолчанию, показывающий список тем:

Вы можете дважды щелкнуть по строке рядом с темой в таблице, чтобы получить к ней доступ и увидеть детальный вид:

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

Поскольку тема new_topic пуста, нажмите кнопку Отправить в тему, которая откроет интерфейс для выбора параметров нового сообщения:

AKHQ автоматически заполнит для вас имя темы. В поле Значение введите Hello World!, затем нажмите Отправить. Сообщение будет отправлено в Kafka, и вы увидите его на вкладке Данные:

Поскольку содержимое сообщения может быть очень большим, AKHQ показывает только первую строку. Чтобы просмотреть полное сообщение, нажмите на затемненную область после строки, чтобы открыть её.

В левой боковой панели вы также можете просмотреть список брокеров в кластере, нажав на Узлы. Сейчас кластер состоит из только одного узла:

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

После внесения изменений вы можете применить их, нажав кнопку Обновить конфиги в правом нижнем углу. Так же вы можете просмотреть и изменить конфигурацию любой из тем, доступившись к ним и переключившись на вкладку Конфиги

В этом разделе вы настроили AKHQ, веб-приложение, предоставляющее удобный интерфейс для управления и мониторинга узлов и тем Kafka удаленно. Оно позволяет производить и потреблять сообщения в темах, а также обновлять параметры конфигурации как тем, так и узлов на лету.

Заключение

В этом руководстве вы защитили вашу установку Kafka, настроив TLS для шифрования и SASL для аутентификации пользователей. Вы также настроили экспорт метрик с использованием Prometheus и визуализировали их в Grafana. Затем вы научились использовать AKHQ, веб-приложение для управления кластерами Kafka.


Автор выбрал Apache Software Foundation для получения пожертвования в рамках программы Write for DOnations.

Source:
https://www.digitalocean.com/community/developer-center/how-to-secure-and-monitor-kafka