Interview Question

[Interview Question] Kafka의 구조와 역할은 무엇인가요?

sagecode 2025. 9. 16. 17:18

Apache Kafka는 분산 메시징/스트리밍 플랫폼 입니다.

 

Kafka는 초당 수십만 건 이상의 메시지를 처리 가능하고, 여러 Broker를 통해 분산처리가 가능합니다. 또한, 메시지를 디스크에 저장하고 유실된 메시지를 요청을 한번 더 보내는 큐도 존재하면서 장애 발생 시에도 데이터 유실을 방지 할 수 있고, 한 메시지를 여러 Consumer 그룹이 독립적으로 읽을 수 있습니다.

 

Kafka 주요 개념

1. Producer

  • 메시지를 Kafka에 Publish 즉, 발행을 하는 주체이다.
  • 특정 Topic에 메시지를 보낸다.
  • 메시지는 JSON 등 여러가지 Payload 형태로 전송이 가능하다.

2. Topic

  • 메시지가 모이는 구분 단위이다.

3. Partition

  • Topic을 쪼갠 단위이며, topic내에서 여러 Partition으로 나누어 consumer에게 메시지를 전송할 때, 병렬 처리가 가능합니다.

4. Broker

  • Topic(partition 들)을 포함한 서버입니다.
  • Broker들이 모여서 Kafka 클러스터를 형성합니다.

5. Consumer

  • 메시지를 전달받는 주체입니다.
  • 여러개의 partition을 개별 조회하면서 메시지를 받게 됩니다.
  • Consumer Group 단위로 관리가 되는데 같은 Group 안에서는 메시지가 중복되지 않도록 분배합니다.

6. Offset

  • Partition 안에서 인덱스라고 보면 됩니다.
  • 이 offset이라는 번호를 통해 Consumer가 어디까지 메시지를 조회했는지 알 수 있습니다.

 

Kafka 데이터 파이프라인 시퀀스

1. 메시지 생산 (Producer)

  • Producer가 메시지를 보낼 때, Topic과 key를 같이 보냅니다.
  • Kafka는 key를 해싱해서 특정 Partition을 선택합니다. 만약 partition이 하나인경우 그대로 저장됩니다.

2. 메시지 저장 (Broker)

  • 선택된 Partition의 log 파일 끝에 append 됩니다.
  • 메시지마다 Offset이 붙으며 들어온 순서대로 증가합니다.

3. 메시지 소비 (Consumer Group)

  • Consumer들이 모인 Consumer Group이 Partition들을 나눠서 담당하여 메시지를 조회합니다.
  • 여러 Partition 한 Consumer가 맡을 수 있으므로 무조건 Partition개수는 Consumer개수보다 같거나 많아야 합니다,.

4. 메시지 재처리 전략

  • kafka의 가장 큰 특징은 메시지를 소비해도 바로 삭제되지 않고 log에 일정 기간 보존된다. 이를 이용해서 재처리가 가능하다.
  • 만약 처리 실패 시, consumer을 재시작 시 같은 메시지를 다시 읽을 수 있다.
  • Consumer가 조회 실패시 사용하는 처리 실패 Topic을 따로 만들어 두는 방법도 있다.

 

Kafka vs RabbitMQ

  • Kakfa는 “모든 데이터를 로그(Log) 로 남겨두고, 필요한 Consumer가 언제든 읽어간다.”
  • RabbitMQ는 “메시지를 큐(Queue) 에 넣고, Consumer가 가져가면 삭제한다.”
구분 Kafka RabbitMQ
철학 모든 이벤트를 로그(Log) 로 저장, 여러 Consumer가 필요할 때 읽음 메시지를 큐(Queue) 에 넣고 소비되면 삭제, 실시간 전달 중심
저장 방식 Partition Log에 Append-only로 디스크 저장, Retention 기간 동안 보존 Queue에 저장 → Ack 후 삭제, 기본적으로 재처리 불가
메시징 모델 Topic → Partition → Consumer Group (Group마다 전체 데이터 구독 가능) Exchange → Queue → Consumer (Exchange 타입에 따라 라우팅)
순서 보장 Partition 단위 순서 보장 (Key 기반으로 같은 Partition에 들어가야 순서 유지) Queue 단위 순서 보장 (하지만 병렬 처리 시 깨질 수 있음)
확장성/성능 Partition 수평 확장 → 초당 수십만 건 이상 처리 가능 단일 Queue 성능은 Kafka보다 낮음 (초당 수만 건 수준)
전달 보장 At-most / At-least / Exactly once 모두 지원 At-most / At-least once 지원 (Exactly once는 직접 구현 필요)
사용 사례 로그 수집, 이벤트 스트리밍, 대규모 채팅, 데이터 파이프라인 작업 큐(Job Queue), 알림 발송, 소규모 결제 처리, 백그라운드 태스크