10/24

졸용·2025년 10월 24일

TIL

목록 보기
100/144

🔹 Kafka란?

Kafka는 대규모 데이터를 빠르고 안정적으로 처리·전달하기 위한 분산 메시징 플랫폼을 말한다.


🔸 핵심 개념

  1. 메시지 브로커(Message Broker)

    • Kafka는 메시지를 발행(Publish)하고 구독(Subscribe)하는 Pub/Sub 구조를 기반으로 동작한다.
    • 생산자(Producer)가 메시지를 보내면, Kafka가 이를 저장하고, 소비자(Consumer)가 가져가는 구조이다.
  2. 생산자(Producer)

    • 메시지를 만들어서 Kafka에 전송하는 주체
    • 예: 주문 서비스가 주문 생성 이벤트를 발행
  3. 소비자(Consumer)

    • Kafka로부터 메시지를 읽어 처리하는 주체
    • 예: 배송 서비스가 주문 생성 이벤트를 구독해서 배송 요청 처리
  4. 브로커(Broker)

    • 메시지를 저장하고 전달하는 Kafka 서버 하나를 브로커라고 부른다.
    • 여러 대 브로커가 모여 Kafka Cluster를 구성.
    • 예: 3대 브로커가 있으면 데이터를 분산 저장하고 복제해서 장애 대응.
  5. 토픽(Topic)

    • 메시지를 카테고리처럼 나눠 담는 공간.
    • 예: order-events, user-login-events
  6. 파티션(Partition)

    • 토픽을 여러 개의 파티션으로 나눠 분산 저장.
    • 덕분에 대용량 처리수평 확장이 가능하다.
    • 각 파티션은 메시지를 순서대로 저장하지만, 전체 토픽은 병렬 처리된다.
  7. 로그 구조 저장

    • Kafka는 메시지를 디스크에 로그 형태로 append-only 저장하고, 필요할 때 offset 기준으로 읽어간다.
    • 이 때문에 빠른 성능 + 안정성을 동시에 확보 가능.
  8. 오프셋(offset)

    • 파티션 내 메시지의 순서 번호
    • Consumer가 어디까지 읽었는지 추적하는 기준

🔸 Kafka의 주요 특징

특징설명
고성능 / 고처리량초당 수십~수백만 건의 메시지 처리 가능
확장성브로커와 파티션을 늘려 부하를 분산 가능
내구성 / 장애 복구메시지를 디스크에 저장하고 복제(replication)하여 장애 시에도 데이터 유실 방지
실시간 처리스트림 데이터를 실시간으로 처리 (예: IoT 센서, 로그, 결제 이벤트 등)
Pub/Sub 구조한 Producer가 보낸 메시지를 여러 Consumer가 동시에 구독 가능

🔸 핵심 요약

키워드설명
실시간 스트리밍데이터가 생성되는 즉시 전달
분산 처리여러 서버(브로커)가 병렬로 처리
높은 내구성로그 기반 저장 + 복제
확장성파티션 확장으로 처리량 증가
사용 분야실시간 로그, IoT, 이벤트 기반 마이크로서비스


🔹 Kafka의 장점

  • 고성능: 초당 수백만 건 이벤트 처리 가능.
  • 확장성: 브로커/파티션을 늘려서 쉽게 확장 가능.
  • 내구성: 메시지를 디스크에 저장하고 복제(replication)해서 장애 대비.
  • 유연성: 실시간 스트리밍 처리뿐 아니라, 로그 저장·분석에도 활용.

🔸 주요 사용 사례

  • 로그 수집 시스템: 서버/앱 로그를 Kafka에 모아두고, 다른 분석 시스템(예: ELK, Hadoop)으로 전달.
  • 실시간 데이터 스트리밍: 주식 거래 이벤트, IoT 센서 데이터, 사용자 행동 이벤트 처리.
  • 마이크로서비스 간 통신: 서비스 간 비동기 이벤트 전달.
  • 데이터 파이프라인 허브: 여러 DB, 캐시, 분석 시스템을 연결하는 중심 허브 역할.

🔸 Kafka의 활용 예시

사례설명
로그 수집 시스템각 서버의 로그를 Kafka에 모은 뒤 ELK(ElasticSearch, Logstash, Kibana)로 전송
주문/결제 이벤트 처리주문, 결제, 배송 서비스를 비동기 이벤트 기반으로 연결
실시간 데이터 분석클릭스트림, 트래픽 데이터, 금융 거래를 실시간 분석
IoT 데이터 스트리밍수많은 센서 데이터 실시간 수집 및 처리
데이터 파이프라인 중간 버퍼Spark, Flink, Hadoop 등으로 데이터를 전달하는 중간 허브 역할

🔸 Spring에서 Kafka 사용 예

Spring Boot에서는 Spring for Apache Kafka 라이브러리로 쉽게 연동할 수 있다.

// Producer 예시
@Service
@RequiredArgsConstructor
public class OrderProducer {

    private final KafkaTemplate<String, String> kafkaTemplate;

    public void sendOrderEvent(String orderData) {
        kafkaTemplate.send("order-created", orderData);
    }
}
// Consumer 예시
@Component
@KafkaListener(topics = "order-created", groupId = "delivery-service")
public void consumeOrderEvent(String message) {
    System.out.println("받은 주문 이벤트: " + message);
}


🔹 Kafka 동작 구조

Producer[Kafka Broker]Consumer
               | Topic |
           ┌──────────────┐
           │ Partition 0  │ → 메시지 A, B, C ...Partition 1  │ → 메시지 D, E, F ...
           └──────────────┘
  1. Producer가 특정 Topic으로 메시지를 보냄
  2. Kafka Broker는 그 메시지를 해당 Topic의 Partition에 저장
  3. Consumer는 자신이 구독한 Topic의 Partition에서 메시지를 Offset 순서대로 읽음


🔹 RabbitMQ vs Kafka

항목KafkaRabbitMQ
구조로그 기반 분산 스트리밍큐 기반 메시지 브로커
메시지 순서파티션 단위 순서 보장큐 단위로 메시지 순서 보장
처리 목적대규모 데이터 스트림 (실시간 분석)트랜잭션성 메시징 (요청-응답, 워크큐 등)
저장 방식디스크 로그에 저장 (내구성 높음)메모리 중심 (빠름, 하지만 유실 가능성 있음)
소비 방식Consumer Group 단위로 병렬 처리각 큐에 한 소비자 그룹만 처리
사용 예로그, 이벤트, IoT, 데이터 파이프라인주문 처리, 이메일 발송, 알림 등

Kafka는 RabbitMQ 같은 메시지 큐보다 더 큰 규모, 로그 저장/스트리밍 처리에 특화된 게 특징이다.

  • RabbitMQ: 작업 큐, 요청/응답 패턴, 비동기 작업 처리 등 전통적인 메시지 큐 사용 사례에 적합.
  • Kafka: 실시간 데이터 스트리밍, 로그 수집 및 분석, 이벤트 소싱 등 대규모 데이터 스트림 처리에 적합.
profile
꾸준한 공부만이 답이다

0개의 댓글