Kafka: что нужно знать тестировщику

Знакомство

Анна Литвинова
Senior Software Testing Engineer

Диплом бакалавра по специальности «Программная инженерия», ИКТИБ ИТА ЮФУ г. Таганрог
Диплом о профессиональной переподготовке по специальности «Финансы и кредит», МРЦПКиПК ЮФУ г. Таганрог

Около 4х лет опыта в тестировании на проектах банковской сферы, страхования в роли Интеграционно-функционального тестировщика, Key Tester, QA lead

В студенчестве играла на ударной установке и выступала с рок-каверами

Kafka – что это такое?

Apache Kafka — распределённый программный брокер сообщений с открытым исходным кодом, разрабатываемый в рамках фонда Apache на языках Java и Scala.

Kafka – что это такое?

Уровни доступа

  1. Producer – запись
    Consumer – чтение
  2. Права регулируются сертификатами/username+password
  3. Один сервис может и читать (consumer), и писать (producer)

Топики и партиции

Каждый топик состоит из одной или более партиций:

Разработчик при настройке Producer может указать, что данные нужно писать в определенный топик, при этом партиции он не указывает. В таком случае Kafka сама распределит по партициям весь набор передаваемых сообщений:

Приоритет

Либо наоборот разработчик может настроить на определённую партицию:

Формат данных (напоминает API)

Заголовки:

  • id – uuid
  • Tm – timestamp
  • ...

Тело:

  • JSON
  • XML
  • Text
  • ...

Очередь

Партиция Оффсет Ключ Данные Дата, время
0 6 352cece4-f73a-4156-9899-af53b421930c {“text”:”Вы авторизованы”} 19:00 27.04.2024
1 5 0f9e9714-431f-458b-82f2-e5078bbb54a9 {“text”:”Вы авторизованы”} 18:00 27.04.2024
2 4 44f3d981-dba2-4bf1-b538-b3af4d006ad5 {“text”:”Вы авторизованы”} 17:00 27.04.2024
3 3 340cc7e8-5302-4df6-a7bc-b199c0d5aa72 {“text”:”Вы авторизованы”} 16:00 27.04.2024
2 2 9e4f1fb2-129f-402e-bb20-1b60c3e94e84 {“text”:”Вы авторизованы”} 15:00 27.04.2024
1 1 c3bf04c0-4340-4d4c-84ed-ec28ea9b7186 {“text”:”Вы авторизованы”} 14:00 27.04.2024
3 0 8e719c25-0cc1-46eb-9823-344fe69af142 {“text”:”Вы авторизованы”} 13:00 27.04.2024

Сброс оффсета

Вернуться в начало:
./bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group [myConsumerGroup] --reset-offsets --to-earliest --topic [my_topic] –execute
Пропустить всё и перейти в конец:
./bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group [myConsumerGroup] --reset-offsets --to-latest --topic [my_topic] –execute
С указанием времени:
./bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group [myConsumerGroup] --reset-offsets --to-datetime 2024-05-20T00:00:00.000 --topic [my_topic] --execute

Kafka Lag - Grafana

kafka lag = последний оффсет в топике - последний вычитанный консьюмером оффсет

Время хранения

Как тестировать кафку

Как тестировать кафку, если ваш микросервис – producer

Необходим доступ на чтение

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

Как тестировать кафку, если ваш микросервис – consumer

Необходим доступ на чтение и запись

Вам требуется эмулировать продюсер – подключиться под его правами к топику и руками отправить сообщение. Затем убедиться, что ваш сервис корректно вычитал сообщение – есть записи в логах, а также, возможно, были изменения в БД.

Как тестировать кафку, если ваш микросервис – producer и consumer

Необходим доступ на чтение и запись

Здесь для Topic1 ваш микросервис – consumer, поэтому вы кидаете руками сообщение, сервис вычитывает и как producer отправляет его в Topic2.

Как тестировать кафку (ошибки)

Проблема:
Раньше были топики в кластере, а теперь – нет. Параметры подключения не менялись.
Возможные причины:
  • Кафка сбросила последние параметры подключения
  • Не тот сертификат
  • Что-то случилось с сертификатом (протух/...)
  • Доступ возможен под VPN, а вы его не включили

На что еще обратить внимание

Вы можете настроить сразу все топики на тип string, а также на вариант отображения – JSON. Также обратите внимание, в каком порядке вы подгружаете сообщения – Oldest или Newest.

Где еще используется кафка

Чем лучше апи?

  • Асинхронность и отказоустойчивость
  • Контроль за потерей сообщений
  • Система массового обслуживания
  • Модель «запрос — ответ»
  • Поддержка безопасности и контроля трафика

Аналоги Kafka

Kafka — pull, получатели сами достают сообщения из топика RabbitMQ — push, когда сообщения отправляются получателям

Видео лекции