4.4. 처리량 및 대기 시간을 위해 소비자 최적화

클라이언트 애플리케이션이 KafkaConsumer.poll() 을 호출할 때 반환되는 메시지 수를 제어합니다.

fetch.max.wait.msfetch.min.bytes 속성을 사용하여 Kafka 브로커에서 소비자가 가져온 최소 데이터 양을 늘립니다. 시간 기반 일괄 처리는 fetch.max.wait.ms 를 사용하여 구성되며, size 기반 일괄 처리는 fetch.min.bytes 를 사용하여 구성됩니다.

소비자 또는 브로커의 CPU 사용률이 높은 경우 소비자의 요청이 너무 많기 때문일 수 있습니다. 더 적은 요청과 메시지가 더 큰 일괄 처리로 전달되도록 fetch.max.wait.msfetch.min.bytes 속성을 더 크게 조정할 수 있습니다. 처리량을 크게 조정하면 일부 대기 시간이 드는 비용이 향상됩니다. 생성되는 데이터 양이 낮은 경우 더 많이 조정할 수 있습니다.

예를 들어 fetch.max.wait.ms 를 500ms로 설정하고 fetch.min.bytes 를 16384바이트로 설정하면 Kafka가 첫 번째 임계값에 도달하면 응답하는 소비자에서 가져오기 요청을 받습니다.

반대로 fetch.max.wait.msfetch.min.bytes 속성을 낮게 조정하여 엔드 투 엔드 대기 시간을 개선할 수 있습니다.

# ...
fetch.max.wait.ms=500 1
fetch.min.bytes=16384 2
# ...
1
브로커는 가져오기 요청을 완료하기 전에 대기하는 최대 시간(밀리초)입니다. 기본값은 500 밀리초입니다.
2
최소 배치 크기(바이트)를 사용하면 최소값에 도달하거나 메시지가 fetch.max.wait.ms (가 더 빨리 제공됨)보다 오래 대기되었을 때 요청이 전송됩니다. 지연을 추가하면 일괄 처리가 배치 크기까지 메시지를 누적할 수 있습니다.

가져오기 요청 크기를 늘려 대기 시간 단축

fetch.max.bytesmax.partition.fetch.bytes 속성을 사용하여 Kafka 브로커에서 소비자가 가져온 최대 데이터 양을 늘립니다.

fetch.max.bytes 속성은 브로커에서 가져온 데이터 양에 대한 최대 제한을 한 번에 최대 바이트 단위로 설정합니다.

max.partition.fetch.bytes 는 각 파티션에 대해 반환되는 데이터의 최대 제한을 바이트 단위로 설정하며, 항상 max.message.bytes 에 대한 브로커 또는 주제 구성의 바이트 수보다 커야 합니다.

클라이언트가 사용할 수 있는 최대 메모리 양은 대략 다음과 같습니다.

NUMBER-OF-BROKERS * fetch.max.bytes and NUMBER-OF-PARTITIONS * max.partition.fetch.bytes

메모리 사용량을 수용할 수 있는 경우 이 두 속성의 값을 늘릴 수 있습니다. 각 요청에 더 많은 데이터를 허용하면 가져오기 요청이 줄어들므로 대기 시간이 향상됩니다.

# ...
fetch.max.bytes=52428800 1
max.partition.fetch.bytes=1048576 2
# ...
1
가져오기 요청에 대해 반환된 최대 데이터 양(바이트)입니다.
2
각 파티션에 대해 반환된 최대 데이터 양(바이트)입니다.