ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kafka 운영] 1MB 이상의 메시지를 보낼 때 고려해볼만한 설정들
    개발자 라이프/카프카 2020. 8. 7. 00:42
    반응형

    들어가며

     카프카는 기본적으로 1MB 이상의 큰 메시지를 고려하고 만들어진 메시지 시스템이 아닙니다. 하지만 그럼에도 1MB 이상의 메시지로 파이프라인을 구성해야 할 때가 있습니다. 예로 이미지 혹은 정말 큰 JSON 메시지로 파이프라인 구성할 때가 있습니다. 이때, 프로듀서, 브로커, 컨슈머는 그 파이프라인 성격에 맞게 직접적 혹은 간접적으로 영향을 받는 설정들을 조정해줘야 합니다. 이번 글은 각 카프카 컴포넌트들이 1MB 이상의 메시지를 보낼 때 고려해야 하는 설정들을 정리했습니다.

     참고로 아래 설정들을 전부 테스트해보지 못했습니다. 몇 가지 설정은 주관적인 판단에 의해 명시되어 있습니다. 혹여나 잘못되거나 부족한 부분은 댓글로 피드백 부탁드립니다. :)

    1. 프로듀서 측

    1.1. 직접적인 영향을 미치는 설정들

    max.request.size

    • 프로듀서가 브로커에 한 번 요청할 때 보낼 수 있는 최대 크기
    • 메시지 크기가 이 설정 값보다 클 경우 프로듀싱 불가
    • 브로커의 message.max.byte 설정과 연관
    • 기본 값 : 1048576 (1MB)

    1.2. 간접적인 영향을 미치는 설정들

    buffer.memory

    • 프로듀서가 버퍼(+압축)에 사용할 총메모리의 양
    • 메시지 자체가 커지므로 버퍼의 양도 커져야 함
    • 기본 값 : 33554432 (32MB)

    request.timeout.ms

    • 프로듀서가 요청 후 브로커의 응답을 대기하는 최대 시간
    • 만약 ack=all 인 상태에서 메시지 크기가 클 경우, 브로커 내부에서 복제할 때 시간이 걸릴 수 있음
    • 기본 값 : 30000 (30초)

    2. 브로커 측

    2.1. 직접적인 영향을 미치는 설정들

    message.max.bytes

    • 레코드 배치(단일 요청)의 최대 크기
      • 토픽 별로 설정 가능 (max.message.bytes)
    • 이 값보다 클 경우 메시지를 받을 수 없음
    • 프로듀서의 max.request.size 설정과 연관
    • 기본 값 : 1048588 (1MB)

    fetch.max.bytes

    • 각 fetch 요청에 따라 반환할 최대 바이트 수
    • 이 설정보다 메시지 바이트가 클 경우 처리되지 않음
    • 기본 값 : 57671680 (55MB)

    2.2. 간접적인 영향을 미치는 설정들

    log.segment.bytes

    • 각 세그먼트 파일의 크기
    • 메시지의 크기가 커질수록 기존보다 더 많은 세그먼트가 만들어지고, 이는 파일 핸들러 자원을 더 많이 점유하게 됨
    • 기본 값 : 1073741824 (1GB)

    request.timeout.ms

    • 요청하고 응답까지 대기하는 최대 시간
    • 메시지 크기가 커질수록 대기 시간이 길어질 확률이 높아짐
    • 기본 값 : 30000 (30초)

    replica.fetch.max.bytes

    • 각 복제 과정에서 fetch 시도할 수 있는 최대 바이트 수
    • 만약 이 설정보다 메시지 크기가 크다면 별도의 조정 과정이 진행
    • 기본 값 : 1048576 (1MB)

    replica.fetch.response.max.bytes

    • 전체 fetch 응답의 최대 바이트 수
    • 만약 이 설정보다 메시지 크기가 크다면 별도의 조정 과정이 진행
    • 기본 값 : 10485760 (10MB)

    3. 컨슈머 측

    3.1. 직접적인 영향을 미치는 설정들

    없는 것으로 판단됩니다.

    3.2. 간접적인 영향을 미치는 설정들

    max.partition.fetch.bytes

    • 브로커에서 각 파티션 별로 최대로 반환할 수 있는 바이트 수
    • 만약 이 설정보다 메시지 크기가 크다면 별도의 조정 과정이 진행
    • 기본 값 : 1048576 (1MB)

    fetch.max.bytes

    • 브로커에서 최대로 반환할 수 있는 바이트 수
    • 만약 이 설정보다 메시지 크기가 크다면 별도의 조정 과정이 진행
    • 기본 값 : 52428800 (50MB)

    max.poll.interval.ms

    • poll() 메서드 처리할 때, 컨슈머 그룹에서의 최대 대기 시간
    • 메시지 크기가 커지고 처리에 시간이 길어진다면 컨슈머 그룹에서 제외되고 컨슈머 그룹 리밸런싱이 발생할 확률이 높아짐
    • 기본 값 : 300000 (5분)

    request.timeout.ms

    • 요청하고 응답까지 대기하는 최대 시간
    • 메시지 크기가 커질수록 대기 시간이 길어질 확률이 높아짐
    • 기본 값 : 30000 (30초)

     

    반응형

    댓글

Designed by Tistory.