카프카 핵심 요소 3가지

1 minute read

본문은 인프런의 [데브원영]아파치 카프카 for beginners 강의를 듣고 정리한 내용입니다.

카프카 핵심 요소 3가지

Broker

카프카 브로커는 카프카가 설치되어 있는 서버 단위를 말한다.

보통 3개 이상의 브로커로 구성해서 사용하는 것을 권장한다.

image-20210402185300996

파티션이 하나, replication 1인 topic이 존재하고 브로커가 3대라면 브로커 3대 중 1대에 해당 토픽의 정보(데이터)가 저장된다.

Replication (복제)

  • 파티션의 복제

  • 카프카 아키텍쳐의 핵심이다.

    why?

    클러스터에서 서버가 장애가 생길 때, 가용성을 보장하는 가장 좋은 방법이 복제이기 때문이다.

  • replication : 1

    • 파티션이 1개 존재

image-20210402204659020

  • replication : 2
    • 파티션이 2개 존재 - 원본 1개, 복제본 1개

image-20210402204723651

  • replication : 3
    • 파티션이 3개 존재 - 원본 1개, 복제본 2개

image-20210402204746597

  • 브로커 개수에 따라서 replication 개수가 제한된다.
    • 브로커 개수가 3이면 replication은 4가 될 수 없다.
  • Leader Partition : 원본 파티션
  • Follower Partition : 복제본 파티션
  • Leader 파티션과 Follower 파티션을 합쳐 ISR(In Sync Replica)라고 볼 수 있다.

ISR(In-Sync-Replication)

  • Leader 파티션 + Follower 파티션

image-20210402205415139

왜 replication을 사용할까?

  • partition의 고가용성을 위해 사용된다.
  1. 브로커가 3개인 카프카에서 partition 1, replication 1 인 topic의 경우

    브로커가 사용불가하게 된다면 더이상 해당 파티션을 복구할 수 없다.

  2. 브로커가 3개인 카프카에서 partition 1, replication 2 인 topic의 경우

    운영중인 브로커가 죽더라도 복제본인 Follower partition이 존재하므로 복제본으로 복구가 가능하다.

    나머지 남은 Follower partition이 Leader partition 역할을 승계하게 된다.

image-20210402210043820

Leader Partition과 Follower Partition의 역할 - ACK 옵션

프로듀서가 토픽의 파티션에 데이터를 전달할 때, 전달받는 주체가 Leader Partition이다.

프로듀서에는 ACK 라는 상세옵션이 있다.

ack를 통해 고가용성을 유지할 수 있다. 이 옵션은 partition의 replication과 관련있다.

ack는 0, 1, all 3개의 옵션 중 하나를 선택해서 사용한다.

  1. ack가 0인 경우

    프로듀서는 Leader 파티션에 데이터를 전송하고 응답값은 받지 않는다.

    ⇒ Leader 파티션에 데이터가 정상적으로 전송되었는지, 나머지 파티션에 정상적으로 복제되었는지 보장할 수 없다.

    ⇒ 속도는 빠르지만 데이터 유실 가능성이 있다.

    image-20210402210630104

  2. ack가 1인 경우

    프로듀서는 Leader 파티션에 데이터를 전송하고, Leader 파티션이 데이터를 정상적으로 받았는지 응답값을 받는다.

    하지만, 데이터가 나머지 파티션에 정상적으로 복제되었는지는 보장할 수 없다.

    ⇒ 만약, 브로커가 데이터를 받자마자 장애가 발생한다면 나머지 파티션에 데이터가 아직 전송되지 못한 상태이므로 데이터 유실 가능성이 있다.

    image-20210402210917098

  3. ack가 all인 경우

    Leader 파티션에 잘 전송되었고, Follower 파티션에 복제가 잘 이루어졌는지 응답값을 받는다.

    ⇒ 데이터 유실 가능성은 없지만, 0과 1 옵션에 비해 확인하는 부분이 많기 때문에 속도가 현저히 느리다는 단점이 있다.

    image-20210402211157547

Replication Count

replication이 고가용성을 위해서 중요한 역할을 한다면, replication이 많을수록 좋은 것 아닌가?

replication이 많아지면 그만큼 브로커의 리소스 사용량도 늘어나게 된다.

따라서 카프카에 들어오는 데이터량과 retention date(저장시간)을 잘 고려해서 replication 갯수를 정하는 것이 좋다.

  • 3개 이상의 브로커를 사용할 때, replication은 3으로 설정하는 것을 추천

image-20210402211358316