Был ли опыт работы с микросервисами для обработки непрерывных потоков данных
Что проверяют
Был ли у вас настоящий опыт потоковой обработки или вы знаете её по статьям. Интервьюер быстро уточнит детали: что будет при падении консьюмера, как вы защищались от дублей и как следили за отставанием.
Как отвечать
Стройте рассказ вокруг одной системы и своей роли в ней: что за поток, откуда и куда, какой объём, что делали лично вы. Цифры берите свои и такие, которые сможете объяснить: сообщений в секунду, число партиций, задержка обработки.
Что стоит затронуть:
- транспорт: Kafka, реже RabbitMQ. Параллелизм консьюмеров в группе ограничен числом партиций, порядок гарантирован только внутри партиции, поэтому важен выбор ключа;
- фреймворк: Spring Boot со Spring for Apache Kafka (
@KafkaListener), Kafka Streams для агрегаций и окон или Apache Flink для сложных вычислений с состоянием; - гарантии доставки: обычно получается at-least-once, значит обработчик должен быть идемпотентным. Exactly-once в Kafka Streams включается
processing.guarantee=exactly_once_v2и действует только в цепочке Kafka на входе и выходе; - ошибки: ретраи с паузой через
DefaultErrorHandler, «ядовитые» сообщения в dead letter topic, чтобы одно битое событие не остановило партицию; - схемы: Avro или Protobuf со Schema Registry, чтобы продюсер не сломал консьюмеров;
- наблюдаемость: consumer lag, время обработки и частота ребалансировок в Prometheus и Grafana.
Если опыта с потоками не было, так и скажите и расскажите о ближайшем: очереди на RabbitMQ, пакетная обработка по расписанию, учебный проект с Kafka в Docker Compose. Добавьте, что решали бы первыми: ключ партиционирования, идемпотентность, мониторинг отставания.
Где спотыкаются
Называют круглые цифры вроде «100 000 транзакций в минуту» и не могут объяснить, на скольких инстансах и партициях это держалось. После этого интервьюер перестаёт верить остальному рассказу.
Говорят «Kafka гарантирует exactly-once» без оговорок. Как только обработчик пишет в базу или зовёт внешний API, дубли снова возможны, и защищает от них только идемпотентность.
Перечисляют стек, но не свою роль. Фраза «мы использовали Kafka и Spring» не говорит, что делали и решали лично вы.