카프카 핵심 요소 3가지
본문은 인프런의 [데브원영]아파치 카프카 for beginners 강의를 듣고 정리한 내용입니다.
카프카 핵심 요소 3가지
Broker
카프카 브로커는 카프카가 설치되어 있는 서버 단위를 말한다.
보통 3개 이상의 브로커로 구성해서 사용하는 것을 권장한다.
파티션이 하나, replication 1인 topic이 존재하고 브로커가 3대라면 브로커 3대 중 1대에 해당 토픽의 정보(데이터)가 저장된다.
Replication (복제)
-
파티션의 복제
-
카프카 아키텍쳐의 핵심이다.
why?
클러스터에서 서버가 장애가 생길 때, 가용성을 보장하는 가장 좋은 방법이 복제이기 때문이다.
-
replication : 1
- 파티션이 1개 존재
- replication : 2
- 파티션이 2개 존재 - 원본 1개, 복제본 1개
- replication : 3
- 파티션이 3개 존재 - 원본 1개, 복제본 2개
- 브로커 개수에 따라서 replication 개수가 제한된다.
- 브로커 개수가 3이면 replication은 4가 될 수 없다.
- Leader Partition : 원본 파티션
- Follower Partition : 복제본 파티션
- Leader 파티션과 Follower 파티션을 합쳐 ISR(In Sync Replica)라고 볼 수 있다.
ISR(In-Sync-Replication)
- Leader 파티션 + Follower 파티션
왜 replication을 사용할까?
- partition의 고가용성을 위해 사용된다.
-
브로커가 3개인 카프카에서 partition 1, replication 1 인 topic의 경우
브로커가 사용불가하게 된다면 더이상 해당 파티션을 복구할 수 없다.
-
브로커가 3개인 카프카에서 partition 1, replication 2 인 topic의 경우
운영중인 브로커가 죽더라도 복제본인 Follower partition이 존재하므로 복제본으로 복구가 가능하다.
나머지 남은 Follower partition이 Leader partition 역할을 승계하게 된다.
Leader Partition과 Follower Partition의 역할 - ACK 옵션
프로듀서가 토픽의 파티션에 데이터를 전달할 때, 전달받는 주체가 Leader Partition이다.
프로듀서에는 ACK
라는 상세옵션이 있다.
ack를 통해 고가용성을 유지할 수 있다. 이 옵션은 partition의 replication과 관련있다.
ack는 0
, 1
, all
3개의 옵션 중 하나를 선택해서 사용한다.
-
ack가 0인 경우
프로듀서는 Leader 파티션에 데이터를 전송하고 응답값은 받지 않는다.
⇒ Leader 파티션에 데이터가 정상적으로 전송되었는지, 나머지 파티션에 정상적으로 복제되었는지 보장할 수 없다.
⇒ 속도는 빠르지만 데이터 유실 가능성이 있다.
-
ack가 1인 경우
프로듀서는 Leader 파티션에 데이터를 전송하고, Leader 파티션이 데이터를 정상적으로 받았는지 응답값을 받는다.
하지만, 데이터가 나머지 파티션에 정상적으로 복제되었는지는 보장할 수 없다.
⇒ 만약, 브로커가 데이터를 받자마자 장애가 발생한다면 나머지 파티션에 데이터가 아직 전송되지 못한 상태이므로 데이터 유실 가능성이 있다.
-
ack가 all인 경우
Leader 파티션에 잘 전송되었고, Follower 파티션에 복제가 잘 이루어졌는지 응답값을 받는다.
⇒ 데이터 유실 가능성은 없지만, 0과 1 옵션에 비해 확인하는 부분이 많기 때문에 속도가 현저히 느리다는 단점이 있다.
Replication Count
replication이 고가용성을 위해서 중요한 역할을 한다면, replication이 많을수록 좋은 것 아닌가?
replication이 많아지면 그만큼 브로커의 리소스 사용량도 늘어나게 된다.
따라서 카프카에 들어오는 데이터량과 retention date(저장시간)을 잘 고려해서 replication 갯수를 정하는 것이 좋다.
- 3개 이상의 브로커를 사용할 때, replication은 3으로 설정하는 것을 추천