Apache Kafka 이론 - 토픽, 파티션, 오프셋

이건·2025년 4월 28일

Kafka

목록 보기
2/18
post-thumbnail

Apache Kafka의 토픽과 파티션 이해하기

Apache Kafka는 분산 데이터 스트리밍 플랫폼으로, 데이터 통합과 실시간 처리를 위한 강력한 도구다.


Kafka 토픽(Topic)의 개념

Kafka 토픽은 Kafka 클러스터 내에 존재하는 데이터 스트림을 가리키는 논리적 단위다. 하나의 Kafka 클러스터 안에는 여러 토픽이 존재할 수 있으며, 각 토픽은 특정 유형의 데이터 스트림을 나타낸다.

토픽의 특징:

  • 토픽은 logs, purchases, twitter_tweets, trucks_gps와 같이 의미 있는 이름으로 식별된다.
  • 데이터베이스의 테이블과 유사하지만, 데이터 검증이나 제약조건이 없다.
  • 모든 종류의 메시지 형식(JSON, Avro, 텍스트, 바이너리 등)을 지원한다.
  • 토픽은 쿼리할 수 없으며, 데이터를 추가하거나 읽는 작업만 가능하다.
  • 데이터 추가는 Kafka 프로듀서를 통해, 데이터 읽기는 Kafka 컨슈머를 통해 이루어진다.

Data Stream

토픽 안에 있는 메시지들의 순서를 데이터 스트림이라고 부른다. 그래서 Kafka는 토픽을 통해 데이터 스트림을 만드므로 Kafka를 데이터 스트리밍 플랫폼이라고 부른다.


파티션(Partition)과 오프셋(Offset)

Kafka 토픽은 여러 파티션으로 분할될 수 있다. 이 파티션은 데이터 병렬 처리와 확장성을 위한 핵심 메커니즘이다.

파티션의 특징:

  • 하나의 토픽은 여러 파티션(예: 3개, 10개, 100개 등)으로 구성될 수 있다.
  • 각 파티션은 독립적인 메시지 시퀀스를 가진다.
  • 파티션 내 메시지는 순서가 보장되며, 각 메시지는 오프셋이라는 고유 ID를 가진다.
  • 오프셋은 0부터 시작하여 메시지가 추가될 때마다 1씩 증가한다.

오프셋의 중요 특성:

  • 오프셋은 특정 파티션 내에서만 의미가 있다.
  • 파티션 0의 오프셋 3과 파티션 1의 오프셋 3은 서로 다른 메시지를 가리킨다.
  • 메시지가 삭제되어도 오프셋은 재사용되지 않는다.
  • 메시지 순서는 한 파티션 내에서만 보장되며, 서로 다른 파티션 간에는 보장되지 않는다.

Kafka 토픽의 불변성(Immutability)

Kafka 토픽의 중요한 특성 중 하나는 불변성이다.

불변성의 의미:

  • 일단 데이터가 파티션에 기록되면 변경할 수 없다.
  • 데이터를 삭제하거나 업데이트할 수 없으며, 새로운 데이터만 추가할 수 있다.
  • 데이터는 설정된 보존 기간(기본값 1주일) 동안만 유지된다.

실제 활용 예시: 트럭 GPS 추적 시스템

Kafka의 개념을 이해하기 위해 트럭 GPS 추적 시스템을 예로 들어보면

시나리오:

  • 여러 트럭에 장착된 GPS 장치가 위치 데이터를 주기적으로(예: 20초마다) Kafka로 전송한다.
  • 각 메시지에는 트럭 ID, 위도, 경도 등의 정보가 포함된다.
  • 이 데이터는 trucks_gps라는 이름의 Kafka 토픽으로 전송된다.
  • 토픽은 10개의 파티션으로 구성된다.

데이터 활용:

  • 위치 대시보드: 모든 트럭의 위치를 실시간으로 시각화
  • 알림 서비스: 배송 완료 시 고객에게 알림 전송

이 예시에서 볼 수 있듯이, Kafka의 장점은 동일한 데이터 스트림을 여러 서비스가 독립적으로 읽을 수 있다는 점이다.


파티션 할당 방식

데이터가 Kafka 토픽으로 전송될 때, 어떤 파티션에 저장될지 결정하는 방식은 다음과 같다:

  • 키(key)가 없는 경우: 데이터는 라운드 로빈 방식으로 임의의 파티션에 할당된다.
  • 키(key)가 있는 경우: 동일한 키를 가진 메시지는 항상 같은 파티션에 할당된다. (이는 특정 데이터의 순서를 보장해야 할 때 유용)

요약

Kafka 토픽은 데이터 스트림을 나타내는 논리적 단위로, 여러 파티션으로 구성된다. 각 파티션은 독립적인 메시지 시퀀스를 가지며, 메시지는 오프셋이라는 고유 ID로 식별된다. Kafka 토픽의 불변성은 데이터 일관성을 보장하며, 다양한 서비스가 동일한 데이터 스트림을 독립적으로 소비할 수 있게 한다.

토픽의 파티션 수는 확장성과 병렬 처리 능력에 직접적인 영향을 미치므로, 시스템 요구사항에 맞게 적절히 설정하는 것이 중요하다.

0개의 댓글