요청의 유형
- request로 구분
- Produce : 데이터를 전송하는 요청
- quantile : 분포를 특정한 백분위수로 나눈 값으로 해당 요청이 완료되는데 걸린 시간 중 중앙값을 의미함.
- quantile= 0.99 : 상위 1%의 요청시간으로 거의 모든 요청이 얼마나 빨리 처리되었는지 확인할수 있으며, 많이 사용되는 지표이다.
- Fetch-consumer : consumer가 데이터를 가져오는 요청
- Consumer
- Fetch-follower : follower가 새로운 데이터를 복제하기 위한 요청
TotalTimeMs구성
- Queue: 요청 큐에 대기한 시간 => kafka_network_requestmetrics_requestqueuetimems
- 높은 값은(대기 시간이 길어지는 현상) I/O thread 가 부족하거나 CPU 부하 예상
- Local: Leader에 의해 처리된 시간(원본) => kafka_network_requestmetrics_localtimems
- 높은 값은 disk i/o가 낮음을 의미
- Remote : follower에 의해 처리된 시간 (복제) => kafka_network_requestmetrics_remotetimems
- 원격 client에서 요청을 기다리는 시간
- 높은값은 네트워크 연결이 늦어짐
- fetch 요청에서 이미 값이 높은 것은 가져올 데이터가 많지 않음을 의미 할수 있음.
- Response 응답을 보낸 시간
- kafka_network_requestmetrics_responsesendtimems : client 요청에 응답한 시간으로 높은 값은 NW thread 또는 CPU가 부족하거나, NW 부하가 높음을 의미
- kafka_network_requestmetrics_responsequeuetimems : 요청이 응답 큐에서 대기하는 시간으로 높은 값은 NW thread가 부족함을 의미
TotalTimeMs의 Bottleneck 확인 metrics
1. responsequeuesize
- kafka_network_requestchannel_responsequeuesize
- 응답 큐에 쌓여있는 응답 메시지 수
- 지속적으로 증가한다면 브로커가 클라이언트 요청을 적시에 응답하지 못하고 있음을 알수 있음.
- requestqueuesize
- kafka_network_requestchannel_requestqueuesize
- 요청 큐의 크기
- 이상적으로 0에 근접해야함
- 순간적으로 커질수는 있지만, 지속적으로 큰 값이 오면 정상적인 처리는 아님
- networkprocessoravgidlepercent
- kafka_network_socketserver_networkprocessoravgidlepercent
- Network thread가 idle 상태인 평균시간
- 낮을수록 thread가 많은 작업을 하고 있음을 뜻함
- requesthandleravgidle_percent
- kafka_server_kafkarequesthandlerpool_requesthandleravgidle_percent
- I/O thread가 idle 상태인 평균 시간
- logflushrateandtimems
- kafka_log_logflushstats_logflushrateandtimems
- kafka log의 page cache의 flush 가 발생하는 주기
- disk 속도가 느린지, page cache가 잘못 설정되었는지 확인가능