Карта / Kafka + Spring / @KafkaListener

@KafkaListener

@KafkaListener — одна аннотация заменяет весь ручной код Consumer’а (см. тему «Producer и Consumer») — poll(), цикл обработки, парсинг сообщений Spring берёт на себя.

@Component
class OrderEventListener {

    @KafkaListener(topics = "orders", groupId = "email-service")
    void handleOrder(String message) {
        sendConfirmationEmail(message);   // вызывается автоматически на каждое новое сообщение
    }
}

Для отправки сообщений — аналогично упрощённый KafkaTemplate вместо ручного KafkaProducer:

@Service
class OrderService {
    private final KafkaTemplate<String, String> kafkaTemplate;

    void createOrder(Order order) {
        // ... сохранили заказ ...
        kafkaTemplate.send("orders", order.getId(), orderToJson(order));
    }
}
Копнуть глубже

Десериализация в объект, а не строку — Spring сам распарсит JSON в нужный класс:

@KafkaListener(topics = "orders", groupId = "email-service")
void handleOrder(Order order) {   // Spring сам десериализует JSON в Order
    sendConfirmationEmail(order);
}

Требует настройки JsonDeserializer в конфигурации, но дальше код становится типизированным и чище — не нужно вручную парсить JSON в каждом обработчике.

@KafkaListener на нескольких топиках сразу:

@KafkaListener(topics = {"orders", "refunds"}, groupId = "notifications")
void handleEvent(String message) { ... }

Конфигурация подключения обычно выносится в application.yml:

spring:
  kafka:
    bootstrap-servers: localhost:9092
    consumer:
      group-id: email-service
🎤 Закрыл тему, если можешь объяснить:
• что упрощает `@KafkaListener` по сравнению с ручным Consumer API;
• как настроить автоматическую десериализацию JSON в объект (если дошёл до 2-го слоя).