Привет, Хабр! Меня зовут Марина, я QA-инженер в Купере. Я работаю в команде, где около 80% всех взаимодействий между микросервисами осуществляется асинхронно через Kafka. Это создает дополнительные сложности в функциональном тестировании, поскольку наш сервис интегрирован с множеством других. Проверка правильности передачи сообщений требует анализа не только прохождения happy cases, но и edge и corner cases, что добавляет сложности в тестирование. Уверена, многие QA-инженеры, да и разработчики знакомы с подобными вызовами.

На одном из проектов, где я работаю, у меня возникла проблема: используемые инструменты для тестирования Kafka были недостаточно удобными:

  • Консольная утилита Protokaf не имеет UI-интерфейса и полученные данные для лучшей читаемости нужно отформатировать в json структуру (а это еще одно доп. приложение).

  • UI-приложение Kowl удобно только для мониторинга состояния топиков, и только недавно в нём стала доступна возможность чтения сообщений без сложного флоу для расшифровки, но всё так же нет возможность producer. 

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

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

Знакомство с Plumber

Plumber — это графическое приложение, разработанное для взаимодействия с Apache Kafka. Оно предоставляет удобный и минималистичный интерфейс для работы и включает следующие возможности:

  • Подключение к Kafka-брокеру.

  • Consumer и producer в топики.

  • Поддержка различных форматов данных (JSON, protobuf, Avro и других).

  • Сообщение отображается в формате JSON, что облегчает читаемость и дальнейшую работу.

Установка и настройка Plumber

Начнем с того что установка и настройка не столь сложны.

Установка Plumber

  1. Перейдите на страницу релизов проекта.

  2. Скачайте последнюю версию Plumber для вашей операционной системы (доступны версии для Windows, macOS и Linux).

  3. Распакуйте архив и запустите приложение. Бинарные сборки не подписаны, поэтому Windows и OS будут ругаться. Обходим блокировку системы безопасности macOS вручную:

    - или через контекстное меню(Control+клик), с последующим выбором "Открыть"
    - или удаляем атрибуты безопасности с помощью команды xattr:

    $ xattr -cr plumber.app

После запуска Plumber приступаем к настройке подключения к Kafka.

Настройка Kafka

  1. Создайте кластер выбрав New Kafka Cluster

  2. Чтобы настроить подключение к вашему Kafka-брокеру, необходимо указать следующие параметры:

2.1. Название кластера: введите понятное имя кластера, чтобы быстро определить, к какому вы хотите подключиться, если у вас будет одновременно несколько настроенных. Запускать одновременно два не получится, но удобно переключаться.

2.2. Адрес Kafka-брокера (bootstrap.servers) — укажите DNS-имя сервера или IP-адрес. Kafka использует адрес брокера для установления связи и передачи сообщений.

2.3. Параметры аутентификации и безопасности:

  • sasl.mechanisms — механизм аутентификации, который определяет способ авторизации клиента. В большинстве случаев используется механизм PLAIN или SCRAM-SHA-256/512. Выбор механизма зависит от настроек вашего кластера Kafka.

  • sasl.username и sasl.password — учётные данные для аутентификации в кластере Kafka. Эти параметры используются вместе с механизмом SASL должны соответствовать учетным данным настроенным на стороне брокера Kafka.

  • security.protocol — протокол безопасности, который указывает, каким образом данные будут передаваться между клиентом и брокером. Наиболее распространённые значения — SASL_SSL или SASL_PLAINTEXT. Использование SASL_SSL предполагает защищенное соединение, в то время как SASL_PLAINTEXT подходит для тестовых сред без шифрования.

3. Для проверки, всё ли верно настроено, жмем Test Kafka Connectivity. Получаем одобрительный ОК. Далее «Сохранить» и переходим в только что созданный кластер.

4. Автоматически отобразится количество всех топиков, к которым есть доступ через указанный Kafka-брокер, в разделе Overview. 

Начнем с прослушки сообщений.

Настройка Consumer (чтения сообщений)

1. Перейдите в раздел Topics.

2. Конечно, быстрее всего найти нужный топик можно через поиск. 

3. Выберите топик, который необходимо прослушивать, нажатием на лупу.
4. Настройте параметры потребления сообщений, например, тип ключа(если есть), формат десериализации (protobuf, JSON и другие). 

Для прослушивания топиков в Apache Kafka, когда сообщения сериализованы в формате protobuf, требуется наличие .proto файла. Этот файл описывает структуру данных, позволяя приложению корректно десериализовать сообщения и отобразить их в удобочитаемом формате. Поэтому предварительно скачала из репозитория проекта и указываю путь к .proto файлу.

5. Нажмите Start. Если лимит не задан, то в режиме реального времени будут поступать новые сообщения. 

Одной из полезных функций Plumber является возможность настройки фильтров для поиска нужных сообщений в потоке. Но хочу отметить, что я столкнулась с проблемой: иногда фильтрация не срабатывала корректно, и ранее отправленные сообщения не отображались. Тем не менее, с новыми сообщениями после настройки фильтров проблем не возникало — они отображались стабильно.

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

6. Для чтения сообщения открываем  двойным кликом или по кнопке details. Можно использовать их в дальнейших тестах продюсера или для фиксирования в артефактах.

В consumer есть очистка истории Clear, если поток сообщений становится слишком большим, или когда хотите удалить предыдущие данные для удобства анализа. Это очень удобно когда надо проверить с чистым потоком для тестирования нового сценария.

Настройка Producer (отправка сообщений)

Мы дошли до самой полезной функции Plumber — producer. Инструмент позволяет имитировать отправку сообщений от смежного сервиса, что открывает массу возможностей для тестирования. Например, я модифицирую данные: заменяю значение в полях, таких как id, даты, статусы и др, чтобы проверить устойчивость обработки. Или изменяю структуру сообщения: переставляя порядок полей или удаляя/добавляя новые для симуляции изменений протоколов взаимодействия. Помогает и ускоряет работу при тестировании corner case: передача некорректных данных или пустых значений. При тестирование редких или сложных кейсов, которые сложно воспроизвести естественным образом, например, когда сообщение генерируется только в редких  условиях или долго ждать отправки. В таких случаях использование producer значительно ускорит процесс тестирования без ожидания реального возникновения таких ситуаций. 

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

Приступим.

1. Нажмите на кнопку Producer.

2. В открывшемся окне выберите топик из списка. Поиска, к сожалению, нет, надо искать глазами и тут может быть больно, если топиков много.
3. Выберите формат данных, который будет отправлен. Я все также вибираю protobuf и загружаю прото-файл.

4. Копируем сообщение из консьюмера, немного изменим данные. Для примера я установлю для поля automaticRouting значение false, а в поле deleted_at укажу дату. Нажимаем Produce to topic для отправки сообщения. В правой колонке можно увидеть, в какое время было отправлено сообщение.

5. Можно проверить в базе, что изменилось/записалось при получение такого сообщения.

Преимущества использования Plumber

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

  1. Минималистичный и интуитивный графический интерфейс: Plumber делает работу с Kafka проще и быстрее. Благодаря простому  и функциональному интерфейсу, взаимодействие с сообщениями становится наглядным и не требует дополнительных усилий(приложений).

  2. Гибкость в работе с форматами данных: Plumber поддерживает различные форматы, такие как protobuf, JSON, что позволяет адаптироваться под конкретные требования проекта.

  3. Простота настройки: Настройки выполняются легко и быстро, что особенно важно в условиях динамичного рабочего процесса.

  4. Открытый исходный код и бесплатное использование.

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

Однако, как я уже упоминала, у приложения есть и небольшие недостатки. Еще одной проблемой, с которой я столкнулась, было неожиданное завершение работы программы. К счастью, настройки кластера сохраняются, так что их не нужно вводить повторно. Но это становится неприятным, если вы подготовили сообщение для producer прямо в Plumber, а не в текстовом редакторе. После первого такого случая я стала готовить тело сообщения в блокноте, а затем переносить его в Plumber. Это даёт возможность вернуться к подготовленным данным в случае сбоя.

Заключение

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

Если вы работаете с Kafka и ищете удобный UI-инструмент для тестирования, Plumber — это именно, то решение, которое может существенно облегчить вашу работу. Надеюсь, мой опыт будет полезен для тех, кто сталкивается с подобными задачами.

Tech-команда Купера (ex СберМаркет) ведет соцсети с новостями и анонсами. Если хочешь узнать, что под капотом высоконагруженного e-commerce, следи за нами в Telegram и на YouTube. А также слушай подкаст «Для tech и этих» от наших it-менеджеров.

Комментарии (4)


  1. Dimonioi4
    01.10.2024 12:47
    +1

    А не рассматривали ли для себя другие клиенты - например Kafka UI или Conduktor.io? Возможно сравнивали их с Plumber?


    1. Mari_ja Автор
      01.10.2024 12:47

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


    1. RPG18
      01.10.2024 12:47
      +1

      Я написал Plumber как раз из-за того, что очередной раз в Conduktor Desktop урезали функционал бесплатной версии. На тот момент мне нужна была грепалка продовой кафки, а oт Offset Explorerа начинал шуметь ноут.

      А когда прикручивал json2protobuf, то Conduktor не умел работать с protobuf без schemaregistry, потом они завезли это.


  1. titan_pc
    01.10.2024 12:47

    Kafdrop есть же.

    Ну и самим с что жпт и помощью матрицы за день другой можно сделать клиент под кафку.