Infra/Kafka

[Kafka] Broker

yejiji 2023. 1. 21. 20:42

브로커란 ?

  • 카프카가 설치되어 있는 서버 단위
  • 보통 3개 이상의 broker로 구성하여 사용하는 것을 권장

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

replication

replication이란, partition의 복제를 뜻함

  • replication이 1이라면 partition은 1개만 존재
  • replication이 2이라면 partition은 원본 1개와 복제본 1개 존재
  • replication이 3이라면 partition은 원본 1개와 본제본 2개 존재

다만, 브로커 개수에 따라서 replication 개수가 제한됨 ⇒ 브로커의 개수보다 클 수 없음 !

 

사용 이유

⇒ partition의 고가용성을 위해서

ex) 브로커가 3개인 카프카에서 replication이 1개, partition이 1개인 topic이 존재하는 경우

  • 갑자기 브로커 하나가 사용 불가해진다면 ? 더 이상 해당 파티션은 복구할 수 없는 상황이 발생함
  • 만약 replication이 2개라면 ? 남은 1개의 팔로워 파티션이 리더 파티션 역할을 승계할 수 있음

 

[ partition ]

  • 원본 파티션  (Leader partition)
    • producer로부터 데이터를 전달받아 저장하는 작업 수행
    • 프로듀셔가 토픽의 파티션에 데이터를 전달할 때, 전달받는 주체
  • 본제본 파티션 (Follower partition)
    • 복제 계수를 맞추기 위해 리더 파티션으로부터 데이터를 전달받아 동기화

단점

  • 리소스 사용량 증가
    • replication이 늘어난다면 그만큼 브로커의 리소스 사용량도 늘어나게 됨
  • 카프카에 들어오는 데이터 양과 retention date (저장시간) 생각해서 정하는 것이 좋음
    • 3개 이상의 브로커를 사용할 때, replication은 3개로 설정하는 것 추천

ISR

리더 파티션, 팔로워 파티션이 모두 싱크된 상태를 ISR (In Sync Replica) 라고 한다.

ISR 아닌 상태 / ISR 상태   

* ISR 관련 설정 

리더 파티션에 문제가 생기는 경우, 새로운 리더를 선출해야 하는데 ISR 상태의 파티션이 리더가 될지 아닌 파티션도 리더 파티션이 될 수 있는지에 대한 옵션을 설정할 수 있다.

 

unclean.leader.election.enable

  • false로 설정하는 경우
    • ISR이 아닌 팔로워 파티션은 리더가 될 수 없음
    • ISR이 전혀 이루어지지 않은 경우에는 리더 파티션이 포함된 브로커가 다시 정상 동작할 때까지 기다림
  • true로 설정하는 경우
    • ISR이 아닌 팔로워 파티션도 리더 가능
    • 이 경우 데이터 일부 유실 가능성있으나 서비스에는 영향 미치지 않음

ack

  • 프로듀서에 있는 상세 옵션으로 해당 옵션을 통해 고가용성 유지
  • partition의 replication 관련 옵션
  • 옵션 설정 (0 / 1 / all)
    • 0 : 프로듀서는 리더 파티션에 데이터를 전송하고 응답값을 받지 않음
      • 리더 파티션에 데이터가 정상적으로 전송되었는지 알 수 없음
      • 나머지 파티션에 정상적으로 복제되었는지 알 수 없고 보장할 수 없음
      • 속도는 빠르지만 데이터 유실 가능성 존재
    • 1 : 리더 파티션에 데이터를 전송하고 정상적으로 받았는지 응답값 받음
      • 나머지 partition이 복제되었는지는 알 수 없음
      • 만약, 리더 파티션이 데이터를 받은 즉시 브로커가 장애가 난다면 나머지 파티션에 데이터가 미처 전송되지 못한 상태이므로 데이터 유실 가능성 존재 (ack=0과 같음)
    • all(-1) : 데이터를 전송하고 리더와 팔로워 파티션까지 받았는지 정상적으로 받았는지 응답값 받음
      • 리더 파티션에 데이터를 보낸 후 팔로워 파티션에 데이터가 잘 저장됐는지 확인하는 절차 존재
      • 데이터 손실 확률 없으나 속도가 현저히 느림