kafka Consumer Lag 모니터링하기
개요
만약 Application에서 메시지를 publish 하는 양을 cosumer가 따라오지 못하는 경우 어떻게 인지할 수 있을까요?
이 경우를 인지하기 위해서 kafka Consumer Lag을 모니터링해야 합니다.
Kafka Consumer Lag 이란?
예를 들어 토픽에 파티션이 하나 있다고 가정하겠습니다.
이때 Consumer가 처리하는 속도가 Producer에서 메시지를 발행하는 속도보다 느려지는 상황에서 Producer는 4번째 메시지까지 발행했지만 Cosumer에서는 1번째 메시지를 읽고 있을 수 있습니다.
이런 경우 메시지간 Offset의 차이가 발생하게 되고 이를 Consumer Lag이라고 부릅니다.
Lag을 번역하면 "지연"이라는 의미를 가집니다.
한마디로 Producer의 속도를 Consumer가 따라가지 못해 발생하는 지연이 얼마나 발생하는지를 알 수 있습니다.
Burrow로 Consumer Lag 탐지하기
burrow와 같은 외부모니터링 tool을 사용하여 Consumer Lag을 확인할 수 있습니다.
burrow는 linkedin에서 공개한 오픈소스 모니터링 도구입니다.
burrow는 kafka 클러스터와 연동되어 lag정보를 HTTP 엔드포인트를 통해 조회할 수 있습니다.
/v3/kafka/(cluster)/consumer/(group)/lag
current_lag과 같이 현재 파티션의 lag을 가져올 수 있습니다.
burrow에서는 sliding window를 통해 consumer의 status를 ERROR, WARNING, OK로 알려줍니다.
- WARNING - 데이터가 일시적으로 증가하여 consumer offset이 증가하는 경우
- ERROR - 데이터량이 많아졌지만 consumer가 데이터를 가져가고 있지 않은 경우
Burrow의 등장배경
기존 kafka client의 records-lag-max을 활용할 수 있지만 가장 뒤처진 파티션에 대한 정보를 보여주므로 다른 파티션의 정상동작을 감지하기 힘들며, consumer가 비정상적으로 멈추는 순간 lag의 감지가 불가능합니다.
또한 순간적으로 Lag이 발생하였으나 다시 감소한 경우라면 이를 장애로 구별할 순 없습니다.
이런 것을 대응하기 위해 외부 지연 모니터링툴으로 Burrow를 활용합니다.
Burrow를 활용하여 실제 Lag이 발생할때 알람까지 받을 수 있을까?
- burrow + Telegraf + Elasticsearch + Grafana
burrow가 rest api를 통해 lag 정보를 제공합니다.
Telegraf를 활용하여 burrow의 데이터를 Elasticsearch에 넣습니다.
Elasticsearch는 kafka lag 데이터를 저장하는 역할을 수행합니다.
Grafana는 Elasticsearch의 데이터를 시각화하고 threadshold(임계값)을 설정하여 slack에 메시지를 보냅니다.
Amazon MSK 메트릭 활용하기
만약 Amazon MSK를 활용하고 있다면 CloudWatch와 통합하여 지표를 수집, 확인 및 분석할 수 있습니다.
추가비용이 발생하지만 고려해볼만한 요소 같습니다.
CloudWatch Alarm을 설정해서 경고가 발생하면 SNS, Lambda를 연동하여 Slack과 연동할 수도 있습니다.
Kafka Lag이 발생하는 원인은 무엇일까?
- consumer에 비해 producer가 순간적으로 많은 record를 보내는 이슈 (회원가입 이벤트등)
- consumer의 polling 빈도 수가 느려지는 경우 (consumer Application에 발생하는 지연)
마무리
Kafka Lag과 모니터링할 수 있는 시스템의 구축방법에 대해 알아보았고, 다음 글에서는 Consumer Lag이 발생했을 때 Consumer의 성능을 올리기 위한 방법을 알아보도록 하겠습니다.
참고자료
https://docs.aws.amazon.com/ko_kr/msk/latest/developerguide/metrics-details.html
https://blog.voidmainvoid.net/279
https://github.com/linkedin/Burrow