반응형
Notice
Recent Posts
Recent Comments
관리 메뉴

간단한 개발관련 내용

CHAPTER7. 신뢰성 있는 데이터 전달 본문

IT 책/카프카 핵심 가이드

CHAPTER7. 신뢰성 있는 데이터 전달

vincenzo.dev.82 2024. 11. 27. 15:07
반응형

7.1 신뢰성 보장

  • 카프카는 다음과 같은 신뢰성 보장을 제공:
    1. 메시지 순서 보장: 동일한 프로듀서가 동일 파티션에 쓴 메시지는 순서를 유지.
    2. 커밋된 메시지 보존: 모든 인-싱크 레플리카에 저장된 메시지는 최소 하나의 레플리카가 살아 있는 한 유실되지 않음.
    3. 커밋된 메시지 소비: 컨슈머는 커밋된 메시지만 읽음.

 

7.2 복제

  • 카프카는 복제를 통해 데이터 지속성고가용성을 보장.
  • 인-싱크 레플리카:
    • 조건:
      1. Zookeeper와의 세션이 유지됨(기본 6초).
      2. 최근 10초 이내에 리더 레플리카와 동기화.
      3. 최신 메시지를 복제 완료.
    • 복제 지연 발생 시 아웃-오브-싱크 레플리카로 간주되어 신뢰성 저하.

 

7.3 브로커 설정

  • 복제 팩터:
    • 높은 복제 팩터 → 가용성과 신뢰성 증가, 디스크 사용량 증가.
    • 설정:
      • replication.factor (토픽 단위)
      • default.replication.factor (브로커 단위)
  • 언클린 리더 선출:
    • 설정: unclean.leader.election.enable=false (기본값).
    • 아웃-오브-싱크 레플리카를 리더로 선출하지 않아 데이터 유실 방지.
  • 최소 인-싱크 레플리카:
    • 설정: min.insync.replicas.
    • 설정 값 이하의 레플리카만 동기화되면 쓰기 불가(데이터 유실 방지).
    • 예외: NotEnoughReplicasException.
  • 디스크 플러시:
    • flush.messagesflush.ms 설정으로 디스크 플러시 빈도 제어.

 

7.4 프로듀서에서 신뢰성 보장

  • ACK 설정:
    • acks=0: 네트워크 전송 완료 시점에서 성공으로 간주(가장 빠름, 데이터 유실 가능성 높음).
    • acks=1: 리더가 데이터를 수신 후 성공 응답.
    • acks=all: 모든 인-싱크 레플리카가 데이터를 수신해야 성공 응답(가장 안전).
  • 재시도 설정:
    • 재시도 가능한 에러를 자동으로 처리.
    • 설정:
      • 재시도 횟수: retries=MAX_INT.
      • 대기 시간: delivery.timeout.ms를 충분히 큰 값으로 설정.
    • 멱등성 활성화: enable.idempotence=true중복 전송 방지.

 

7.5 컨슈머에서 신뢰성 보장

  • 컨슈머 설정:
    • group.id: 컨슈머 그룹 내에서 파티션 분배.
    • auto.offset.reset:
      • earliest: 가장 오래된 메시지부터 읽기.
      • latest: 가장 최근 메시지부터 읽기.
    • enable.auto.commit: 자동 오프셋 커밋 여부.
  • 오프셋 커밋:
    1. 메시지 처리 완료 후 오프셋 커밋.
    2. 성능과 크래시 복구 시 중복 메시지 수 간의 트레이드오프를 고려한 빈도 설정.
    3. 리밸런스 발생 시 오프셋 커밋 주의.

 

7.6 시스템 신뢰성 검증 및 모니터링

  • 설정 검증:
    • org.apache.kafka.tools의 VerifiableProducer 및 VerifiableConsumer 활용.
    • 리더 선출, 컨트롤러 선출, 롤링 재시작 등 테스트.
  • 애플리케이션 검증:
    • 브로커 연결 끊김, 디스크 풀 사용, 긴 네트워크 지연 등 상황 테스트.
  • 프로덕션 모니터링:
    • 프로듀서:
      • 에러율(error-rate), 재시도율(retry-rate).
    • 컨슈머:
      • 컨슈머 랙(consumer-lag): 메시지 처리 지연 상태 측정.

 

7.7 요약

  • 신뢰성은 단순히 카프카의 기능만으로 보장되지 않음.
  • 아키텍처, API 사용 방식, 설정을 종합적으로 설계해야 함.
  • 신뢰성 높은 시스템 구축은 애플리케이션 복잡성 증가와 디스크 사용량 증가와 같은 트레이드오프를 수반.
  • 요구 조건에 맞는 설정과 구현으로 신뢰성과 효율성 간 균형을 유지해야 함.
반응형