Konfigurieren und verwenden Sie Apache Kafka mit Spring Boot

May 13 2023
Kafka mit Federstiefel
Einführung Apache Kafka ist eine verteilte Open-Source-Streaming-Plattform, die umfangreiches, fehlertolerantes Echtzeit-Datenstreaming mit hohem Durchsatz abwickelt. Das System basiert auf einem Publish-Subscribe-Modell, bei dem Produzenten Nachrichten zu Themen veröffentlichen und Verbraucher diese Themen abonnieren, um die Nachrichten zu konsumieren.
Bildquelle

Einführung

Apache Kafka ist eine verteilte Open-Source-Streaming-Plattform, die umfangreiches, fehlertolerantes Echtzeit-Datenstreaming mit hohem Durchsatz abwickelt. Das System basiert auf einem Publish-Subscribe-Modell, bei dem Produzenten Nachrichten zu Themen veröffentlichen und Verbraucher diese Themen abonnieren, um die Nachrichten zu konsumieren. Der Anwendungsfall von Apache Kafka wird in Szenarien wie Echtzeitanalysen, ereignisgesteuerten Architekturen, Protokollaggregation, Messaging-Systemen und dem Aufbau skalierbarer Datenpipelines gesehen.

Verwendung dieses Dokuments:

Mit diesem Dokument können Sie Apache Kafka konfigurieren und verwenden, um Nachrichten (JSON-Inhalt) in Ihrer Spring-Boot-Anwendung zu erstellen und zu konsumieren.

Voraussetzungen

Sie benötigen gute Kenntnisse in Java, Spring-Boot, Apache Kafka, Maven oder Gradle, bevor Sie dieses Dokument lesen. Andernfalls empfehlen wir Ihnen, die offizielle Dokumentation und Anleitung zu lesen.

Installation

Bevor Sie Nachrichten zu den Kafka-Themen erstellen, müssen Sie einige Schritte ausführen, um die erforderlichen Abhängigkeiten in Ihrem pom.xml (Maven) oder build.gradle (Gradle-Projekt) zu konfigurieren.

Für 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’

Aufbau

Wenn Sie Kafka-Eigenschaften für die Datei „Application.properties“ konfigurieren, können Sie auch Ihre benutzerdefinierten Eigenschaften verwenden. Geben Sie die Bootstrap-Server des Kafka-Servers und alle zusätzlichen Konfigurationseigenschaften an, die Sie benötigen, z. B. die Verbrauchergruppen-ID.

Anwendungseigenschaften

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

Ein Kafka-Produzent ist eine Komponente, die Nachrichten an Kafka-Themen sendet. Es veröffentlicht Daten an Kafka, die dann ein oder mehrere Kafka-Konsumenten nutzen können.

Um einen Kafka-Produzenten zu erstellen, müssen Sie die folgenden Schritte ausführen:

  1. Konfigurieren Sie die Eigenschaften des Kafka-Produzenten: Richten Sie die erforderlichen Konfigurationseigenschaften für den Kafka-Produzenten ein, z. B. die Bootstrap-Server (Adressen der Kafka-Broker) und Serialisierungseinstellungen. Dies haben wir bereits im letzten Schritt durchgeführt.
  2. Erstellen Sie einen Kafka-Produzenten: Um Nachrichten an Kafka zu senden; Sie können die von Spring Kafka bereitgestellte Vorlage verwenden. Hier ist ein Beispiel für einen einfachen Produzenten:
  3. 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);
     }
    }
    

  4. Konfigurieren Sie die Kafka-Produzenteneigenschaften: Konfigurieren Sie Kafka-Eigenschaften in Ihrer application.properties-Datei. Geben Sie die Bootstrap-Server des Kafka-Servers und alle zusätzlichen Konfigurationseigenschaften an, die Sie für den Verbraucher benötigen.
  5. Erstellen Sie einen Kafka-Consumer-Listener: Implementieren Sie eine Methode in Ihrer Anwendung, die immer dann aufgerufen wird, wenn eine neue Nachricht von Kafka empfangen wird. Verwenden Sie die von Spring Kafka bereitgestellte kafkaListener-Annotation.
  6. 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?”);
 }
}

Abschluss

Zusammenfassend lässt sich sagen, dass Spring Boot eine hervorragende Unterstützung für die Integration von Apache Kafka in Ihre Anwendungen bietet. Mit der Kafka-Unterstützung von Spring Boot können Sie ganz einfach Kafka-Produzenten und -Konsumenten erstellen, Kafka-Eigenschaften konfigurieren und die Nachrichtenverarbeitung übernehmen.
Die Integration von Spring Boot mit Kafka vereinfacht die Entwicklung von Kafka-basierten Anwendungen, bietet ein höheres Abstraktionsniveau und reduziert die Menge des erforderlichen Boilerplate-Codes.

Und bevor Sie den Code ausführen, stellen Sie bitte sicher, dass der Kafka-Server läuft und die Themen erstellt wurden.

Hinweis: Denken Sie daran, die offizielle Spring Kafka-Dokumentation zu lesen und die Spring Kafka-Beispiele zu erkunden, um die verschiedenen Funktionen und Optionen für die Kafka-Integration in Spring Boot besser zu verstehen.

Danke schön!