Spring Boot ile Apache Kafka'yı Yapılandırma ve Kullanma

May 13 2023
Yaylı çizmeli Kafka
Giriş Apache Kafka, büyük ölçekli, yüksek verimli, hataya dayanıklı gerçek zamanlı veri akışını yöneten açık kaynaklı bir dağıtılmış akış platformudur. Sistem, üreticilerin konulara mesaj yayınladığı ve tüketicilerin mesajları tüketmek için bu konulara abone olduğu bir yayınla-abone ol modeline dayanmaktadır.
Resim kaynağı

giriiş

Apache Kafka, büyük ölçekli, yüksek verimli, hataya dayanıklı gerçek zamanlı veri akışını yöneten açık kaynaklı bir dağıtılmış akış platformudur. Sistem, üreticilerin konulara mesaj yayınladığı ve tüketicilerin mesajları tüketmek için bu konulara abone olduğu bir yayınla-abone ol modeline dayanmaktadır. Apache Kafka kullanım durumu, gerçek zamanlı analitik, olaya dayalı mimariler, günlük toplama, mesajlaşma sistemleri ve ölçeklenebilir veri ardışık düzenleri oluşturma gibi senaryolarda görülür.

Bu dokümanın kullanımı:

Spring boot Uygulamanızda mesajlar (JSON içeriği) üretmek ve tüketmek için Apache Kafka'yı yapılandırmak ve kullanmak için bu belgeyi kullanabilirsiniz.

Önkoşullar

Bu belgeyi incelemeden önce Java, spring-boot, Apache Kafka, maven veya Gradle hakkında iyi bir anlayışa sahip olmanız gerekir, aksi takdirde resmi belgelerini ve kılavuzlarını kontrol etmenizi öneririz.

Kurulum

Kafka konularına mesaj üretmeden önce pom.xml(Maven) veya build.gradle(Gradle projenizde) gerekli bağımlılıkları yapılandırmak için birkaç adımı tamamlamanız gerekir.

Maven için:

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’

Yapılandırma

Kafka özelliklerini Application.properties dosyasına yapılandırarak, özel özelliklerinize de sahip olabilirsiniz. Kafka sunucusunun önyükleme sunucularını ve tüketici grubu kimliği gibi ihtiyacınız olan ek yapılandırma özelliklerini belirtin.

Uygulama.özellikleri

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

Bir Kafka üreticisi, Kafka konularına mesaj gönderen bir bileşendir. Bir veya daha fazla Kafka tüketicisinin tüketebileceği verileri Kafka'ya yayınlar.

Bir Kafka üreticisi oluşturmak için aşağıdaki adımları uygulamanız gerekir:

  1. Kafka üretici özelliklerini yapılandırın: Önyükleme sunucuları (Kafka aracılarının adresleri) ve serileştirme ayarları gibi Kafka üreticisi için gerekli yapılandırma özelliklerini ayarlayın. Bunu zaten son adımda gerçekleştirdik.
  2. Bir Kafka üreticisi oluşturun: Kafka'ya mesaj göndermek için; Spring Kafka tarafından sağlanan şablonu kullanabilirsiniz. İşte basit bir üretici örneği:
  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. Kafka üretici özelliklerini yapılandırın: application.properties dosyanızda Kafka özelliklerini yapılandırın. Kafka sunucusunun önyükleme sunucularını ve tüketici için ihtiyaç duyduğunuz ek yapılandırma özelliklerini belirtin.
  5. Bir Kafka tüketici dinleyicisi oluşturun: Uygulamanızda, Kafka'dan her yeni mesaj alındığında çağrılacak bir yöntem uygulayın. Spring Kafka tarafından sağlanan kafkaListener ek açıklamasını kullanın.
  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?”);
 }
}

Çözüm

Sonuç olarak Spring Boot, Apache Kafka'yı uygulamalarınıza entegre etmek için mükemmel destek sağlar. Spring Boot'un Kafka desteği ile kolayca Kafka üreticileri ve tüketicileri oluşturabilir, Kafka özelliklerini yapılandırabilir ve mesaj işlemeyi yönetebilirsiniz.
Spring Boot'un Kafka ile entegrasyonu, Kafka tabanlı uygulamaların geliştirilmesini basitleştirerek daha yüksek bir soyutlama düzeyi sağlar ve gerekli standart kod miktarını azaltır.

Ve kodu çalıştırmadan önce lütfen Kafka sunucusunun çalıştığından ve konuların oluşturulduğundan emin olun.

Not: Spring Boot'ta Kafka entegrasyonu için mevcut olan çeşitli özellikleri ve seçenekleri daha iyi anlamak için resmi Spring Kafka belgelerine başvurmayı ve Spring Kafka örneklerini keşfetmeyi unutmayın.

Teşekkür ederim!