Можно ли менять offset в Kafka и стоит ли это делать?
Что проверяют
Умеете ли вы использовать перемотку offset как инструмент тестирования и понимаете ли, чем она опасна на общем стенде. Следом обычно просят составить тест-кейсы на повторную доставку сообщений.
Как отвечать
Сначала модель. Offset это номер записи в партиции. Каждая consumer group хранит свою позицию отдельно, сообщения при сдвиге не удаляются и не меняются. Поменять позицию можно: в коде через seek(), снаружи через kafka-consumer-groups.sh --reset-offsets (--to-earliest, --to-datetime, --shift-by), причём группа при этом должна быть остановлена. Перемотать можно только в пределах срока хранения топика.
Как это используется в тестировании:
- диагностика:
kafka-consumer-groups.sh --describe --group <группа>показываетCURRENT-OFFSET,LOG-END-OFFSETиLAG. Растущий лаг значит, что сервис не успевает или застрял на сообщении; - чтение без вмешательства: для просмотра берите свою группу или
kafka-console-consumer.shс--partitionи--offset, либо веб-интерфейс вроде Kafka UI или AKHQ; - идемпотентность: перемотать группу сервиса назад и убедиться, что повтор не создал второй заказ и не отправил второе письмо;
- сбои: рестарт сервиса посреди пачки, ребалансировка при добавлении экземпляра, сообщение с битым форматом. Ожидаемое поведение: битое уходит в топик ошибок, остальные обрабатываются;
- автотесты: Kafka в Testcontainers и уникальный
group.idна каждый прогон, чтобы тесты не влияли друг на друга.
Менять offset на проде стоит только по согласованию с разработкой и с пониманием, что сдвиг вперёд значит пропуск, а назад значит дубли.
Где спотыкаются
Читают топик с тем же group.id, что и сервис. Тестировщик забирает часть сообщений себе и сдвигает позицию, а сервис их уже не увидит.
Сбрасывают offset общей группы на стенде, никого не предупредив. У коллег внезапно переигрываются тысячи событий, и их тесты краснеют без видимой причины.
Проверяют только успешный путь и не пишут кейсы на повтор. Доставка «хотя бы один раз» делает дубли штатной ситуацией, и именно на них чаще всего ломается бизнес-логика.