max.block.ms는 Producer에서 Broker로 Message를 보낼 때 최대 연결 대기 시간입니다.
해당 시간이 지나면 Message 전송은 실패로 처리됩니다.
기본값은 60000(1분)으로 생각보다 길게 잡혀있습니다.
단위는 ms입니다.
ProducerConfig.MAX_BLOCK_MS_CONFIG = 100
max.block.ms 값이 낮으면 빠른 처리가 가능합니다.
Producer는 짧은 시간에 Message 전송 성공 여부를 판단합니다.
따라서 시스템 성능 향상에도 도움이 됩니다.
반대로 max.block.ms 값이 높으면 Message 전송 안정성이 보장됩니다.
순간적인 오류에도 1분 동안 대기할 수 있기 때문입니다.
max.block.ms 값이 낮으면 Message 유실 가능성이 높아집니다.
Producer는 짧은 시간 대기 후에 Message 전송 성공 여부를 판단하기 때문입니다.
순간적인 네트워크 지연이나 Broker 부하 등 잠깐의 이슈에도 Message가 유실될 수 있습니다.
반대로 max.block.ms 값이 높으면 Producer 시스템에 부하가 가중됩니다.
하나의 Message 성공 여부를 1분 동안 판단하게 되면, Thread 사용량은 증가될 수 밖에 없습니다.
Application 응답 시간 역시 지연될 수 있습니다.
물론 연결 장애가 나지 않으면 연결 대기 시간은 없습니다.
장애가 나는 경우에 설정된 1분 동안 대기를 하게 됩니다.
max.block.ms 시간을 설정할 때는 여러 요인을 고려해야 합니다.
+ Producer 성능이 좋다면 시간을 늘릴 수 있습니다. + Broker 성능이 좋다면 역시 시간을 늘릴 수 있습니다. + 전송 Message 크기가 작다면 시간을 줄일 수 있습니다. + Kafka Producer 기능을 단독 시스템으로 구성했다면 시간을 늘려서 전송 안정성을 확보할 수 있습니다. + 반대로 기존 시스템에 추가로 구현했다면, Message 전송 지연으로 전체 시스템 장애가 발생할 수 있으므로 시간을 줄여야 합니다. + 실시간 처리가 중요한 데이터라면 시간을 줄여야 합니다. + 실시간 보다 안정성이 중요하다면 시간을 늘려야 합니다.
max.block.ms 값은 시스템 간에 균형을 맞추는 것이 중요합니다.
Producer, Broker, Message, Network 외
다양한 시스템 조건을 고려해서 최적의 값을 찾아야 합니다.
보통 속도가 중요하면 100 ~ 500ms, 안정성이 중요하면 1000 ~ 5000ms 정도를 권장합니다.
실제 환경에서 직접 성능을 테스트 해보고 결정하는 게 가장 좋습니다.