Инструменты для тестирования Kafka

4d57703673f9894df4422d1463481b6e.png

Вступление

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

Kafka Tool

Одним из самых популярных инструментов для работы с Kafka является Kafka Tool. Его интерфейс довольно прост, и, как говорится, чем проще, тем лучше. Этот инструмент позволяет всем нашим кластерам, включая всех брокеров, просматривать списки топиков и консьюмеров. А в топиках мы можем читать сообщения.

1e83f9ad3138902677805e046e82d7dc.jpeg

Эта информация полезна при тестировании различных сервисов, которые читают топики и пишут в топики Kafka, но это далеко не полный функционал Kafka Tool. Здесь мы можем создавать свои топики и разделы, что позволяет нам заменить их в конфигурационном файле на фейковые данные, созданные тестером, чтобы проверить тот или иной тест кейс.

f63c6da68cc4f47e1a5ea9700a1b6ee0.png

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

ba2a4489a860f12777911a66887aa190.png

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

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

e115656d4b358bac706b0fc4943854c8.png

В новом окне терминала повторяем команду docker exec -it kafka-cli sh

И запускаем консьюмера командой ./kafka-console-consumer.sh --bootstrap-server kafka:9092 --topic shaikin --from-beginning

72d6fccc5e7b470edc12744ef0c878ef.png

Теперь можно писать сообщение в первом окне терминала, которое во втором окне терминала будет получено консьюмером.

Lenses

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

23884fa29ebe6ead25cea2906c9bfa44.png

Lenses можно запускать в докер-контейнере, и этот инструмент относительно легкий, он занимает всего 4 ГБ.

CMAK (former Kafka Manager)

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

c84e807a2483ca4000469f274451514a.png

Kafdrop

Пользовательский интерфейс с открытым исходным кодом для кластеров Kafka отображает информацию о брокерах, темах и разделах и позволяет просматривать сообщения. Это легкое приложение Spring Boot требует минимальной настройки.

a60e97f5ddb0ed95dbac87660d85729a.png

UI for Apache Kafka (Provectus Lab)

И последний в моей статье инструмент для работы с Kafka, это вэб-интерфейс курируемый Provectus Lab — UI for Apache Kafka. Это бесплатный, универсальный, быстрый и легкий веб-интерфейс для управления кластерами Apache Kafka, который позволяет наблюдать за потоками данных, помогает быстрее находить и устранять проблемы и обеспечивает оптимальную производительность. Его легкая панель управления позволяет легко отслеживать ключевые показатели кластеров Kafka — брокеров, тем, разделов, производства и потребления. На моем проекте мне его показал наш самый прогрессивный разработчик Александр Смыслов, за что я ему особенно благодарен. Особенно мне показались удобными создание и отправка сообщений. В частности, возможность вставки заголовком целиком, в виде json.

96af6a87457f54535eca92d8f96bace6.jpg

Заключение

Каждый из вышеперечисленных инструментов имеет место быть в работе тестировщика. Однако наиболее удобным и ценным на мой взгляд является Web UI для Apache Kafka (Provectus Lab), который очень похож на Kafka Tool, но благодаря расширенному функционалу и дополнительным возможностям для создания различных тестовых сценариев, значительно его превосходит.

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

© Habrahabr.ru