컨슈머 랙(Lag) 모니터링 애플리케이션 - 카프카 버로우(Burrow)
카프카 랙은 토픽의 가장 최신 오프셋과 컨슈머 오프셋간의 차이
kafka-client 라이브러리를 사용해서 java 또는 scala와 같은 언어를 통해 카프카 컨슈머 구현 가능
이 때 구현한 kafkaConsumer 객체를 통해 현재 랙 정보를 가져올 수 있음
랙을 실시간으로 모니터링하고 싶다면 데이터를 Elasticsearch나 InfluxDB와 같은 저장소에 넣은 뒤, Grafana 대시보드를 통해 확인할 수도 있음
컨슈머 단위에서 랙을 모니터링 한다면
- 컨슈머 단위에서 랙을 모니터링 하는 것은 아주 위험하고 운영요소가 많이 들어감
- 컨슈머 로직단에서 랙을 수집하는 것은 컨슈머 상태에 디펜던시가 걸림
- 컨슈머가 비정상적으로 종료되게 된다면 더이상 컨슈머는 랙 정보를 보낼 수 없기 때문에 더이상 랙을 측정할 수 없음
- 또한 추가적으로 컨슈머가 개발 될 때마다 해당 컨슈머에 랙 정보를 특정 저장소에 저장할 수 있도록 로직을 개발해야 함
Burrow
카프카 컨슈머 랙을 효과적으로 모니터링 할 수 있는 오픈소스 애플리케이션이 Burrow
Burrow는 Golang으로 작성 되었고 아파치 카프카 외부에서 독립적으로 작동하는 애플리케이션
Burrow의 3가지 특징
- 멀티 카프카 클러스터 지원
- 다양한 유즈케이스가 있겠지만 카프카 클러스터를 운영하는 기업이라면 대부분이 2개 이상의 카프카 클러스터를 운영하고 있을 것임
- 이렇게 카프카 클러스터가 여러개더라도 Burrow Application 1개만 실행해서 연동한다면, 카프카 클러스터들에 붙은 컨슈머의 랙을 모두 모니터링 할 수 있음
- Sliding Window를 통한 컨슈머의 status 확인
- Burrow에는 sliding window를 통해서 컨슈머의 status를 ‘ERROR’, ‘WARNING’, ‘OK’로 표현할 수 있도록 함
- WARNING : 데이터 양이 일시적으로 많아지면서 컨슈머 오프셋이 증가되고 있으면 ‘WARNING’으로 정의 됨
- ERROR : 데이터 양이 많아지고 있는데 컨슈머가 데이터를 가져가지 않으면 ‘ERROR’로 정의하여 실제로 컨슈머가 문제가 있는지 여부를 알 수 있음
- ‘OK’ : 정상
- 이렇게 status를 기반으로 효과적으로 운영에 참고 할 수 있음
- Burrow에는 sliding window를 통해서 컨슈머의 status를 ‘ERROR’, ‘WARNING’, ‘OK’로 표현할 수 있도록 함
- HTTP api 제공
- 위 정보들을 HTTP api를 통해 조회할 수 있어 다양한 추가 생태계를 구축할 수 있음
- 예를들어, HTTP api를 호출해서 response 받은 데이터를 시계열 DB와 같은 곳에 저장하는 application을 만들어 활용할 수 있음
- 위 정보들을 HTTP api를 통해 조회할 수 있어 다양한 추가 생태계를 구축할 수 있음
참고 강의 : https://www.inflearn.com/course/아파치-카프카-입문/dashboard