December-2-2024
1. 토픽과 파티션이란?
1.1 토픽(Topic)
- 토픽은 데이터를 논리적으로 구분하는 단위로, 파일 시스템의 폴더와 유사한 개념입니다.
- 프로듀서(Producer)는 데이터를 특정 토픽에 전송합니다.
- 컨슈머(Consumer)는 특정 토픽의 데이터를 구독하고 처리합니다.
- 각 토픽은 이름으로 구분되며, 한 Kafka 클러스터 내에서 고유해야 합니다.
- Kafka는 토픽 단위로 데이터를 관리하여 다양한 데이터를 독립적으로 처리할 수 있도록 합니다.
1.2 파티션(Partition)
- 파티션은 토픽을 물리적으로 나눈 단위입니다.
- 하나의 토픽은 여러 개의 파티션으로 구성될 수 있습니다.
- 각 파티션은 별도의 브로커에 분산 저장되어 Kafka의 확장성과 고가용성을 제공합니다.
- 파티션은 추가만 가능한(append-only) 파일처럼 동작합니다.
- 메시지는 항상 파티션의 맨 끝에 추가되며, 수정되지 않습니다.
- 데이터의 순서는 파티션 내에서만 보장됩니다.
2. 파티션과 오프셋
2.1 오프셋(Offset)이란?
- 오프셋은 파티션 내에서 각 메시지가 저장된 위치를 나타내는 고유 번호입니다.
- 컨슈머는 오프셋을 기준으로 메시지를 읽습니다.
- Kafka는 메시지의 순서를 보장하므로, 컨슈머는 이전에 처리한 메시지의 오프셋을 저장해 두었다가 이어서 처리할 수 있습니다.
- 메시지는 디스크에 저장되며, 설정된 보존 기간 동안 삭제되지 않습니다.
2.2 파티션 내 메시지의 순서
- 메시지는 파티션 내에서 순차적으로 추가되므로, 메시지 순서는 오프셋에 의해 결정됩니다.
- 예를 들어, 오프셋 1의 메시지가 오프셋 2의 메시지보다 먼저 처리됩니다.
- 특정 키(예: 사용자 ID)를 기반으로 메시지가 파티션에 할당될 경우, 동일한 키의 메시지는 항상 동일한 파티션에 저장됩니다.
- 이를 통해 메시지의 순서를 논리적으로 보장할 수 있습니다.
3. 토픽과 파티션의 관계
- 하나의 토픽은 여러 개의 파티션으로 구성됩니다.
- 각 파티션은 Kafka 클러스터 내의 브로커에 분산 저장됩니다.
- 브로커 간 분산을 통해 Kafka는 고가용성과 병렬 처리를 지원합니다.
3.1 토픽과 파티션의 주요 이점
- 확장성(Scalability): 파티션 수를 늘려 더 많은 데이터를 병렬로 처리할 수 있습니다.
- 고가용성(High Availability): 각 파티션은 복제(replication)를 통해 장애 복구 기능을 제공합니다.
3.2 병렬 처리와 컨슈머 그룹
- Kafka는 컨슈머 그룹을 통해 파티션 데이터를 병렬로 처리할 수 있습니다.
- 컨슈머 그룹 내의 각 컨슈머는 서로 다른 파티션의 데이터를 처리합니다.
- 컨슈머의 수가 파티션의 수보다 많아질 경우, 일부 컨슈머는 데이터를 처리하지 못할 수 있습니다.
4. 토픽과 파티션 설계 시 고려사항
- 파티션 수 설정: 적절한 파티션 수를 설정해야 병렬 처리 성능과 데이터 균형을 최적화할 수 있습니다.
- 파티션 수가 너무 적으면 처리 속도가 느려지고, 너무 많으면 관리 오버헤드가 증가할 수 있습니다.
- 복제 설정: 데이터의 가용성과 안전성을 위해 적절한 복제 수를 설정합니다.
- 키 기반 할당: 키를 기반으로 메시지를 특정 파티션에 할당하면 데이터의 순서를 보장할 수 있습니다.