Инструменты для тестирования Kafka
Вступление
Во многих компаниях использование брокеров сообщений является неотъемлемой частью процесса разработки высокопроизводительных систем. И одним из самых популярных на сегодняшний день является Kafka. Kafka — это не только брокер сообщений, но и разделитель логов. Кроме того, с помощью Kafka мы можем моделировать различные сценарии тестирования. Но чтобы применить это на практике, нам нужен UI инструмент для работы с Kafka. Итак, в сегодняшней теме мы рассмотрим самые популярные и наиболее удобные UI инструменты, а так же коснемся их функционала и возможностей для тестеров.
Kafka Tool
Одним из самых популярных инструментов для работы с Kafka является Kafka Tool. Его интерфейс довольно прост, и, как говорится, чем проще, тем лучше. Этот инструмент позволяет всем нашим кластерам, включая всех брокеров, просматривать списки топиков и консьюмеров. А в топиках мы можем читать сообщения.
Эта информация полезна при тестировании различных сервисов, которые читают топики и пишут в топики Kafka, но это далеко не полный функционал Kafka Tool. Здесь мы можем создавать свои топики и разделы, что позволяет нам заменить их в конфигурационном файле на фейковые данные, созданные тестером, чтобы проверить тот или иной тест кейс.
Далее мы можем модифицировать конкретное сообщение и отправить его в нужный нам топик, добившись желаемого результата.
Конечно, отправка сообщения с несколькими заголовками сопряжена с некоторыми неудобствами. Но в целом это не плохой инструмент.
Kafka CLI
Это одно из приложений, поставляемых с Kafka, которое позволяет считывать из него данные. Подобно тому, как сама Kafka является приложением JVM и требует установки Java для запуска. Для Kafka CLI также требуется Java, но в можно обойтись и без неё. Для этого мы должны запустить Kafka в докер контейнере.
Для этого локально создаем файл docker-compose.yml
:
version: "2"
services:
zookeeper:
container_name: zookeeper
image: confluentinc/cp-zookeeper:3.2.1
ports:
- "2181:2181"
hostname: zookeeper
environment:
ZOOKEEPER_CLIENT_PORT: 2181
kafka:
container_name: kafka
image: confluentinc/cp-kafka:3.2.1
ports:
- "9092:9092"
links:
- zookeeper
depends_on:
- zookeeper
hostname: kafka
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
ADVERTISED_HOST_NAME: kafka
schema_registry:
container_name: schema_registry
image: confluentinc/cp-schema-registry:3.2.1
ports:
- "8081:8081"
links:
- zookeeper
- kafka
depends_on:
- zookeeper
- kafka
environment:
SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL: zookeeper:2181
SCHEMA_REGISTRY_HOST_NAME: schema_registry
rest_proxy:
container_name: rest_proxy
image: confluentinc/cp-kafka-rest:3.2.1
ports:
- "8082:8082"
links:
- zookeeper
- kafka
- schema_registry
depends_on:
- zookeeper
- kafka
- schema_registry
environment:
KAFKA_REST_HOST_NAME: rest_proxy
KAFKA_REST_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_REST_SCHEMA_REGISTRY_URL: http://schema_registry:8081
kafka-cli:
container_name: kafka-cli
image: taion809/kafka-cli
working_dir: /opt/kafka/bin
command: "tail -f /var/log/bootstrap.log > /dev/null 2>&1"
links:
- kafka
- zookeeper
Затем в этой же директории запускаем контейнер выполнив в командной строке docker compose up -d
И в запущенном контейнере выполняем команду docker exec -it kafka-cli sh
Следующей командой мы запускаем продьюсера ./kafka-console-producer.sh --broker-list kafka:9092 --topic shaikin
В новом окне терминала повторяем команду docker exec -it kafka-cli sh
И запускаем консьюмера командой ./kafka-console-consumer.sh --bootstrap-server kafka:9092 --topic shaikin --from-beginning
Теперь можно писать сообщение в первом окне терминала, которое во втором окне терминала будет получено консьюмером.
Lenses
Еще один инструмент предоставляющий нам пользовательский интерфейс для мониторинга кластеров Kafka и, в то же время, предлагающий быстрый доступ к данным в сообщениях. Lenses это веб-инструмент для поиска топиков, просмотра их метаданных и загрузки самих сообщений. Мы также можем использовать этот инструмент для настройки оповещений в реальном времени, что упрощает эффективное управление инцидентами.
Lenses можно запускать в докер-контейнере, и этот инструмент относительно легкий, он занимает всего 4 ГБ.
CMAK (former Kafka Manager)
CMAK имеет довольно хороший и относительно простой пользовательский интерфейс. Это позволяет гибко управлять кластерами, темами и пользователями, а также отслеживать производительность брокеров, производителей и потребителей. Кроме того, это поможет нам переназначать существующие разделы, удалять или обновлять их конфигурацию.
Kafdrop
Пользовательский интерфейс с открытым исходным кодом для кластеров Kafka отображает информацию о брокерах, темах и разделах и позволяет просматривать сообщения. Это легкое приложение Spring Boot требует минимальной настройки.
UI for Apache Kafka (Provectus Lab)
И последний в моей статье инструмент для работы с Kafka, это вэб-интерфейс курируемый Provectus Lab — UI for Apache Kafka. Это бесплатный, универсальный, быстрый и легкий веб-интерфейс для управления кластерами Apache Kafka, который позволяет наблюдать за потоками данных, помогает быстрее находить и устранять проблемы и обеспечивает оптимальную производительность. Его легкая панель управления позволяет легко отслеживать ключевые показатели кластеров Kafka — брокеров, тем, разделов, производства и потребления. На моем проекте мне его показал наш самый прогрессивный разработчик Александр Смыслов, за что я ему особенно благодарен. Особенно мне показались удобными создание и отправка сообщений. В частности, возможность вставки заголовком целиком, в виде json.
Заключение
Каждый из вышеперечисленных инструментов имеет место быть в работе тестировщика. Однако наиболее удобным и ценным на мой взгляд является Web UI для Apache Kafka (Provectus Lab), который очень похож на Kafka Tool, но благодаря расширенному функционалу и дополнительным возможностям для создания различных тестовых сценариев, значительно его превосходит.
Традиционно приглашаю вас на бесплатное занятие, где вместе найдем ошибку на сайте и опишем ее, а также попробуем описать найденный баг по наиболее популярному шаблону.