작성
·
59
0
안녕하세요.
보통 RestTemplate, WebClient, FeignClient 등으로 외부 요청 등을 시도할 경우에는 timeout 설정을 중요하게 생각하는데, 카프카에서는 Connection Timeout, Read Timeout 등과 같은 셋팅 값을 몇 초로 설정해야할까요? 그리고 몇 초에 해당하는 값을 정하는 기준이 어떻게 될까요?
답변 2
0
안녕하세요 ! 질문 잘해주셨어요 !
질문해주신 내용에 대해 답변드려볼게요 ~
우선 Kafka에서는 상황에 따라 다양한 timeout 설정이 있지만
대표적으로는 아래 3가지가 실무에서 자주 사용돼요~
request.timeout.ms는 클라이언트가 요청을 보낸 후
응답까지 기다리는 최대 시간으로 권장 기본값은 30초에요 !
delivery.timeout.ms는 프로듀서가 메시지를 보내기까지 걸리는
최대 시간 (retries 포함)으로 권장 기본 값은 2분이에요 !
max.block.ms는 프로듀서의 send() 호출 시,
버퍼가 가득 찼거나 metadata를 기다릴 때의 최대 대기 시간으로 권장 기본 값은 1분이에요 !
그리고 실무에서 timeout 설정은 아래와 같은 기준들을 고려해서 결정해요 ~
[1] 시스템의 응답 SLA
예시) “1초 내에 응답해야 한다”면 request.timeout.ms를 1000~3000ms 정도 !
[2]재시도 횟수(retries)와의 조합
delivery.timeout.ms는 retries가 많을수록 길게 설정하는 편이 안정적이에요 !
예시) 5초 * 3회 retry → 최소 15,000ms 필요
간단히 요약하자면, Kafka에서 timeout 값은 시스템의 SLA, 재시도 설정,
네트워크 특성을 고려해서 보통 5초 ~ 30초 사이로 설정하는 것이 일반적이에요 !
그리고 "실제 운영 환경에서 모니터링하면서 조정"을 해요 :)
또 궁금한 점 생기시면 편하게 질문 주세요~!
0
안녕하세요, 인프런 AI 인턴입니다. 강토토님.
Kafka에서는 RestTemplate이나 WebClient, FeignClient와 같은 외부 요청 처리와는 조금 다르게, 기본적으로 데이터 전송의 신뢰성과 연속성이 중요시되며, 이로 인해 타임아웃 설정이 약간 다르게 적용됩니다.
Connection Timeout: Kafka에서는 클라이언트와 브로커 간의 연결을 설정할 때, socket.connection.timeout.ms
와 같은 파라미터를 통해 설정할 수 있습니다. 기본적으로는 30초로 설정되며, 네트워크 조건에 따라 조정할 수 있습니다.
Read Timeout: 소비자(consumer)가 데이터를 읽을 때, fetch.max.wait.ms
옵션을 사용하여 타임아웃을 설정합니다. Kafka는 데이터를 비동기적으로 수신하므로, 타임아웃 시간이 너무 짧으면 데이터 수신 실패가 발생할 수 있습니다.
Request Timeout: request.timeout.ms
는 브로커가 요청을 처리하는 데까지 걸리는 최대 시간을 설정합니다. 처리 과정에서 복제(replication) 지연이나 네트워크 대기 시간을 고려해야 하므로, 적정 수준에서 설정해야 합니다.
관련 Kafka 타임아웃 설정에 대한 더 나은 이해를 원하신다면, 다음의 유사한 질문 및 답변을 참고하실 수 있습니다:
- Kafka consumer 및 producer 설정 가이드
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.