Kafka

spring kafka vs apache kafka

사랑우주인 2024. 12. 10. 21:44

apache kafka

  • apache Kafka 공식 라이브러리.
  • Kafka 클라이언트를 제공하여 Kafka 브로커와 직접 통신하도록 지원.

spring kafka

  • Spring Framework의 Kafka 통합 라이브러리.
  • org.apache.kafka를 기반으로 하고 있으며, Spring 애플리케이션에 친화적인 기능을 추가.

spring boot에서 apache kafka를 조금 더 편리하게 사용할 수 있도록 한 라이브러리가 spring kafka이다.

예시

apache kafka(저수준 API)

 

  • producer.close()를 명시적으로 호출해야 자원을 적절히 해제할 수 있음.
  • Spring과의 통합 기능이 없어 별도로 관리해야 함.

 

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;

import java.util.Properties;

public class ApacheKafkaExample {
    public static void main(String[] args) {
        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092");
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

        KafkaProducer<String, String> producer = new KafkaProducer<>(props);
        try {
            producer.send(new ProducerRecord<>("my-topic", "key", "Hello Apache Kafka!"));
        } finally {
            producer.close(); // 명시적으로 자원 해제 필요
        }
    }
}

 

 

Spring Kafka (고수준 API)

 

  • KafkaTemplate을 사용해 간단한 코드로 메시지 전송 가능.
  • Spring 컨텍스트가 Bean 생명주기를 관리하므로 자원 해제 관리 필요 없음.
  • 설정도 application.yml로 간단히 관리 가능
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;

@Component
public class SpringKafkaProducer {
    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    public void sendMessage(String topic, String message) {
        kafkaTemplate.send(topic, message); // 간단한 메시지 전송
    }
}
spring:
  kafka:
    bootstrap-servers: localhost:9092
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer