Şuayb'in BloguŞuayb'in Blogu
Ana Sayfa
Kategoriler
Oyunlar
MediumHakkındaİletişim
Dil
Tema
    1. Blog
    2. Programlama
    3. Spring Boot ile Kafka Entegrasyonu

Spring Boot ile Kafka Entegrasyonu

İlk yayın25 Aralık 2024
Son güncelleme26 Aralık 2024
Okuma süresi3 dk okuma
JavaKotlinSpring BootKafkaMesajlaşma
XLinkedInFacebook
Spring Boot ile Kafka Entegrasyonu

Beğeni yükleniyor...

Apache Kafka, gerçek zamanlı veri işleme olanağı sağlayan dağıtık bir olay akışı platformudur. Bu kılavuz, Spring Boot uygulamasında Kafka kullanarak JSON mesajlarının nasıl gönderilip tüketileceğini göstermektedir.


Son güncelleme26 Aralık 2024

Toplam görüntülenmeGörüntülenme yükleniyor...

Önceki makaleSpring Boot ile Redis ÖnbelleklemeSonraki makaleSpring Boot ile GraalVM Native Uygulama
Şuayb Şimşek

Yazan

Şuayb Şimşek

Spring Boot, güvenlik, mikroservis ve cloud-native mimari konularında pratik teknik notlar paylaşan backend odaklı fullstack geliştirici.

Uzmanlık

  • Spring Boot
  • Go
  • Mikroservis
  • Next.js
  • Cloud Native

Bağlantılar

GitHubLinkedInMedium

Benzer yazılar

Spring Boot Configuration Properties
Programlama

Spring Boot Configuration Properties

@ConfigurationProperties ile tip-güvenli yapılandırma tanımlamayı, @Validated ile ayarları doğrulamayı ve profile-specific application-{profile}.yml dosyalarıyla ortama göre değer yönetimini öğrenin.

4 Şubat 20263 dk okuma
JavaKotlinSpring BootYapılandırma
Spring Boot GraphQL JWE Kimlik Doğrulama
Programlama

Spring Boot GraphQL JWE Kimlik Doğrulama

Stateless şifreli JWT’ler (JWE) ile Spring Boot GraphQL API’lerinizi güvenli hale getirmeyi; kullanıcı kimliği ve rolleri JPA ile bir veritabanında saklamayı öğrenin.

17 Mayıs 20256 dk okuma
JavaKotlinSpring BootGüvenlikJWTJWEGraphQL
Spring Boot JPA ile JWE Kimlik Doğrulaması
Programlama

Spring Boot JPA ile JWE Kimlik Doğrulaması

Stateless şifreli JWT’ler (JWE) kullanarak Spring Boot API’lerinizi güvenli hale getirirken, kullanıcı kimliklerini ve rolleri JPA destekli bir veritabanında nasıl saklayacağınızı öğrenin.

11 Mayıs 20254 dk okuma
JavaKotlinSpring BootGüvenlikJWTJWEJPA

Hakkımda

Spring Boot, mikroservis, güvenlik ve daha fazlası hakkında yazılar.

İletişimYeni başladıysan

Son yazılar

  • Captain Tsubasa 2: World Fighters
  • Captain Tsubasa: Rise of New Champions
  • Spring Boot Configuration Properties
  • Spring Boot GraphQL JWE Kimlik Doğrulama
  • Spring Boot JPA ile JWE Kimlik Doğrulaması

Popüler konular

JavaKotlinSpring BootGüvenlikJWEJWT

Abone ol

Yeni yazılar yayınlandığında pratik backend ve fullstack notlarını al.

Sosyal

© 2024-2026 Şuayb'in Blogu. Tüm hakları saklıdır.

🌟 Neden Kafka Kullanılmalı?

Bu bölümde Neden Kafka Kullanılmalı? konusunu netleştirip uygulamada kullanacağınız temel noktaları özetliyoruz.

  • Ölçeklenebilir Mesajlaşma: Büyük veri hacimlerini sorunsuz bir şekilde işleyin.
  • Hata Toleransı: Veri dayanıklılığı ve yüksek erişilebilirlik sağlar.
  • Gerçek Zamanlı Veri İşleme: Verileri anında işleyin ve analiz edin.
  • Kolay Entegrasyon: Kafka, Spring Boot ile etkin bir geliştirme için kolayca entegre edilebilir.

📋 Gereksinimler

📋 Aşağıdakilere sahip olduğunuzdan emin olun:

  • ☕ Java Development Kit (JDK) 17+
  • 📦 Maven veya Gradle yüklenmiş
  • 🔠 Bir Java IDE (IntelliJ IDEA, Eclipse gibi)
  • 🔠 Apache Kafka, yüklenmiş ve çalışır durumda

🛠️ Adım 1: Bağımlılıkları Ekleyin

Kafka'yı Spring Boot projenize entegre etmek için aşağıdaki bağımlıkları ekleyin:

  • Maven:
XMLpom.xml
<dependency>
  <groupId>org.springframework.kafka</groupId>
  <artifactId>spring-kafka</artifactId>
</dependency>
  • Gradle:
GROOVYbuild.gradle
implementation 'org.springframework.kafka:spring-kafka'

🛠️ Adım 2: Kafka'yı Yapılandırın

Kafka bağlantısını application.properties veya application.yml dosyasında yapılandırın:

PROPERTIESapplication.properties
spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=my-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.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer
spring.kafka.consumer.properties.spring.json.trusted.packages=*

🛠️ Adım 3: JSON Mesajlar için Bir Model Oluşturun

Bu bölümde Adım 3: JSON Mesajlar için Bir Model Oluşturun konusunu netleştirip uygulamada kullanacağınız temel noktaları özetliyoruz.

Model Sınıfı

Bu model, producer, consumer ve controller katmanları arasında taşınan mesaj sözleşmesini tanımlar.


🛠️ Adım 4: Kafka Producer ve Consumer Uygulamaları

Bu bölümde Adım 4: Kafka Producer ve Consumer Uygulamaları konusunu netleştirip uygulamada kullanacağınız temel noktaları özetliyoruz.

Producer Örneği

Bu producer örneği, mesajların hedef topic’e nasıl tutarlı biçimde gönderileceğini gösterir.

Consumer Örneği

Bu consumer örneği, gelen mesajların nasıl okunup işlendiğini açıkça gösterir.


Controller Örneği

Bu controller, mesaj akışını tetiklemek ve sonucu doğrulamak için sade bir API yüzeyi sağlar.


▶️ Uygulamayı Çalıştırma

Uygulamayı aşağıdaki komutla çalıştırın:

BASH
./mvnw spring-boot:run

🧪 API'yi Test Etme

Kafka Producer apisini cURL veya Postman kullanarak test edebilirsiniz:

BASH
curl -X POST "http://localhost:8080/kafka/publish" \
-H "Content-Type: application/json" \
-d '{"id": "123", "content": "Hello Kafka!"}'

🏁 Sonuç

Artık Kafka Entegrasyonu için üretim odaklı bir Spring Boot temeliniz var. Sonraki adımda ayarları kendi domainine uyarlayıp test ve gözlemlenebilirlik katmanını ekleyerek gerçek trafik altında doğrulayın.

JAVAMessage.java
package com.example.kafka.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Message {
    private String id;
    private String content;
}
KOTLINMessage.kt
package com.example.kafka.model

data class Message(
    val id: String,
    val content: String
)
JAVAKafkaProducer.java
package com.example.kafka.producer;

import com.example.kafka.model.Message;
import lombok.RequiredArgsConstructor;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;

@Service
@RequiredArgsConstructor
public class KafkaProducer {

    private final KafkaTemplate<String, Message> kafkaTemplate;

    public void sendMessage(String topic, Message message) {
        kafkaTemplate.send(topic, message);
    }
}
KOTLINKafkaProducer.kt
package com.example.kafka.producer

import com.example.kafka.model.Message
import org.springframework.kafka.core.KafkaTemplate
import org.springframework.stereotype.Service

@Service
class KafkaProducer(private val kafkaTemplate: KafkaTemplate<String, Message>) {

    fun sendMessage(topic: String, message: Message) {
        kafkaTemplate.send(topic, message)
    }
}
JAVAKafkaConsumer.java
package com.example.kafka.consumer;

import com.example.kafka.model.Message;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Service;

@Service
public class KafkaConsumer {

    @KafkaListener(topics = "my-topic", groupId = "my-group")
    public void consumeMessage(Message message) {
        System.out.println("Received message: " + message);
    }
}
KOTLINKafkaConsumer.kt
package com.example.kafka.consumer

import com.example.kafka.model.Message
import org.springframework.kafka.annotation.KafkaListener
import org.springframework.stereotype.Service

@Service
class KafkaConsumer {

    @KafkaListener(topics = ["my-topic"], groupId = "my-group")
    fun consumeMessage(message: Message) {
        println("Received message: $message")
    }
}
JAVAKafkaController.java
package com.example.kafka.controller;

import com.example.kafka.model.Message;
import com.example.kafka.producer.KafkaProducer;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/kafka")
@RequiredArgsConstructor
public class KafkaController {

    private final KafkaProducer kafkaProducer;

    @PostMapping("/publish")
    public String publishMessage(@RequestParam String topic, @RequestBody Message message) {
        kafkaProducer.sendMessage(topic, message);
        return "Message sent to topic: " + topic;
    }
}
KOTLINKafkaController.kt
package com.example.kafka.controller

import com.example.kafka.model.Message
import com.example.kafka.producer.KafkaProducer
import org.springframework.web.bind.annotation.*

@RestController
@RequestMapping("/kafka")
class KafkaController(private val kafkaProducer: KafkaProducer) {

    @PostMapping("/publish")
    fun publishMessage(@RequestParam topic: String, @RequestBody message: Message): String {
        kafkaProducer.sendMessage(topic, message)
        return "Message sent to topic: $topic"
    }
}