정지용
기술스택 목록
인프라

Kafka

프로젝트 1에서 사용했습니다. 각 프로젝트에서 어떤 역할로 썼는지 아래에 정리했습니다.

이 기술은 무엇인가요?

대용량 이벤트 스트림을 안정적으로 저장하고 전달하는 분산 메시징 플랫폼

Kafka는 발행-구독(publish-subscribe) 모델을 기반으로 대량의 데이터를 실시간으로 주고받기 위해 만들어진 분산 메시징 시스템이다. 여러 서버(브로커)에 데이터를 분산 저장하면서도 순서와 내구성을 보장해, 시스템 간 데이터 전달이 느슨하게 연결되도록(decoupling) 하는 것이 목적이다. 데이터를 발행하는 쪽(producer)과 소비하는 쪽(consumer)이 서로 직접 통신하지 않고 Kafka를 매개로 주고받기 때문에, 각 시스템을 독립적으로 확장하거나 장애로부터 분리할 수 있다.

이럴 때 사용합니다

  • 대량의 이벤트나 로그를 실시간에 가깝게 여러 시스템에 전달해야 할 때
  • 서비스 간 데이터 흐름을 느슨하게 연결해 서로의 장애나 배포에 영향받지 않게 하고 싶을 때
  • 처리 속도가 다른 producer와 consumer 사이를 버퍼링해 부하를 완충하고 싶을 때
  • 일정 기간 메시지를 보관하며 여러 소비자가 각자의 속도로 재처리해야 할 때

핵심 개념

Topic
메시지를 종류별로 구분해 저장하는 논리적인 채널이다. Producer는 특정 topic에 메시지를 쓰고, Consumer는 그 topic을 구독해 읽는다.
Partition
하나의 topic을 여러 조각으로 나눈 단위로, 병렬 처리와 분산 저장을 가능하게 한다. 같은 partition 내에서는 메시지 순서가 보장된다.
Broker
메시지를 실제로 저장하고 전달하는 Kafka 서버 노드이다. 여러 broker가 모여 클러스터를 이루며 데이터를 복제해 장애에 대비한다.
Producer / Consumer
Producer는 메시지를 발행하는 주체, Consumer는 메시지를 읽어 처리하는 주체이다. 서로를 알 필요 없이 topic을 통해서만 연결된다.
Consumer Group
여러 consumer가 그룹을 이뤄 하나의 topic을 나눠 읽는 단위로, 처리량을 분산시키고 중복 소비를 막는다.
Offset
각 partition 안에서 메시지의 위치를 나타내는 값으로, consumer가 어디까지 읽었는지를 추적하는 데 쓰인다.

Topic 생성 및 메시지 발행/소비 CLI 예시

orders라는 topic을 3개 partition으로 만든 뒤, 콘솔에서 직접 메시지를 발행하고 소비하는 가장 기본적인 사용 흐름이다.

Shell
# topic 생성
kafka-topics.sh --create --topic orders \
  --bootstrap-server localhost:9092 \
  --partitions 3 --replication-factor 1

# 메시지 발행 (producer)
kafka-console-producer.sh --topic orders \
  --bootstrap-server localhost:9092

# 메시지 소비 (consumer)
kafka-console-consumer.sh --topic orders \
  --bootstrap-server localhost:9092 --from-beginning

처음 쓸 때 흔한 함정

  • partition 수를 나중에 줄일 수 없어, 처음부터 확장성을 고려해 설계해야 한다
  • 메시지 순서는 partition 내에서만 보장되며, topic 전체 순서는 보장되지 않는다
  • 단순 큐 대체재로 오해하기 쉽지만, 운영에는 별도의 클러스터 관리 부담이 따른다

위 개요는 기술 학습을 돕기 위해 자동 생성된 일반 설명입니다. 정확한 사양과 최신 정보는 공식 문서를 확인하세요.

프로젝트별 활용 방식

위 개념이 실제 프로젝트에서 어떻게 쓰였는지 보여줍니다.

함께 사용한 기술

위 프로젝트들에서 같이 쓰인 다른 기술입니다.