Привет, Хабр! Меня зовут Марина, я QA-инженер в Купере. Я работаю в команде, где около 80% всех взаимодействий между микросервисами осуществляется асинхронно через Kafka. Это создает дополнительные сложности в функциональном тестировании, поскольку наш сервис интегрирован с множеством других. Проверка правильности передачи сообщений требует анализа не только прохождения happy cases, но и edge и corner cases, что добавляет сложности в тестирование. Уверена, многие QA-инженеры, да и разработчики знакомы с подобными вызовами.
На одном из проектов, где я работаю, у меня возникла проблема: используемые инструменты для тестирования Kafka были недостаточно удобными:
Консольная утилита Protokaf не имеет UI-интерфейса и полученные данные для лучшей читаемости нужно отформатировать в json структуру (а это еще одно доп. приложение).
UI-приложение Kowl удобно только для мониторинга состояния топиков, и только недавно в нём стала доступна возможность чтения сообщений без сложного флоу для расшифровки, но всё так же нет возможность producer.
В поисках более удобного решения коллега посоветовал Plumber — графическое приложение, с возможностью консьюмера и продюсера сообщения.
В этой статье я не буду объяснять, что такое Kafka и как работают брокеры — на эти темы уже есть множество отличных материалов, например, вот. Хочу поделиться своим опытом использования этого инструмента. Я не ставлю цель сравнивать его с другими существующими решениями, а просто расскажу, как Plumber помог мне упростить процесс ручного тестирования Kafka на стейджах.
![](https://habrastorage.org/getpro/habr/upload_files/2ef/6a3/b3a/2ef6a3b3a527973da4fb966615880665.png)
Знакомство с Plumber
Plumber — это графическое приложение, разработанное для взаимодействия с Apache Kafka. Оно предоставляет удобный и минималистичный интерфейс для работы и включает следующие возможности:
Подключение к Kafka-брокеру.
Consumer и producer в топики.
Поддержка различных форматов данных (JSON, protobuf, Avro и других).
Сообщение отображается в формате JSON, что облегчает читаемость и дальнейшую работу.
Установка и настройка Plumber
![](https://habrastorage.org/getpro/habr/upload_files/dda/807/bc9/dda807bc9a5df4d2679198e4ac9c66dc.png)
Начнем с того что установка и настройка не столь сложны.
Установка Plumber
Перейдите на страницу релизов проекта.
Скачайте последнюю версию Plumber для вашей операционной системы (доступны версии для Windows, macOS и Linux).
Распакуйте архив и запустите приложение. Бинарные сборки не подписаны, поэтому Windows и OS будут ругаться. Обходим блокировку системы безопасности macOS вручную:
- или через контекстное меню(Control+клик), с последующим выбором "Открыть"
- или удаляем атрибуты безопасности с помощью команды xattr:$ xattr -cr plumber.app
После запуска Plumber приступаем к настройке подключения к Kafka.
![](https://habrastorage.org/getpro/habr/upload_files/184/d94/866/184d9486632786b5932128d7556c49d4.png)
Настройка Kafka
Создайте кластер выбрав New Kafka Cluster
Чтобы настроить подключение к вашему Kafka-брокеру, необходимо указать следующие параметры:
![](https://habrastorage.org/getpro/habr/upload_files/7e1/41c/06a/7e141c06a1cbd7b77dfd9374c0eaadbd.png)
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.
![](https://habrastorage.org/getpro/habr/upload_files/6e2/7d2/80d/6e27d280d921a79c49015312315bac1e.png)
Начнем с прослушки сообщений.
Настройка Consumer (чтения сообщений)
1. Перейдите в раздел Topics.
![](https://habrastorage.org/getpro/habr/upload_files/e69/355/f8e/e69355f8ea098869473e4ae3fe347720.png)
2. Конечно, быстрее всего найти нужный топик можно через поиск.
![](https://habrastorage.org/getpro/habr/upload_files/3f6/d0b/a76/3f6d0ba76948042d4a2a42a2f91a61e8.png)
3. Выберите топик, который необходимо прослушивать, нажатием на лупу.
4. Настройте параметры потребления сообщений, например, тип ключа(если есть), формат десериализации (protobuf, JSON и другие).
Для прослушивания топиков в Apache Kafka, когда сообщения сериализованы в формате protobuf, требуется наличие .proto файла. Этот файл описывает структуру данных, позволяя приложению корректно десериализовать сообщения и отобразить их в удобочитаемом формате. Поэтому предварительно скачала из репозитория проекта и указываю путь к .proto файлу.
5. Нажмите Start. Если лимит не задан, то в режиме реального времени будут поступать новые сообщения.
![](https://habrastorage.org/getpro/habr/upload_files/7e5/673/830/7e5673830af67d6308b5eb4e3be6d013.png)
Одной из полезных функций Plumber является возможность настройки фильтров для поиска нужных сообщений в потоке. Но хочу отметить, что я столкнулась с проблемой: иногда фильтрация не срабатывала корректно, и ранее отправленные сообщения не отображались. Тем не менее, с новыми сообщениями после настройки фильтров проблем не возникало — они отображались стабильно.
Не могу не отметить что еще одной полезной функцией для меня является история сообщений. Приложение позволяет просматривать не только текущие, но и историю сообщений, позволяя анализировать предыдущие события или ошибки, которые могли произойти.
6. Для чтения сообщения открываем двойным кликом или по кнопке details. Можно использовать их в дальнейших тестах продюсера или для фиксирования в артефактах.
![](https://habrastorage.org/getpro/habr/upload_files/c0f/807/e00/c0f807e00343c7332c47e31ea61add04.png)
В consumer есть очистка истории Clear, если поток сообщений становится слишком большим, или когда хотите удалить предыдущие данные для удобства анализа. Это очень удобно когда надо проверить с чистым потоком для тестирования нового сценария.
Настройка Producer (отправка сообщений)
Мы дошли до самой полезной функции Plumber — producer. Инструмент позволяет имитировать отправку сообщений от смежного сервиса, что открывает массу возможностей для тестирования. Например, я модифицирую данные: заменяю значение в полях, таких как id, даты, статусы и др, чтобы проверить устойчивость обработки. Или изменяю структуру сообщения: переставляя порядок полей или удаляя/добавляя новые для симуляции изменений протоколов взаимодействия. Помогает и ускоряет работу при тестировании corner case: передача некорректных данных или пустых значений. При тестирование редких или сложных кейсов, которые сложно воспроизвести естественным образом, например, когда сообщение генерируется только в редких условиях или долго ждать отправки. В таких случаях использование producer значительно ускорит процесс тестирования без ожидания реального возникновения таких ситуаций.
Использование продюсера позволяет эффективно тестировать логику на первичных проверках, например, когда ваш сервис с доработками готов раньше, чем сервис-producer. Это позволяет отловить потенциальные баги до интеграционного тестирования и сэкономит время. Конечно, полная интеграция всё равно нужна, чтобы убедиться, что все сервисы корректно взаимодействуют и всё работает, как задумано.
Приступим.
1. Нажмите на кнопку Producer.
![](https://habrastorage.org/getpro/habr/upload_files/89d/149/0e0/89d1490e03d2b98bb7bafc4a81a104fb.png)
2. В открывшемся окне выберите топик из списка. Поиска, к сожалению, нет, надо искать глазами и тут может быть больно, если топиков много.
3. Выберите формат данных, который будет отправлен. Я все также вибираю protobuf и загружаю прото-файл.
![](https://habrastorage.org/getpro/habr/upload_files/ed6/34b/24b/ed634b24b7f40b8a6e4ba54f6ed8b811.png)
4. Копируем сообщение из консьюмера, немного изменим данные. Для примера я установлю для поля automaticRouting
значение false
, а в поле deleted_at
укажу дату. Нажимаем Produce to topic для отправки сообщения. В правой колонке можно увидеть, в какое время было отправлено сообщение.
![](https://habrastorage.org/getpro/habr/upload_files/936/386/772/9363867726ae53506551399ab4fb37df.png)
5. Можно проверить в базе, что изменилось/записалось при получение такого сообщения.
![](https://habrastorage.org/getpro/habr/upload_files/caf/879/d7e/caf879d7eecc82c911f1187755c31176.png)
Преимущества использования Plumber
Подводя итоги хотела бы еще раз выделить ключевые преимущества, на основе моего опыта:
Минималистичный и интуитивный графический интерфейс: Plumber делает работу с Kafka проще и быстрее. Благодаря простому и функциональному интерфейсу, взаимодействие с сообщениями становится наглядным и не требует дополнительных усилий(приложений).
Гибкость в работе с форматами данных: Plumber поддерживает различные форматы, такие как protobuf, JSON, что позволяет адаптироваться под конкретные требования проекта.
Простота настройки: Настройки выполняются легко и быстро, что особенно важно в условиях динамичного рабочего процесса.
Открытый исходный код и бесплатное использование.
Долгосрочная перспектива. В современных условиях важно иметь инструменты, которые не зависят от политических (или иных) синтуации(й). Но тут скрывается и один минус: на данный момент поддержание приложения приостановлено со стороны разработчика.
Однако, как я уже упоминала, у приложения есть и небольшие недостатки. Еще одной проблемой, с которой я столкнулась, было неожиданное завершение работы программы. К счастью, настройки кластера сохраняются, так что их не нужно вводить повторно. Но это становится неприятным, если вы подготовили сообщение для producer прямо в Plumber, а не в текстовом редакторе. После первого такого случая я стала готовить тело сообщения в блокноте, а затем переносить его в Plumber. Это даёт возможность вернуться к подготовленным данным в случае сбоя.
Заключение
Plumber стал для меня отличным инструментом для ручного тестировании микросервисов, использующих Kafka. Не призываю и не утверждаю, что это супер приложение без изъянов, но он значительно упростил мне процесс тестирования по сравнению с предыдущими инструментами.
Если вы работаете с Kafka и ищете удобный UI-инструмент для тестирования, Plumber — это именно, то решение, которое может существенно облегчить вашу работу. Надеюсь, мой опыт будет полезен для тех, кто сталкивается с подобными задачами.
Tech-команда Купера (ex СберМаркет) ведет соцсети с новостями и анонсами. Если хочешь узнать, что под капотом высоконагруженного e-commerce, следи за нами в Telegram и на YouTube. А также слушай подкаст «Для tech и этих» от наших it-менеджеров.