Что делает аннотация @KafkaListener?
- Как читать сообщения Kafka в Spring?
@KafkaListener(topics = "orders", groupId = "billing") объявляет обработчик: цикл poll(), десериализацию, вызов метода и коммит offset берёт на себя контейнер Spring Kafka.
- Коммит — после обработки (по умолчанию после пачки)
- Ошибки — DefaultErrorHandler: повторы, затем DLT
- concurrency — число потребителей
А ещё Обработчик должен быть идемпотентным
Подробно
За аннотацией стоит контейнер слушателя: он ведёт цикл опроса брокера, разбирает сообщение в нужный тип, вызывает ваш метод и фиксирует позицию чтения после успешной обработки. Благодаря этому в коде остаётся только полезная логика. Отправкой занимается отдельный компонент — шаблон для публикации. Важная деталь для понимания поведения при сбоях: если метод бросил исключение, позиция не сдвигается, и сообщение будет получено снова, поэтому обработка должна выдерживать повторы.
Что хотят услышать
- Что делает аннотация и контейнер.
Частые ошибки
- Считать, что аннотация занимается и отправкой сообщений.
- Не учитывать повторную доставку при ошибке обработки.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Отправляет сообщения в указанный топик
- ✓Делает метод обработчиком сообщений топика — потребителя поднимает фреймворк
- ✗Создаёт топик при старте приложения с заданным числом партиций и реплик
- ✗Регистрирует схему сообщения в реестре
Что спросят дальше
- Что произойдёт при исключении внутри обработчика?
- Как число партиций ограничивает параллелизм обработки?
Разбор темы
- Spring Kafka
KafkaTemplate, @KafkaListener, listener containers, offset ack, error handling, retries и DLT.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.