Что проверять при тестировании Kafka?
Что проверяют
Понимаете ли вы гарантии брокера и умеете ли проверять сервис, который общается сообщениями, а не запросами. Кандидат, обещающий строго однократную доставку по умолчанию, выдаёт себя первой же фразой.
Как отвечать
Уточните, что тестируется: своя интеграция или сама установка брокера. Обычно первое, тогда проверки такие:
- контракт сообщения и его развитие: новая версия схемы не ломает прежних потребителей, неизвестное поле не роняет разбор;
- идемпотентность потребителя: повторная доставка того же сообщения не создаёт вторую запись. Проверяется отправкой дубля руками;
- порядок: он гарантирован внутри раздела, поэтому проверяют выбор ключа. События одной сущности обязаны попадать в один раздел, иначе при росте числа потребителей обновления применятся вразнобой;
- смещения: фиксация после обработки, а не до. Снятие потребителя в середине работы не должно терять сообщение;
- перебалансировка: добавление и снятие экземпляра, долгая обработка, из-за которой участник выпадает из группы и группа крутится по кругу;
- ядовитое сообщение: разбор падает, раздел не встаёт навсегда, сообщение уходит в отдельную очередь после ограниченного числа попыток;
- отставание и хранение: потребитель, лежавший дольше срока хранения, и поведение при сбросе смещения;
- отказ брокера, подтверждения записи и минимальное число синхронных реплик.
Полезно упомянуть, что проверки удобно ставить на брокере, поднятом в контейнере под тест, а не на общем стенде.
Где спотыкаются
Проверяют только через интерфейс и ни разу не заглядывают в топик. Сообщение может уходить не туда, с пустым ключом и в чужом формате, а сквозной сценарий всё равно зелёный, потому что потребителя писала та же команда.
Второе: ждут глобального порядка и однократной доставки просто так. По умолчанию доставка не менее одного раза, порядок только внутри раздела, а однократность требует транзакций и идемпотентного потребителя, а не веры в брокер.
Третье: пишут асинхронные проверки через фиксированную паузу. Такой тест мигает и прячет настоящую ошибку за случайным падением. Ждать надо появления ожидаемого состояния с таймаутом и отдельно проверять, что лишних сообщений не появилось.