Configurer et utiliser Apache Kafka avec Spring Boot

Introduction
Apache Kafka est une plate-forme de streaming distribué open source qui gère le streaming de données en temps réel à grande échelle, à haut débit et tolérant aux pannes. Le système est basé sur un modèle de publication-abonnement dans lequel les producteurs publient des messages sur des rubriques et les consommateurs s'abonnent à ces rubriques pour consommer les messages. Le cas d'utilisation d'Apache Kafka est observé dans des scénarios tels que l'analyse en temps réel, les architectures pilotées par les événements, l'agrégation de journaux, les systèmes de messagerie et la création de pipelines de données évolutifs.
Utilisation de cette doc :
Vous pouvez utiliser ce document pour configurer et utiliser Apache Kafka pour produire et consommer des messages (contenu JSON) dans votre application de démarrage Spring.
Conditions préalables
Vous avez besoin d'une bonne compréhension de Java, spring-boot, Apache Kafka, maven ou Gradle avant de parcourir ce document, sinon vous suggérerez de consulter leur documentation et leur guide officiels.
Installation
Avant de produire des messages pour les sujets Kafka, vous devez effectuer quelques étapes pour configurer les dépendances requises dans votre pom.xml (Maven) ou build.gradle (projet Gradle)
Pour Maven :
For Gradle
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
implementation ‘org.springframework.boot:spring-boot-starter’
implementation ‘org.springframework.kafka:spring-kafka’
Configuration
En configurant les propriétés Kafka dans le fichier Application.properties, vous pouvez également avoir vos propriétés personnalisées. Spécifiez les serveurs d'amorçage du serveur Kafka et toutes les propriétés de configuration supplémentaires dont vous avez besoin, telles que l'ID de groupe de consommateurs.
Application.properties
spring.kafka.bootstrap-servers=<kafka-bootstrap-servers>
spring.kafka.consumer.group-id=<consumer-group-id>
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.app.topic=<topic-name>
spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=group_category
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.app.topic=my-topic
Un producteur Kafka est un composant qui envoie des messages aux sujets Kafka. Il publie des données sur Kafka, qu'un ou plusieurs consommateurs Kafka peuvent ensuite consommer.
Pour créer un producteur Kafka, vous devez effectuer les étapes suivantes :
- Configurez les propriétés du producteur Kafka : configurez les propriétés de configuration nécessaires pour le producteur Kafka, telles que les serveurs d'amorçage (adresses des courtiers Kafka) et les paramètres de sérialisation. C'est ce que nous avons déjà fait dans la dernière étape.
- Créer un producteur Kafka : Pour envoyer des messages à Kafka ; vous pouvez utiliser le modèle fourni par Spring Kafka. Voici un exemple de producteur simple :
- Configurez les propriétés du producteur Kafka : Configurez les propriétés Kafka dans votre fichier application.properties. Spécifiez les serveurs d'amorçage du serveur Kafka et toutes les propriétés de configuration supplémentaires dont vous avez besoin pour le consommateur.
- Créer un écouteur consommateur Kafka : implémentez une méthode dans votre application qui sera appelée chaque fois qu'un nouveau message est reçu de Kafka. Utilisez l'annotation kafkaListener fournie par Spring Kafka.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component
public class KafkaEventProducer {
private static final Logger logger = LoggerFactory.getLogger(KafkaEventProducer.class);
@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
public void sendMessage(String topic, String message) {
logger.info("Producing message [{}]", message);
kafkaTemplate.send(topic, message);
}
}
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Component
public class KafkaEventConsumer {
private static final Logger logger = LoggerFactory.getLogger(KafkaEventConsumer.class);
@KafkaListener(topics = “<topic-name>”, groupId = “<consumer-group-id>”)
public void consumeMessage(String message) {
//Use log
log.info("Consumed message [{}]", message);
}
}
@KafkaListener(topics = “${spring.kafka.app.topic}”,groupId= “${spring.kafka.consumer.group-id}”)
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MainApplication {
@Autowired
private KafkaEventProducer kafkaEventProducer;
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
public void YourMethod() {
// Send a message using the Kafka producer
kafkaEventProducer.sendMessage(“<topic-name>”, “Oh Kafka Boy How'z Everything?”);
}
}
Conclusion
En conclusion, Spring Boot fournit un excellent support pour intégrer Apache Kafka dans vos applications. Avec la prise en charge de Kafka par Spring Boot, vous pouvez facilement créer des producteurs et des consommateurs Kafka, configurer les propriétés Kafka et gérer le traitement des messages.
L'intégration de Spring Boot avec Kafka simplifie le développement d'applications basées sur Kafka, en fournissant un niveau d'abstraction plus élevé et en réduisant la quantité de code passe-partout requis.
Et avant d'exécuter le code, assurez-vous que le serveur Kafka est en cours d'exécution et que les sujets ont été créés.
Remarque : N'oubliez pas de vous référer à la documentation officielle de Spring Kafka et d'explorer les exemples de Spring Kafka pour mieux comprendre les différentes fonctionnalités et options disponibles pour l'intégration de Kafka dans Spring Boot.
Merci!