Kafka 토픽 구성 마스터하기: 종합 가이드

복원력 있는 스트리밍 파이프라인을 구축하기 위해 Kafka 토픽 구성을 마스터하세요. 이 가이드는 파티션 수, 복제 계수, 보존 정책(시간/크기) 및 정리 전략과 같은 필수 매개변수에 대해 깊이 있게 다룹니다. 분산 이벤트 스트리밍 플랫폼에서 최적의 내구성, 병렬성 및 성능을 위해 토픽을 튜닝하기 위한 실용적인 명령어와 모범 사례를 알아보세요.

32 조회수

Kafka 주제 구성 마스터링: 종합 가이드

Apache Kafka는 실시간 데이터 파이프라인 및 스트리밍 애플리케이션 구축을 위한 사실상의 표준입니다. Kafka의 강력함의 핵심에는 데이터 스트림을 구성하고 분류하는 기본 단위 역할을 하는 주제(Topic)가 있습니다. 적절한 주제 구성은 단순한 설정 작업이 아니라, 필수적인 내구성, 내결함성 및 성능 수준을 달성하는 데 매우 중요합니다.

이 가이드에서는 Kafka 주제를 생성하거나 수정할 때 마스터해야 하는 필수 매개변수를 심층적으로 다룹니다. 파티션 수, 복제 계수, 보존 설정 및 견고하고 효율적인 분산 이벤트 스트리밍 플랫폼을 운영하는 데 필요한 기타 중요한 구성을 살펴보겠습니다.


핵심 Kafka 주제 개념 이해

주제를 구성하기 전에 주제의 동작을 정의하는 세 가지 주요 개념을 이해하는 것이 중요합니다.

  1. 파티션(Partitions): 주제는 파티션이라고 하는 레코드의 순서가 지정되고 불변하는 시퀀스로 나뉩니다. 파티션은 프로덕션 및 소비 모두에서 병렬 처리를 허용하여 처리량에 직접적인 영향을 미칩니다.
  2. 복제 계수(Replication Factor): 데이터의 내구성 및 내결함성을 결정합니다. 각 파티션 리더는 여러 개의 동기 복제본(ISR)을 가지고 있습니다.
  3. 소비자 그룹(Consumer Groups): 엄밀히 말하면 주제 설정은 아니지만, 소비자는 그룹 ID를 기반으로 주제와 상호 작용하여 순서가 지정되고 확장 가능한 소비를 보장합니다.

필수 주제 구성 매개변수

kafka-topics.sh 명령 또는 프로그래밍 방식 API를 사용하여 주제를 생성할 때 여러 매개변수가 해당 동작을 결정합니다. 가장 중요한 매개변수는 다음과 같습니다.

1. 파티션 수 (--partitions)

파티션 수는 해당 주제에 대해 Kafka가 지원할 수 있는 최대 병렬 처리 수준에 직접적인 영향을 미칩니다.

  • 영향: 파티션이 많을수록 처리량이 증가하지만 오버헤드(메타데이터 관리, 리더 선출 지연 시간)가 증가합니다. 파티션 수가 너무 적으면 처리 속도가 느릴 경우 소비자 지연이 발생할 수 있습니다.
  • 모범 사례: 예상 처리량과 소비자 인스턴스 수를 기반으로 합리적인 수로 시작하십시오. 일반적인 관행은 클러스터의 브로커 수보다 파티션 수가 훨씬 초과되지 않도록 하는 것이지만, 이는 엄격한 규칙은 아닙니다.

예제 생성 명령:

kafka-topics.sh --create --topic user_events_v1 \n  --bootstrap-server localhost:9092 \n  --partitions 6 --replication-factor 3

2. 복제 계수 (--replication-factor)

이 설정은 브로커 클러스터에서 파티션 데이터의 복사본이 몇 개 유지되는지를 정의합니다.

  • 영향: 복제 계수가 N이면 데이터가 N개의 브로커에 존재한다는 의미입니다. 이는 고가용성에 필수적입니다. 리더 브로커가 실패하면 복제본(팔로워) 중 하나가 자동으로 새 리더로 선출됩니다.
  • 권장 사항: 프로덕션 환경의 경우 최소 복제 계수 3을 강력히 권장합니다(브로커 하나가 실패해도 데이터 가용성을 유지할 수 있음).

3. 보존 정책

보존 정책은 Kafka가 삭제하기 전에 파티션에서 메시지를 얼마나 오래 유지할지 제어합니다. 이는 스토리지 관리 및 규정 준수에 중요합니다.

시간 기반 보존 (log.retention.ms)

이 매개변수는 크기에 관계없이 메시지가 유지되는 시간(밀리초)을 지정합니다.

  • 기본값: 604800000밀리초 (7일).
  • 구성 예제 (24시간으로 설정):
kafka-configs.sh --alter --topic user_events_v1 \n  --bootstrap-server localhost:9092 \n  --add-config log.retention.ms=86400000

크기 기반 보존 (log.retention.bytes)

이는 오래된 세그먼트가 삭제 대상으로 지정되기 전에 파티션의 모든 로그 세그먼트에 대한 최대 총 크기(바이트)를 지정합니다.

  • 참고: 보존은 충족되는 첫 번째 조건(시간 또는 크기)에 따라 적용됩니다. log.retention.ms가 7일로 설정되고 log.retention.bytes가 1GB로 설정되면, 시간 제한에 도달하거나 크기 제한을 초과하는 즉시 데이터가 삭제됩니다.

4. 정리 정책 (cleanup.policy)

이는 데이터가 위의 보존 한계를 초과할 때 발생하는 작업을 정의합니다.

  • delete (기본값): 오래된 세그먼트가 삭제됩니다.
  • compact: 이 정책은 상태 저장 스트림(예: 사용자 프로필 또는 구성 설정)에 사용됩니다. Kafka는 각 키에 대해 최신 메시지만 유지하고 동일한 키를 가진 이전 메시지를 덮어씁니다. 이는 변경 데이터 캡처(CDC) 로그에 일반적입니다.

고급 구성 시나리오

Kafka는 프로듀서와 소비자가 주제와 상호 작용하는 방식을 세밀하게 제어할 수 있습니다.

세그먼트 크기 (log.segment.bytes)

Kafka는 대규모 파티션을 더 작은 로그 세그먼트 파일로 분할합니다. 이 설정은 이러한 세그먼트의 크기를 제어합니다(기본값은 일반적으로 1GB).

  • 영향: 세그먼트가 작을수록 로그 정리 및 세그먼트 전환이 빨라지지만 메타데이터 오버헤드가 증가합니다.

동기 복제본(ISR) 설정

이 설정은 쓰기가 성공한 것으로 간주되는 데 필요한 승인의 엄격성을 제어하며, 내구성 보장에 직접적인 영향을 미칩니다.

최소 동기 복제본 수 (min.insync.replicas)

이것은 프로듀서가 성공 확인을 받기 위해 인식해야 하는 최소 복제본 수입니다. 이 설정은 항상 replication.factor보다 작거나 같아야 합니다.

  • 경고: 복제 계수가 3인 경우 min.insync.replicas를 1로 설정하면 두 개의 브로커가 다운되어도 쓰기가 성공하므로 데이터 손실 위험이 심각하게 발생합니다. 2로 설정하면(3의 계수에 대한 최소값) 균형을 제공합니다.

RF=3인 주제에 min.insync.replicas를 2로 설정:

kafka-configs.sh --alter --topic critical_data \n  --bootstrap-server localhost:9092 \n  --add-config min.insync.replicas=2

압축 유형 (compression.type)

프로듀서는 브로커로 보내기 전에 메시지를 압축하여 약간의 CPU 사용량(프로듀서 및 소비자 모두)을 희생하는 대신 네트워크 대역폭과 디스크 사용량을 줄일 수 있습니다.

  • 일반적인 값: none, gzip, snappy, lz4, zstd.
  • 권장 사항: lz4 또는 snappy는 압축률과 CPU 오버헤드 간의 최상의 균형을 제공하는 경우가 많습니다.

기존 주제 구성 수정

Kafka는 브로커를 다시 시작하거나 주제를 중지하지 않고도 대부분의 매개변수에 대해 동적 구성 변경을 허용합니다.

kafka-configs.sh 도구를 사용하여 구성을 변경합니다.

# 예제: 기존 주제의 보존 시간 늘리기
kafka-configs.sh --alter --topic existing_topic \n  --bootstrap-server localhost:9092 \n  --add-config log.retention.ms=1209600000  # 14일

중요 고려 사항: 파티션 수 및 복제 계수와 같은 일부 기본 속성은 토픽 생성 후 변경할 수 없습니다 (--alter --partitions 플래그를 사용하여 파티션 수를 늘릴 수는 있지만 줄일 수는 없습니다).

요약 및 모범 사례

효과적인 Kafka 주제 구성은 가용성 및 처리량에 대한 애플리케이션 요구 사항에 맞춰진 반복적인 프로세스입니다. 프로덕션 환경에서는 항상 내구성을 우선시하십시오.

구성 항목 프로덕션 권장 사항 이유?
복제 계수 3 브로커 하나 실패를 허용합니다.
최소 동기 복제본 수 복제 계수 - 1 쓰기 내구성에 대한 과반수 합의를 보장합니다.
보존 정책 법적/비즈니스 요구 사항에 따라 스토리지 고갈을 방지합니다.
압축 LZ4 또는 Snappy I/O 절감과 CPU 비용의 균형을 맞춥니다.

이러한 매개변수를 숙달하면 Kafka 클러스터가 예상 부하 조건에서 데이터를 안정적으로 처리하고 최적으로 성능을 발휘하도록 보장할 수 있습니다.