카프카/Java 기반 카프카 클라이언트 구현, Consumer 내부 메커니즘 1

Consumer Fetcher 관련 주요 파라미터와 메커니즘 이해

webmaster 2025. 10. 6. 21:17
728x90

  • fetcher는 Linked Queue 데이터를 가지고 오지만, Linked Queue에 데이터가 없을 경우 ConsumerNetworkClient에서 브로커로부터 데이터를 가지고 온다.

관련 주요 파라미터

  • fetch.min.bytes
    • fetcher가 record들을 읽어들이는 최소 bytes.
    • 브로커는 지정된 fetch.min.bytes 이상의 새로운 메시지가 쌓일 때까지 전송을 하지 않는다.(기본: 1 bytes) 
  • fetch.max.wait.ms
    • 브로커에 fetch.min.bytes 이상의 메시지가 쌓일 때까지 최대 대기 시간(기본: 500ms)
    • poll()과의 차이 : poll()는 데이터가 없는 상황에서의 대기 시간이고, 해당 파라미터는 데이터가 있는 상황에서 대기하는 것이다.
  • fetch.max.bytes
    • fetcher가 한번에 가져올 수 있는 최대 데이터 bytes.(기본 = 50MB)
  • max.partition.fetch.bytes
    • fetcher가 파티션별 한 번에 최대로 가져올 수 있는 bytes(기본 = 1MB)
  • max.poll.records
    • fetcher가 한번에 가져올 수 있는 레코드 수(기본은 500)
    • Linked Queue에서 가지고 올 수 있는 최대 개수

관련 주요 파라미터 상세 정리

fetch.min.bytes = 16384
fetch.max.wait.ms = 500
fetch.max.bytes = 52428800
max.partition.fetch.bytes=1024168 
max.poll.records = 500
  • 가져올 데이터가 한건도 없으면, poll() 인자 시간만큼 대기 후 return
  • 가져와야 할 과거 데이터가 많을 경우 max.partition.fetch.bytes로 배치 크기 설정.
    • 그렇지 않다면 fetch.min.bytes로 배치 크기 설정
  • 가장 최신의 offset 데이터를 가져오고 있다면, fetch.min.bytes만큼 가져와 리턴하고, fet.min.bytes만큼 쌓이지 않는다면 fetch.max.wait.ms만큼 기다린 후 리턴
  • 오랜 과거의 offset 데이터를 가져온다면, 최대 max.partition.fetch.bytes만큼 파티션에서 읽은 뒤 반환
  • max.partition.fetch.bytes에 도달하지 못하여도 가장 최신의 offset에 도달하면 반환
  • topic에 파티션이 많아도 가져오는 데이터 양은 fetch.max.bytes로 제한
  • fetcher가 linked Queue에서 가져오는 레코드의 개수는 max.poll.records로 제한
728x90