Новости

Что такое Apache Kafka?

СЕО: Что такое Kafka, инструменты для работы с Kafka, полезные комманды, сценарии тестирования, Kafdrop, Offset Explorer

Лид: И как её тестировать?

Если бы Apache Kafka была автомобилем, то это была бы смесь Volvo и КАМАЗа. Им удобно и легко управлять, он быстрый и безопасный, но при этом может тащить на себе огромный груз и работать в сложных условиях. Рассказываем, какие преимущества есть у Kafka (спойлер: их много!) и как с ней работать тестировщикам!
1. Превращение: Что такое Kafka?

Apache Kafka была создана в 2010 году инженерами LinkedIn для решения проблем с обменом больших объёмов информации в режиме реального времени. Kafka написана на языках Java и Scala. Она позволяет обрабатывать миллионы сообщений в секунду.

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

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

Так как сообщения в Kafka могут храниться в течение долгого времени, появляется возможность обрабатывать одно и то же сообщение многократно. Таким образом, Kafka может быть очень полезной при восстановлении после сбоев или тестировании нового кода: можно «отмотать» данные назад и снова прогнать их через систему.

2. Процесс: Как тестировать приложения с Kafka?.

При тестировании приложения-продюсера тестировщику необходимо инициировать в приложении событие отправки данных в топик. Для этого можно совершить вызов сервиса: вы отправляете запрос с определёнными параметрами через протокол, затем переходите в Kafka и смотрите, корректно ли дошло сообщение.

Также же образом можно протестировать интерфейс-кнопку или добавить/изменить существующую запись в базе данных.

При тестировании приложения консьюмера всё наоборот. Вы составляете сообщение и отправляете его в нужный топик Kafka, а затем открываете приложение консьюмер и смотрите, что у вас получилось.

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

2.1 Консольный клиент

В первую очередь, для тестирования Kafka можно использовать стандартный консольный клиент, который позволяет напрямую взаимодействовать с системой через командную строку. Консольный клиент расположен в директории bin внутри распакованного каталога Apache Kafka. Выбор скрипта зависит от вашей ОС: если у вас Windows — это необходим тот, который заканчивается на bat, а если Linux или MacOS — заканчивающийся на sh.

Создаём топик

Здесь мы используем скрипт ./bin/kafka-topics.sh, которому передаём: операцию --create, название топика --topicname, адрес сервера Kafka, с которого начинается подключение клиента --bootstrap-server localhost:9092

Таким образом, вся команда выглядит так:
kafka-topics.sh --create --topicname --bootstrap-server localhost:9092
Отправляем сообщение в топик

Для этого мы используем утилиту ./kafka-console-producer.sh и передаём ей адрес сервера и название топика. У нас он называется topicname. Вот что получается по итогу:
kafka-console-producer.sh --bootstrap-server localhost:9092 --topicname
После запуска команды вы сможете вводить сообщения непосредственно в консоли. Введите ваше сообщение и нажмите Enter для его отправки:
>ThisisSaveLink
Подключаемся к прослушиванию топика

Эта команда позволяет тестировщикам читать сообщения из топика. Ключевая часть — использование оффсета для отслеживания, откуда начать чтение. Для того, чтобы получить все сообщения, начиная с первого оффсета, можно использовать утилиту kafka-console-consumer и ввести команду --from-beginning
kafka-console-consumer --bootstrap-server localhost:9092 --topicname --from-beginning
Сбрасываем оффсет

Команда «сбросить оффсет» в Kafka позволяет установить оффсет для группы потребителей на заданное значение. Зачем она нужна? Представим, что мы тестируем приложение в тестовом контуре. Сторонняя команда нагенерировала много сообщений в топик, а наше приложение не справляется с нагрузкой или очень медленно их обрабатывает. Чтобы продолжить тестирование прямо сейчас, мы можем скинуть оффсет для нашего приложения и не обрабатывать эту огромную кучу сообщений. Также, команда может служить и для противоположной цели — если мы хотим обработать старые сообщения нашим приложением.

Итак, чтобы сбросить оффсет, нам нужен такая команда:
kafka-consumer-groups --bootstrap-server localhost:9092 --groupname --topicname --reset-offsets --to-earliest --execute
Параметр --to-earliest сбрасывает оффсет на самое раннее доступное сообщение в топике, позволяя начать чтение с самого начала. Также можно использовать параметр --to-latest. Она устанавливает оффсет на самое последнее сообщение в топике, чтобы начать чтение с текущего момента. Параметр --to-offset позволяет задать конкретный номер оффсета, а --shift-by смещает текущий оффсет на указанное количество сообщений вперёд или назад.
kafka-consumer-groups --bootstrap-server localhost:9092 --groupname --topicname --reset-offsets --to-offset 10 --execute
Здесь мы сбросили оффсет до значения 10.
2.2 Kafdrop

Мониторить топики, сообщения и группы можно значительно проще и быстрее с помощью Kafdrop. Это красивый и простой веб-интерфейс, в котором мы можем видеть данные кафки в режиме реального времени.

Kafdrop можно запустить как Docker-контейнер или установить как Java-приложение.

Для подключения необходимо в настройках Kafdrop указать адрес брокера Kafka для подключения.

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

Под список брокеров расположен список топиков. Здесь мы увидем количество партиций у каждого топика, а также количество реплик.
Кликнув на конкретный топик, вы сможете просмотреть его детали, включая партиции и сообщения.
В Kafdrop можете фильтровать сообщения по различным параметрам, таким как ключ или значение. Kafdrop поддерживает несколько форматов сообщений, включая Apache Avro и JSON. Перейдите к конкретному топику и выберите партиции, который хотите просмотреть. После у вас появится список сообщений, а сверху можно отфильтровать их с помощью полей для фильтрации по ключу или значению.
В обзоре топиков также можно посмотреть группы потребителей. Они разбиты по топикам. Там можно увидеть, нет ли серьёзной задержки между последним оффсетом и оффсетом потребителя.

2.3 Offset Explorer

Есть ещё одно приложение для работы с Kafka — Offset Explorer (в прошлом Kafka Tool). На вид выглядит менее удобно, чем Kafdrop, но обладает чуть более широким функционалом. Offset explorer можно установить на десктоп, тогда как Kaftdrop — только на сервер.

В Offset Explorer проще управлять сразу несколькими кластерами и переключаться перед ними. Все они доступны в левой панели. Внутри каждого кластера открывается список брокеров, топиков и потребителей. Внутри каждого топика — партиции.

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

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

3. Приговор

Одна из фраз, приписываемых писателю Кафке, звучит так: «Не тратьте время на поиск препятствий: их может и не существовать». Apache Kafka доказывает, что никаких препятствий при работе с большими данными не существует. Kafka непросто грамотно организовывает передачу сообщений, но ещё и достаточно простая в тестировании. На освоение платформы и дополнительных инструментов уйдёт не так много времени.