setting kafka producer
Kafka Producer의 설정값에 대한 설명입니다.
batch.size
batch.size는 한 배치로 전송할 수 있는 메시지의 최대 크기를 바이트(byte) 단위로 설정합니다. 프로듀서는 동일한 파티션으로 전송할 메시지를 배치로 묶어 전송하며, 이 값이 그 배치의 상한선입니다.
배치가 설정된 크기에 도달하면 프로듀서는 네트워크로 해당 배치를 전송합니다. 단, linger.ms 값에 따라 배치 크기가 설정값에 도달하지 않아도 전송될 수 있습니다.
사용 사례:
높은 처리량을 원하는 경우 batch.size를 크게 설정해 한 번에 많은 메시지를 배치로 전송할 수 있으며, 메모리 제약이 있을 때는 이 값을 줄여 메모리 사용량을 제어할 수 있습니다.
기본값: 16KB
16384 바이트(16KB). 기본적으로 한 배치에 최대 16KB의 데이터를 담아 전송합니다.
max.in.flight.requests.per.connection
max.in.flight.requests.per.connection은 한 커넥션에서 동시에 전송할 수 있는 최대 요청 수를 설정하는 옵션입니다.
이 설정은 프로듀서가 서버로 여러 개의 메시지를 동시에 보내는 요청을 관리하는데, 네트워크 지연을 줄이고 성능을 최적화하는 데 기여합니다.
높은 값으로 설정하면 더 많은 요청이 동시에 처리되지만, 메시지의 순서가 보장되지 않을 수 있습니다.
너무 낮게 설정하면 성능이 저하될 수 있지만, 메시지 순서를 보장해야 하는 경우에는 낮은 값이 필요할 수 있습니다.
사용 사례:
메시지 순서 보장이 중요한 경우에는 이 값을 1로 설정해 동시에 하나의 요청만 전송하게 하고, 성능을 높이기 위해 병렬 요청을 허용하려면 이 값을 높일 수 있습니다.
기본값: 5
기본적으로 하나의 커넥션에서 동시에 최대 5개의 요청을 보낼 수 있습니다.
buffer.memory
buffer.memory는 프로듀서가 전송하기 전에 메시지를 보관할 수 있는 내부 버퍼의 총 크기를 바이트 단위로 설정합니다.
메시지는 프로듀서가 브로커에 전송하기 전에 메모리에 저장되며, 이 버퍼가 가득 차면 추가적인 전송 요청은 max.block.ms 설정에 따라 블로킹될 수 있습니다.
이 값이 클수록 더 많은 메시지를 메모리에 저장할 수 있으므로, 높은 처리량을 요구하는 상황에서 유용합니다. 반면, 너무 큰 값은 시스템 메모리 사용량을 증가시킬 수 있습니다.
사용 사례:
대용량 메시지를 전송하는 경우 이 값을 늘려 프로듀서가 더 많은 메시지를 버퍼링할 수 있게 하고, 메모리 제약이 있을 때는 이 값을 줄여 메모리 사용량을 제한할 수 있습니다.
기본값: 32MB
33554432 바이트(32MB). 기본적으로 프로듀서는 최대 32MB 크기의 데이터를 메모리에 보관할 수 있습니다.
delivery.timeout.ms
delivery.timeout.ms는 프로듀서가 메시지를 성공적으로 전송하는 데 걸리는 최대 시간을 정의합니다.
이 시간이 초과되면 Kafka는 메시지를 포기하고 TimeoutException을 발생시킵니다.
이 설정은 메시지가 배치되고, 전송 재시도를 포함한 모든 과정을 감안하여 전체 전송 시간에 대한 상한선을 설정합니다.
재시도(retries), 네트워크 요청 지연(request.timeout.ms), 배치 대기 시간(linger.ms) 등이 이 시간 안에 포함되어야 합니다.
기본값:
120000 ms (2분). 기본적으로, 프로듀서는 최대 2분 동안 메시지 전송을 시도하며, 이 시간이 지나면 전송이 실패합니다.
linger.ms
linger.ms는 프로듀서가 메시지를 전송하기 전에 기다리는 시간(밀리초 단위)을 설정합니다. 이 값은 메시지를 배치로 묶어 보낼 때 사용됩니다.
프로듀서는 메시지를 즉시 전송하지 않고, 대기 시간을 두어 더 많은 메시지를 한 번에 배치로 묶어 보낼 수 있습니다. 이로 인해 네트워크 효율성을 높이고 처리량을 증가시킬 수 있습니다.
만약 linger.ms가 0으로 설정되어 있으면, 프로듀서는 메시지가 도착하자마자 즉시 전송합니다. 반면, linger.ms가 0보다 크면, 프로듀서는 지정된 시간 동안 메시지를 기다려 더 많은 메시지를 배치에 포함시킨 후 전송합니다.
사용 사례:
높은 처리량을 요구하는 시스템에서는 이 값을 늘려, 더 많은 메시지를 한 번에 묶어 전송해 네트워크 오버헤드를 줄일 수 있습니다. 저지연 처리가 중요한 경우에는 이 값을 0 또는 매우 낮게 설정하여 메시지를 즉시 전송하게 할 수 있습니다.
기본값: 0
0 ms. 기본적으로 프로듀서는 메시지가 도착하면 즉시 전송합니다. 이 경우 배치 효율성은 낮을 수 있지만, 전송 지연이 거의 없습니다. 작동 원리: linger.ms는 배치 전송을 최적화하는 설정입니다. 이 설정과 함께 batch.size도 작동하여, 배치 크기가 가득 차거나 linger.ms 시간이 만료되었을 때 배치가 전송됩니다. 프로듀서가 효율적으로 동작하기 위해서는 linger.ms와 batch.size 간의 균형을 맞추는 것이 중요합니다.
retry.backoff.ms
etry.backoff.ms는 메시지 전송이 실패한 후, 재시도를 하기 전에 기다리는 시간(밀리초)을 설정합니다.
프로듀서가 네트워크 오류, 브로커 장애 등의 이유로 메시지 전송에 실패할 경우, 이 설정에 따라 일정 시간 대기 후 다시 전송을 시도합니다.
재시도 간격이 너무 짧으면 시스템에 부담을 줄 수 있으며, 너무 길면 지연이 증가할 수 있습니다.
기본값: 100 ms
100 ms. 기본적으로 전송 실패 후 100ms를 기다렸다가 재시도합니다.
request.timeout.ms
설명:
request.timeout.ms는 프로듀서가 브로커로부터 응답을 기다리는 최대 시간(밀리초)을 정의합니다. 프로듀서가 메시지를 브로커에 전송하고 응답을 기다리다가, 이 시간이 지나면 해당 요청은 실패로 간주됩니다. 메시지가 전송되었지만 브로커의 응답이 늦어질 경우, 이 시간이 지나면 재시도 혹은 실패 처리가 됩니다. 기본값:
30000 ms (30초). 기본적으로 30초 동안 브로커로부터 응답을 기다립니다. delivery.timeout.ms와 다른 항목들과의 관계 delivery.timeout.ms는 메시지를 성공적으로 브로커에 전송하는 데 걸릴 수 있는 전체 시간을 제한하는 설정입니다. 이 시간은 linger.ms, retry.backoff.ms, request.timeout.ms와 연관되어 있습니다. 아래는 각 항목이 delivery.timeout.ms에 미치는 영향에 대한 설명입니다:
request.timeout.ms:
프로듀서가 브로커의 응답을 기다리는 최대 시간입니다. 응답을 기다리는 시간이 길어질수록 delivery.timeout.ms에 근접할 수 있으며, 이 시간이 초과되면 메시지 전송이 실패로 처리됩니다.
요약: delivery.timeout.ms는 메시지가 성공적으로 브로커에 도달하는 데 걸리는 전체 시간을 제한하는 설정입니다. 이 시간 안에 메시지는 배치로 묶이고(linger.ms), 브로커 응답을 기다리며(request.timeout.ms), 실패 시 재시도(retry.backoff.ms)를 거칠 수 있습니다. delivery.timeout.ms는 이 모든 과정이 포함된 상한선이며, 이 시간이 초과되면 메시지 전송이 실패로 간주됩니다.
댓글남기기