[Kafka] 카프카 기본 개념 및 간단한 설명
(브로커, 프로듀서, 컨슈머와 관련된 내용은 아래 링크에 자세히 나와있다.)
토픽 ⊃ 파티션 ⊃ 세그먼트
1. 토픽(topic)
카프카는 메시지 피드들을 토픽으로 구분한다. 토픽은 데이터가 저장되는 공간이며, 데이터베이스의 테이블과 유사하다고 생각하면 된다. 각 토픽의 이름은 카프카 내에서 고유하다.
2. 파티션(partition)
병렬 처리 및 성능 향상을 위해 하나의 토픽을 여러 개로 나눈 것을 의미한다. 토픽을 여러 파티션으로 나누면 분산 처리가 가능하며, 나뉜 파티션 수만큼 컨슈머를 연결할 수도 있다.
3. 세그먼트(segment) 또는 로그 세그먼트(log segment)
세그먼트(로그 세그먼트)는 파티션에서 확장된 개념으로, 프로듀서가 전송한 실제 메시지가 브로커의 로컬 디스크에 저장되는 파일을 말한다. 로그 세그먼트에는 단순히 메시지(밸류)만 저장되는 것이 아니라, 메시지의 키, 오프셋, 크기에 대한 정보도 함께 저장된다.
리플리케이션
카프카에서 각 메시지들을 여러 개로 복제해서 카프카 클러스터 내에 있는 브로커들에게 분산시키는 것을 리플리케이션(replication)이라고 부른다. 이때 복제되는 것은 토픽이 아니라 토픽의 파티션이 리플리케이션되는 것이다.
리플리케이션으로 복제해둔 덕분에 한 브로커가 예상치 못한 상황에 종료되더라고 카프카는 안정적으로 서비스를 유지할 수 있게 된다. 리플리케이션 팩터 수가 클수록 안정성이 높아지긴 하지만 브로커 리소스를 많이 사용하게 되므로 상황에 따라 적절하게 조절해야 한다. 실제 운영 환경에서는 3개 이상의 브로커를 사용하는 경우라면 리플리케이션 팩터 수를 2~3개로 설정해두는 것이 적절하다.
리더, 팔로워
카프카에서는 원본 파티션을 리더(leader)라고 부르며 리플리케이션된 파티션을 팔로워(follower)라고 부른다. 흔히 마스터, 미러라고 불리는 것이 카프카에서는 각각 리더, 팔로워와 같다.
리플리케이션 팩터 수 : 2 (리더 1개, 팔로워 1개)
리플리케이션 팩터 수 : 3 (리더 1개, 팔로워 2개)
- 리더와 팔로워의 관계
- 프로듀서는 모든 리플리케이션(파티션)에 메시지를 보내는 것이 아니라, 리더에게만 메시지를 보낸다. 컨슈머도 리더에게서만 메시지를 가져온다.
- 리더의 메시지는 복제를 통해 팔로워에게 복제된다.
- 이슈 등 문제상황이 생겨서 리더가 제 역할을 하지 못하면, 기존의 팔로워가 리더로 승격된다.
- 리더와 팔로워는 ISR(In Sync Replica)라는 논리적 그룹으로 묶여 있으며, 이를 통해 복제 등 여러 동작이 이루어진다. ISR 리스트는 주키퍼에 저장되어 있다.
- 리더에포크(Leader Epoch): 파티션이 복구 동작을 할 때 메시지의 일관성을 유지하기 위해서 이용 (오프셋 등을 내부적으로 이용하여 일관성 유지)
- 컨트롤러: 파티션의 ISR 리스트에서 리더를 선출하는 브로커. 브로커가 다운되면 새로운 리더를 선출한다.
- ack & replication
프로듀서의 ack 옵션을 상황에 맞게 설정함으로써 고가용성을 유지할 수 있다. ack의 값은 0, 1, all 옵션 중 한 개를 골라서 사용하며, 파티션의 replication과 관련이 있다.
ack | 0 | 1 | all |
리더 파티션에 데이터 전송 | O | O | O |
리더 파티션에 데이터가 잘 전송되었는지에 대한 응답값을 받음 | X | O | O |
팔로워 파티션에 복제가 잘 되었는지에 대한 응답값을 받음 | X | X | O |
ack=0
프로듀서는 리더 파티션에 데이터를 전송하지만 이에 대한 응답값은 받지 않는다. 속도는 빠르지만 데이터 유실 가능성이 있다.
ack=1
프로듀서가 리더 파티션에 데이터를 전송하고, 리더가 데이터를 정상적으로 받았는지에 대한 응답값도 받는다. 단, 나머지 파티션에 복제가 잘 되었는지는 모른다. 리더 파티션이 데이터를 받자마자 브로커에 장애가 나는 경우라면 나머지 파티션에 데이터가 복제되지 않은 상태이므로 데이터 유실 가능성 있다.
ack=all
프로듀서가 리더 파티션에 데이터를 전송하고, 리더가 데이터를 정상적으로 받았는지에 대한 응답값도 받으며, 추가로 팔로워 파티션에 복제가 잘 되었는지에 대한 응답값도 받는다. 데이터 유실은 거의 없지만 속도가 현저히 느리다.
(출처: 고승범 『실전 카프카 개발부터 운영까지』)
'Kafka' 카테고리의 다른 글
Confluent Cloud Kafka란? (아파치 카프카 vs 컨플루언트 카프카) (0) | 2022.02.20 |
---|---|
[Kafka] 카프카 lag(랙) 간단한 설명 (Consumer Lag, Burrow) (0) | 2022.02.19 |
[Kafka] 카프카 기본 개념_3 (소스 커넥트, 싱크 커넥트, 커넥터) (0) | 2022.01.31 |
[Kafka] 카프카 기본 개념_1 (브로커, 프로듀서, 컨슈머, 메시지 + 주키퍼) (0) | 2022.01.31 |
[Kafka] 카프카 명령어 모음 (0) | 2022.01.30 |