Kafka 토픽 설정: 파티션·보존·복제의 다이얼

Kafka 토픽 설정: 파티션·보존·복제의 다이얼

토픽은 Kafka에서 이벤트가 쌓이는 기본 단위예요. 토픽별 설정은 파티션을 어떻게 나누고, 데이터를 얼마나 오래 보존하며, 얼마나 안전하게 복제할지를 결정해요. 이 페이지에서는 토픽 설정 중 꼭 알아야 할 핵심 항목을 다뤄볼게요.

출처: Apache Kafka — Topic Configs

복제와 ISR: 안전하게 쓰기 위한 문턱

min.insync.replicas는 프로듀서가 acks를 "all"(또는 "-1")로 설정했을 때, 쓰기가 성공하려면 필요한 동기화 중(in-sync) 복제본의 최소 개수예요. 리더를 포함해요. 예를 들어 복제 팩터가 3이고 ISR 집합에 세 복제본이 모두 있다면, acks=all 쓰기가 성공하려면 세 복제본이 모두 ack해야 해요. 설령 min.insync.replicas가 3보다 작더라도 그래요. 반대로 acks=all인데 현재 ISR 집합에 min.insync.replicas보다 적은 복제본만 남아 있다면, 트랜잭션이 아니면 쓰기가 실패해요.

min.insync.replicas=2

unclean.leader.election.enable은 최후의 수단으로 ISR에 없는 복제본을 리더로 선출할지 여부예요. 켜면 데이터 유실이 발생할 수 있음에도 리더 선출이 가능해져요. KRaft 모드에서 이 설정을 동적으로 켜면 반영까지 시간이 걸릴 수 있다는 점도 기억해 두세요.

보존: 데이터를 얼마나 오래 둘까

retention.ms는 로그 세그먼트를 보존할 최대 시간이에요. 시간이 지나면 오래된 세그먼트를 정리해요. 켜져 있으면 로컬 보존 설정(log.local.retention.bytes 등)이 로컬 세그먼트에도 별도로 적용될 수 있어요. log.cleanup.policy가 보존 정리를 delete(삭제)로 할지 compact(압축)로 할지 결정해요.

segment.bytes는 로그 세그먼트 하나의 최대 크기예요. 세그먼트가 이 크기에 도달하면 새 세그먼트로 롤링돼요. retention.bytes가 0으로 설정된 경우에도 새 세그먼트 롤링이 발생해요.

retention.ms=604800000
log.cleanup.policy=delete

메시지 크기 한계

max.message.bytes는 Kafka가 허용하는 가장 큰 레코드 배치 크기예요. 압축이 켜져 있으면 압축 후 크기를 기준으로 해요. 기본값은 1048588이에요. 이 값을 토픽에서 늘리면 브로커의 message.max.bytes 설정도 함께 맞춰야 해요.

더 알아보기

  • 프로듀서 쪽 acks 설정은 Producer Configs 문서를 보세요.
  • 복제·ISR의 작동 원리는 Kafka 설계 문서를 보세요.
  • 토픽 만들기 실습은 Quickstart 문서를 보세요.