[Kafka] 컨슈머 랙 모니터링 애플리케이션, 카프카 버로우(Burrow)

1. Consumer 단위에서 lag 모니터링의 위험성

  • lag을 실시간으로 모니터링 하고 싶으면 데이터를 ElasticSearch나 InfluxDb와 같은 저장소에 넣은 뒤 Grafana 대시보드를 통해 확인 할 수도 있습니다.
  • 그러나 이렇게 Consumer 단위에서 lag을 모니터링 하는 것은 아주 위험하고 운영요소가 많이 들어갑니다.
    • 컨슈머 로직단에서 lag을 수집하는 것은 컨슈머 상태에 디펜던시가 걸리기 때문입니다.
    • 컨슈머가 비정상적으로 종료되게 된다면 컨슈머는 lag정보를 보낼 수 없기 때문에 lag을 측정할 수 없습니다.
    • 추가적으로 컨슈머가 개발될 때마다 해당 컨슈머에 lag정보를 특정 저장소에 저장할 수 있도록 로직을 개발해야 합니다. 컨슈머 lag을 수집할 수 없는 컨슈머라면 lag을 모니터링 할 수 없으므로 운영이 매우 까다로워지게 됩니다.

2. Burrow

  • 그래서 likedin에서 오픈소스인 Burrow를 출시하였습니다. (on GitHub)
  • 컨슈머 lag 모니터링을 도와주는 독립적인 애플리케이션입니다.

3. Burrow의 특징

  • 1.멀티 카프카 클러스터 지원
    • 대부분 2개 이상의 클러스터를 운영하고 있는데, 이렇게 클러스터가 여러개더라도 Burrow application 한개만 실행해서 연동한다면 카프카 클러스터드들에 붙은 컨슈머 lag을 모두 모니터링 할 수 있습니다.
  • 2.Sliding window를 통한 Consumer status 확인
    • 슬라이딩 윈도우를 통해서 컨슈머의 status를 ‘ERROR’, ‘WARNING’, ‘OK’로 구분합니다.
    • 데이터의 양이 일시적으로 많아져서 consumer offset이 증가되고 있으면 ‘WARNING’으로 정의됩니다.
    • 데이터의 양이 많아지고 있는데 consumer가 데이터를 가져가지 않으면 ‘ERROR’로 정의하여 실제로 컨슈머가 문제가 있는지 여부를 알 수 있습니다.
  • 3.HTTP api 제공
    • 위와 같은 정보들을 Burrow에서 정의한 HTTP api를 통해 조회 할 수 있습니다.