컨슈머 랙(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를 기반으로 효과적으로 운영에 참고 할 수 있음
  • HTTP api 제공
    • 위 정보들을 HTTP api를 통해 조회할 수 있어 다양한 추가 생태계를 구축할 수 있음
      • 예를들어, HTTP api를 호출해서 response 받은 데이터를 시계열 DB와 같은 곳에 저장하는 application을 만들어 활용할 수 있음

참고 강의 : https://www.inflearn.com/course/아파치-카프카-입문/dashboard