[Kafka 경험기] Data 가 1MB 초과 했을 때

Data 가 1MB 초과 했을 때

  • 프로듀싱할 데이터 사이즈가 1MB 를 초과할 경우 아래와 같은 에러가 발생.

org.apache.kafka.common.errors.RecordTooLargeException: The message is 1048694 bytes when serialized which is larger than the maximum request size you have configured with the max.request.size configuration.

에러 발생 확인…

  • 1MB 를 직접 produce 하여 에러 확인하기
char[] chars = new char[1 * 1024 * 1024]; 1MB
Arrays.fill(chars, 'a');
String data = new String(chars);
kafkaTemplate.send("test-topic", data);

관련 설정값 : max.request.size

  • Kafka 브로커로 요청 당 보낼 수 있는 최대 크기, 기본값 1MB
  • https://docs.confluent.io/platform/current/installation/configuration/producer-configs.html#producerconfigs_max.request.size

설정값 변경

  • 되도록 1MB 아래로 데이터 전송하는 것이 좋고, 사이즈를 올려서 전송을 해야할 경우 아래 옵션들도 함께 고려하여 올려야함.
    • 연관된 옵션 일부만 추가했습니다. 더 연관된 것들이 있을 수 있습니다!
  • Broker
    • message.max.bytes : 단일 요청 최대 크기, 기본값 1MB (데이터 사이즈가 커지면 처리 시간도 영향을 주기 때문)
  • Producer
    • request.timeout.ms : 요청 후 응답을 대기하는 최대 시간(데이터 사이즈가 커지면 처리 시간도 영향을 주기 때문)
  • Consumer
    • max.partition.fetch.bytes : 각 파티션 별로 최대로 반환할 수 있는 바이트 수, 기본값 1MB
    • request.timeout.ms : 요청 후 응답을 대기하는 최대시간, 기본값 30초(데이터 사이즈가 커지면 처리 시간도 영향을 주기 때문)
    • max.poll.interval.ms : 컨슈머 poll() 대기시간, 해당시간동안 poll() 이 일어나지 않을 경우 리밸런싱이 일어남.

Related Posts