0Pricing
Advanced Spring Boot 4: Event-Driven Architecture (Kafka) · درس

بناء حاويات مستمعي Kafka

أنشئوا طرق @KafkaListener لاستهلاك الرسائل تلقائيًا من مواضيع محددة واضبطوا خصائصها

بناء حاويات مستمعي Kafka درس مجاني في Advanced Spring Boot 4: Event-Driven Architecture (Kafka) على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Advanced Spring Boot 4: Event-Driven Architecture (Kafka)، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Advanced Spring Boot 4: Event-Driven Architecture (Kafka) 4 دروس في المجموع.

بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.

Welcome to Kafka Consumers!

In event-driven systems, producers send events, and consumers react to them. Spring Boot makes it easy to build Kafka consumers.

We'll learn how to create methods that automatically listen for and process messages from Kafka topics using the @KafkaListener annotation.

The @KafkaListener Annotation

The @KafkaListener annotation is the core of consuming messages in Spring Boot. You place it on a method, telling Spring which Kafka topic(s) to listen to.

  • It automatically sets up the necessary infrastructure.
  • The method parameter receives the message payload.
  • You must specify a topics and groupId.

Basic Listener: String Messages

Let's create a simple Kafka listener that consumes plain string messages. Remember, you'd typically have Kafka dependencies and configuration in your Spring Boot project.

Here, my-topic is the Kafka topic, and my-group is the consumer group ID.

package com.example.kafkaconsumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.kafka.annotation.EnableKafka;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

@SpringBootApplication
@EnableKafka
public class KafkaConsumerApplication {
  public static void main(String[] args) {
    // In a real app, SpringApplication.run() starts the context
    // and registers the @KafkaListener methods.
    System.out.println("Spring Boot Kafka Consumer App Started (simulated)");
    // For a runnable snippet, we just show the listener logic.
    // In a full app, this would run indefinitely, waiting for messages.
  }
}

@Component
class MyStringListener {
  @KafkaListener(topics = "my-topic", groupId = "my-group")
  public void listen(String message) {
    System.out.println("Received String: " + message);
  }
}

Understanding Consumer Groups

The groupId property is crucial for Kafka consumers. It defines a group of consumers that work together to process messages from one or more topics.

  • Load Balancing: Messages from a topic are distributed among consumers in the same group.
  • Fault Tolerance: If a consumer fails, another in the group takes over its partitions.
  • Unique Processing: Each message is processed by only one consumer within a group.

Listening to Multiple Topics

A single @KafkaListener method can listen to multiple topics. You can specify them as an array of strings in the topics attribute.

This is useful when different topics carry related types of messages that can be handled by the same logic.

package com.example.kafkaconsumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.kafka.annotation.EnableKafka;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

@SpringBootApplication
@EnableKafka
public class KafkaConsumerApplication {
  public static void main(String[] args) {
    System.out.println("Spring Boot Kafka Consumer App Started (simulated)");
  }
}

@Component
class MultiTopicListener {
  @KafkaListener(topics = {"topic-a", "topic-b"}, groupId = "multi-group")
  public void listenMultipleTopics(String message) {
    System.out.println("Received from multiple topics: " + message);
  }
}

Receiving Custom Objects

Kafka messages often contain structured data, not just strings. Spring Kafka can automatically convert JSON or Avro messages into Java objects (POJOs).

You just need to define a POJO that matches the structure of your Kafka messages and use it as the method parameter.

Code: Custom Object Listener

Here's how to set up a listener for a custom MyEvent object. Spring Boot handles the deserialization, assuming you have the correct deserializer configured (e.g., JSON deserializer).

package com.example.kafkaconsumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.kafka.annotation.EnableKafka;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

// A simple data class representing an event
class MyEvent {
  private String id;
  private String description;

  // Getters and setters are essential for deserialization
  public String getId() { return id; }
  public void setId(String id) { this.id = id; }
  public String getDescription() { return description; }
  public void setDescription(String description) { this.description = description; }

  @Override
  public String toString() {
    return "MyEvent{id='" + id + "', description='" + description + "'}";
  }
}

@SpringBootApplication
@EnableKafka
public class KafkaConsumerApplication {
  public static void main(String[] args) {
    System.out.println("Spring Boot Kafka Consumer App Started (simulated)");
  }
}

@Component
class MyObjectListener {
  @KafkaListener(topics = "object-topic", groupId = "object-group")
  public void listenObject(MyEvent event) {
    System.out.println("Received object: " + event);
  }
}

Accessing Message Metadata

Beyond the message payload, Kafka messages carry useful metadata like topic, partition, offset, and headers. You can access these in your listener method:

  • @Payload: The message body (default).
  • @Header: Access specific Kafka headers.
  • ConsumerRecord: The raw Kafka record, giving access to all metadata.
package com.example.kafkaconsumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.kafka.annotation.EnableKafka;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.messaging.handler.annotation.Header;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Component;

@SpringBootApplication
@EnableKafka
public class KafkaConsumerApplication {
  public static void main(String[] args) {
    System.out.println("Spring Boot Kafka Consumer App Started (simulated)");
  }
}

@Component
class MyMetadataListener {
  @KafkaListener(topics = "metadata-topic", groupId = "meta-group")
  public void listenWithMetadata(
      @Payload String message,
      @Header("kafka_receivedTopic") String topic,
      @Header("kafka_receivedPartitionId") int partition,
      @Header("kafka_offset") long offset) {
    System.out.println("Topic: " + topic + ", Partition: " + partition + ", Offset: " + offset);
    System.out.println("Message: " + message);
  }
}

Configuring Listener Properties

While @KafkaListener handles many defaults, you can customize consumer behavior. Properties like bootstrap.servers, auto.offset.reset, and key.deserializer are typically set in your application.properties or application.yml file.

  • Spring Boot automatically picks up these configurations.
  • They apply to all @KafkaListeners unless overridden.

Test Your Kafka Listener Knowledge!

Which of the following statements about Spring Boot's @KafkaListener annotation is TRUE?

Recap: Building Kafka Listeners

You've taken the first step into consuming Kafka messages with Spring Boot!

  • The @KafkaListener annotation simplifies consumer creation.
  • You specify topics and a groupId to organize consumers.
  • Listeners can handle String messages, custom objects, and access metadata.
  • Configuration is often managed through application.properties.

Next, we'll explore how consumer groups work in more detail to achieve scalable and fault-tolerant message processing!

الأسئلة الشائعة

هل درس «بناء حاويات مستمعي Kafka» مجاني؟

نعم — نص درس «بناء حاويات مستمعي Kafka» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Advanced Spring Boot 4: Event-Driven Architecture (Kafka)، انتقل إلى CoddyKit PRO. تتضمن دورة Advanced Spring Boot 4: Event-Driven Architecture (Kafka) 4 دروس في المجموع.

ماذا ستتعلم في «بناء حاويات مستمعي Kafka»؟

أنشئوا طرق @KafkaListener لاستهلاك الرسائل تلقائيًا من مواضيع محددة واضبطوا خصائصها تتمرن على Advanced Spring Boot 4: Event-Driven Architecture (Kafka) مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Advanced Spring Boot 4: Event-Driven Architecture (Kafka)؟

لا تُشترط خبرة سابقة. Advanced Spring Boot 4: Event-Driven Architecture (Kafka) على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «بناء حاويات مستمعي Kafka»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Advanced Spring Boot 4: Event-Driven Architecture (Kafka) هذا؟

نعم. كل درس في Advanced Spring Boot 4: Event-Driven Architecture (Kafka) يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. بناء حاويات مستمعي Kafka
  2. إدارة مجموعات المستهلكين
  3. إلغاء التسلسل وتحويل الرسائل
  4. الاستهلاك على دفعات وأنماط الإقرار
← العودة إلى Advanced Spring Boot 4: Event-Driven Architecture (Kafka)