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