MorrieNomad
행복한 공간 만들기
MorrieNomad
전체 방문자
오늘
어제
  • 분류 전체보기 (40)
    • Spring (5)
    • Web (0)
    • Software Architecture (0)
    • Network (0)
    • AI (0)
      • Machine Learning (0)
      • Deep Learning (0)
    • BlockChain (1)
    • DB (4)
    • Tool (5)
    • Fishing (0)
    • Seminar (1)
    • IT 잡동사니 (0)
    • SRE (0)
    • Language (1)
      • Java (0)
      • Kotlin (1)
      • Python (0)
    • OpenSource (2)
    • OS (0)
      • Linux (0)
    • Retrospective (3)
    • Article (4)
    • Study (14)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • Redis
  • 시니어개발자
  • mysql
  • cqrs
  • docker
  • Kotlin#Intellij
  • 성능 분석
  • retrospective
  • 게임 서버
  • 개발자
  • DB
  • MicroService
  • MAC
  • Circuitbreaker
  • MSA
  • datagrip
  • ngrinder
  • 수정일자
  • 생성일자
  • 회고

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
MorrieNomad

행복한 공간 만들기

[Book] Kafka IN ACTION - 05, 06장. 컨슈머: 데이터 열기, 브로커
Study

[Book] Kafka IN ACTION - 05, 06장. 컨슈머: 데이터 열기, 브로커

2024. 9. 5. 00:53

https://product.kyobobook.co.kr/detail/S000209587240

 

Kafka in Action | 딜런 스콧 - 교보문고

Kafka in Action | 아파치 카프카는 고성능 소프트웨어 버스로, 이벤트 스트리밍, 로깅, 분석 및 데이터 파이프라인 작업을 빠르게 처리하며, 아파치 카프카를 사용하면 운영 데이터 모니터링과 함께

product.kyobobook.co.kr

 

05, 06장. 컨슈머: 데이터 열기, 브로커

 

컨슈머 옵션

키 용도
bootstrap.servers 시작할 때 연결할 하나 이상의 카프카 브로커
value.deserializer 값 역직렬화에 필요
key.deserializer 키 역질렬화에 필요
group.id 컨슈머 그룹에 조인하기 위해 사용되는 ID
client.id 유저를 식별하기 위한 ID(10장 참고)
heartbeat.interval.ms 컨슈머가 그룹 코디네이터에게 핑 신호를 보낼 간격

 

코디네이트 이해

  • 오프셋 : 컨슈머가 브로커에게 보내는 로그의 인덱스 위치
  • auto.offset.reset : 컨슈머 시작 시 어느 시점의 오프셋으로 재시작 할지 정하는 옵션
    • earliest : 시작할 때 0부터
    • latest : 시작할 때 이미 있는 메시지 처리 무시(default)
    • timestamp 사용으로 오프셋 찾기 가능
  • group.id 용도
    • 다른 컨슈머와 동일한 group.id 를 사용하는 각 컨슈머는 해당 토픽의 파티션과 오프셋을 하나의 논리적 어플리케이션으로 소비하기 위한 협업으로 간주

 


 

파티션 할당 전략

  • partition.assignment.strategy : 개별 컨슈머에 어떤 파티션이 할당되는지 결정
    • Range : 단일 토픽을 사용해 파티션 수를 찾은 다음 컨슈머 수로 분할

 

  • 균등한 분할 어려움
  • RoundRobin : 파티션이 컨슈머 밑으로 균일하게 분산되는 방식

 

  • 하나씩 번갈아 가며 매핑
  • Sticky : 기존 파티션 할당을 최대한 유지, 재할당 시 유효하지 않은 모든 파티션 할당은 제거하는 방식
     

  • 라운드 로빈 할당 전략을 예로 들면, 컨슈머 2가 문제 발생시, 해당 컨슈머가 그룹을 탈퇴하면 파티션과 컨슈머의 매핑 관계를 모두 끊어버리고 다시 파티션 할당을 진행.
  • 하지만, 스티키 파티션 할당 전략에서는 컨슈머1, 3에 이미 할당된 파티션은 유지시킴.

 

  •  CooperativeSticky
    • 카프카 2.3
      • 스티키 전략과 동일한 방식이지만, 컨슈머 그룹 내부의 리밸런싱 동작이 한층 더 고도화 된 전략임. EAGER 라는 리밸런스 프로토콜을 사용해서 리밸런싱 동작 시 컨슈머에 할당된 모든 파티션을 항상 취소함. 이유는 그룹 내에서 2 이상의 컨슈머가 동일한 파티션을 소유할 수 없기 때문임. 또한, 새로운 파티션 할당 작업이 동시에 이뤄져야하므로 단순 구현을 위해서임. 하지만 이런 리밸런싱에서 모든 파티션 할당 취소는 리소스를 많이 사용하는 컨슈머 그룹에서 큰 문제 발생. 즉 다운 타임 오버헤드가 크다는 것을 의미함.
      • LAG 발생(지연)

  • 카프카 2.4 이상
    • Cooperative 프로토콜 적용. 이는 리밸런싱 동작 전에 컨슈머 상태를 유지시킴. 되도록 동작 중인 컨슈머들에게 영향을 주지 않는 상태에서 몇 차례 걸쳐 리밸런싱함. 현재 bae03, bae02 컨슈머는 각각 파티션 1, 2 를 할당받고 추가적으로 bae02 는 파티션 3을 할당받음. 여기서 bae01 이라는 새로운 컨슈머가 합류 시 리밸런싱 과정에서 한 번에 완료되지 않았지만, 현재 동작하고 있는 컨슈머에서 영향을 주지 않음.
    • CooperativeSticky 전략은 카프카 2.5 에서 안정화 되었고, 리밸런싱 다운타임을 최소화하도록 개선됨.


 

작업 위치 표시

  • enable.auto.commit : 오프셋 자동 커밋 옵션으로 default 는 true

 


 

주키퍼의 역할

  • 리더 선출하고 결정을 내리기 위해 최소한의 숫자가 필요하므로 이 클러스터는 브로커에게 정말 중요
  • 주키퍼 자체는 카프카 클러스터의 토픽과 같은 정보 보유
  • 브로커보다 먼저 실행되고 존재해야 함
  • 할당과 통지를 코디네이트해서 브로커를 도움

 

데이터 손실

  • 장애로 인해 리더 레플리카가 손실되고 unclean.leader.election.enable 값이 true 라면 컨트롤러는 레플리카가 최신이 아니라도 시스템이 계속 실행되도록 파티션 리더를 선택함. 이는 리더가 실패했을 때 살아 있는 레플리카 중 어느 것도 모든 데이터를 가지고 있지 않아서 데이터 손실 유발됨.

저작자표시 비영리 변경금지

'Study' 카테고리의 다른 글

[Book] SQL Antipatterns 데이터베이스 프로그래밍의 실수 줄이기 - 01~04 Chapter  (0) 2024.09.05
[Book] Kafka IN ACTION - 09, 10장. 관리: 도구와 로깅, 카프카 보호  (0) 2024.09.05
[Book] Kafka IN ACTION - 03장. 카프카 프로젝트 설계  (0) 2024.09.05
[Book] 아토믹 코틀린 - 7부 파워 툴  (0) 2024.09.05
[Book] 아토믹 코틀린 - 5부 객체 지향 프로그래밍 - 2  (0) 2024.09.05
    'Study' 카테고리의 다른 글
    • [Book] SQL Antipatterns 데이터베이스 프로그래밍의 실수 줄이기 - 01~04 Chapter
    • [Book] Kafka IN ACTION - 09, 10장. 관리: 도구와 로깅, 카프카 보호
    • [Book] Kafka IN ACTION - 03장. 카프카 프로젝트 설계
    • [Book] 아토믹 코틀린 - 7부 파워 툴
    MorrieNomad
    MorrieNomad

    티스토리툴바