Spring Kafka : streaming et résilience avec Spring Boot
Producers, consumers, topics, partitions, parallélisme, Strategy Pattern, résilience et bonnes pratiques pour construire une architecture événementielle…
Introduction
Spring Kafka intègre Apache Kafka à Spring Boot : KafkaTemplate pour produire, @KafkaListener pour consommer. Kafka n’est plus un simple broker de messages : c’est devenu un pilier des architectures distribuées, des microservices event-driven et des pipelines temps réel. Couplé à Spring Boot, il permet d’implémenter des systèmes robustes, scalables et découplés.
Ce chapitre couvre la maîtrise des producteurs, des consommateurs, du parallélisme, des partitions, du Strategy Pattern pour router les événements et des mécanismes de résilience industrielle.
Lexique essentiel
Producer
Émet des événements dans un topic.
Consumer
Lit et traite les messages depuis un topic.
Partition
Unité de parallélisme d’un topic.
Offset
Position du message dans la partition.
Consumer Group
Groupe de consommateurs partageant un topic de manière parallèle.
Dead Letter Queue (DLQ)
Topic dédié aux messages en erreur.
1. Configuration Kafka avec Spring Boot
Spring Boot simplifie fortement la configuration Kafka grâce aux propriétés dédiées.
spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=order-group
spring.kafka.consumer.auto-offset-reset=earliest
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer
# obligatoire avec JsonDeserializer, sinon "class is not in the trusted packages"
spring.kafka.consumer.properties.spring.json.trusted.packages=com.example.events
Producer professionnel
@Service
@RequiredArgsConstructor
public class OrderProducer {
private final KafkaTemplate<String, OrderCreatedEvent> template;
public void send(OrderCreatedEvent event) {
template.send("order.created", event.orderId().toString(), event);
}
}
La suite de cette leçon est réservée aux abonnés
Les 3 premières leçons de chaque formation sont gratuites. Débloquez la suite pour continuer.
Déjà abonné ? Se connecter
