본문 바로가기

IT/Kafka

Apache Kafka - API

반응형

Apache Kafka는 API를 통해 사용할 수 있습니다. Kafka는 기본적으로 Producer API, Consumer API, Streams API, Admin API 등을 제공하며, 다양한 프로그래밍 언어에서 이를 활용할 수 있습니다.


Kafka

Kafka API 종류

  • Producer API : 데이터를 Kafka 토픽에 전송 (Publish)
  • Consumer API : 토픽에서 데이터를 읽음 (Subscribe)
  • Streams API : Kafka 내 데이터를 실시간으로 처리
  • Admin API : 토픽 및 클러스터 관리


Kafka API 사용 방법

  • Kafka는 Java 기반 API를 제공하지만, Python, Go, Node.js 등 다양한 언어의 클라이언트 라이브러리를 사용할 수 있습니다.
  • Java API 예제 : Java에서는 Kafka의 org.apache.kafka.clients 패키지를 사용하여 API를 호출할 수 있습니다.

// Kafka Producer 예제 (Java)
import org.apache.kafka.clients.producer.*;

import java.util.Properties;

public class KafkaProducerExample {
    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");

        Producer<String, String> producer = new KafkaProducer<>(props);
        ProducerRecord<String, String> record = new ProducerRecord<>("my_topic", "key", "Hello Kafka!");

        producer.send(record);
        producer.close();
    }
}


  • Python API (kafka-python) : Python에서는 kafka-python 라이브러리를 사용하여 API를 활용할 수 있습니다.

from kafka import KafkaProducer

producer = KafkaProducer(
    bootstrap_servers='localhost:9092',
    value_serializer=lambda v: v.encode('utf-8')
)

producer.send('my_topic', 'Hello Kafka from Python!')
producer.flush()

 


REST API 활용 (Kafka REST Proxy)

  • Kafka를 직접 API로 호출하지 않고, Kafka REST Proxy를 사용하면 HTTP 요청을 통해 Kafka와 상호작용할 수 있습니다.

  • 예제 :

curl -X POST "http://localhost:8082/topics/my_topic" \
     -H "Content-Type: application/vnd.kafka.json.v2+json" \
     --data '{"records":[{"value":{"message":"Hello Kafka via REST API"}}]}'

Kafka API 확장

  • Confluent Kafka API : Kafka의 확장 버전으로, Schema Registry, REST Proxy, ksqlDB 등을 포함
  • Spring Kafka : Spring Boot와 Kafka를 쉽게 연동할 수 있는 라이브러리


Kafka REST Proxy

  • Kafka REST Proxy는 HTTP API를 통해 Kafka와 상호작용할 수 있도록 하는 Kafka의 RESTful 인터페이스입니다.
  • 즉, Kafka 클라이언트를 사용하지 않고도, REST API 요청만으로 토픽에 메시지를 생산(Producer)하거나 소비(Consumer)할 수 있습니다.
  • Kafka REST Proxy는 Confluent Platform에서 제공하는 서비스 중 하나로, Kafka 브로커와 직접 통신하지 않아도 HTTP 기반으로 Kafka를 사용할 수 있도록 지원합니다.
  • 주요 기능

기능 설명
Producer 기능 (메시지 전송) HTTP POST 요청으로 Kafka 토픽에 메시지를 보낼 수 있음
Consumer 기능 (메시지 읽기) HTTP GET 요청으로 Kafka에서 메시지를 읽어올 수 있음
토픽 관리 Kafka 토픽 리스트 조회, 토픽 생성 등 관리 기능 제공
Schema Registry 통합 지원 JSON, Avro, Protobuf 등 다양한 데이터 포맷을 지원
Kafka 클라이언트 없이 사용 가능 Java, Python 등 Kafka 라이브러리를 설치하지 않고도 HTTP API로 간편하게 Kafka 사용 가능

  • Kafka REST Proxy 사용 예제
   ✓ Kafka REST Proxy는 기본적으로 http://localhost:8082에서 실행됩니다.
   ✓ 예 : "message":"Hello Kafka via REST API" 메시지를 my_topic에 전송

curl -X POST "http://localhost:8082/topics/my_topic" \
     -H "Content-Type: application/vnd.kafka.json.v2+json" \
     --data '{"records":[{"value":{"message":"Hello Kafka via REST API"}}]}'

     ✓ Kafka REST Proxy를 사용하여 토픽 조회 : 현재 Kafka 클러스터에 존재하는 모든 토픽 리스트 조회

curl -X GET "http://localhost:8082/topics"

     ✓ Kafka REST Proxy를 사용하여 메시지 읽기 : Kafka의 Consumer Group을 생성하고 메시지를 읽을 수 있습니다.

  • 장점
     ✓ Kafka 클라이언트 설치 불필요 → REST API로 간편하게 Kafka 사용
     ✓ 언어 제한 없음 → Java, Python, JavaScript 등 모든 환경에서 Kafka 사용 가능
     ✓ 보안 및 네트워크 제약이 있는 환경에서 유용 → 방화벽 내부에서 Kafka 브로커에 직접 접근할 필요 없음
     ✓ Schema Registry와 통합 가능 → Avro, Protobuf 등의 데이터 포맷 지원

  • Kafka REST Proxy vs Kafka 클라이언트

비교 항목 Kafka REST Proxy Kafka 클라이언트 (Java/Python 등)
설치 필요 여부 없음 (REST API 사용) Kafka 라이브러리 필요
언어 제약 없음 (HTTP 요청만 필요) 특정 언어의 Kafka 라이브러리 필요
성능 낮음 (HTTP 오버헤드)  높음 (Kafka 네이티브 API 사용)
보안/네트워크 방화벽 내에서도 사용 가능 브로커와 직접 연결 필요
사용 용도 간단한 메시지 전송 및 조회 대량 데이터 처리, 실시간 스트리밍

  
  • Kafka REST Proxy 사용 시 고려할 점
    ✓ HTTP 오버헤드가 발생하므로 성능이 다소 낮음
    ✓ 대량의 메시지를 처리할 때는 Kafka 클라이언트를 사용하는 것이 더 적합
    ✓ Kafka REST Proxy 자체가 추가적인 서비스이므로 유지보수 필요
    ✓ 일부 고급 기능은 지원하지 않음
    ✓ 예: Kafka Streams, Interactive Queries 등


관련 블로그

 

Apache Kafka 소개

Apache Kafka는 분산 이벤트 스트리밍 플랫폼으로, 대용량의 데이터를 실시간으로 처리하고 저장하는 데 최적화된 메시징 시스템입니다. 주요 특징1. 고성능 및 확장성  • 분산 시스템 구조로, 여

make2t.tistory.com

 

Apache Kafka - 신뢰성 보증 방안

Apache Kafka는 데이터 신뢰성을 보장하기 위해 다양한 메커니즘을 제공합니다. 데이터 손실 없이 안정적으로 메시지를 처리할 수 있도록 복제(Replication), Acknowledgment(ACK), 정확한 한 번 처리(Exactly-On

make2t.tistory.com

 

 

반응형