Kafka 버로우

2 minute read

Burrow

버로우는 링크드인에서 개발하여 오픈소스로 공개한 컨슈머 랙 체크 툴로써 REST API를 통해 컨슈머 그룹별로 컨슈머 랙을 확인할 수 있다. 외부 모니터링 툴을 사용하면 카프카 클러스터에 연결된 모든 컨슈머, 토픽들의 랙 정보를 한번에 모니터링할 수 있다는 장점이 있다.

또한, 모니터링 툴들은 클러스터와 연동되어 컨슈머의 데이터 처리와는 별개로 지표를 수집하기 때문에 데이터를 활용하는 프로듀서나 컨슈머의 동작에 영향을 미치지 않는다는 장점도 있다.

버로우는 다수의 카프카 클러스터를 동시에 연결하여 컨슈머 랙을 확인한다. 기업환경에서는 카프카 클러스터를 2개 이상으로 구축 - 운영하는 경우가 많기 때문에 한 번의 설정으로 다수의 카프카 클러스터 컨슈머 랙을 확인할 수 있다는 장점이 있다.


REST API

요청 메서드 호출 경로 설명
GET /burrow/admin 버로우 헬스 체크
GET /v3/kafka 버로우와 연동 중인 카프카 클러스터 리스트
GET /v3/kafka/{클러스터 이름} 클러스터 정보 조회
GET /v3/kafka/{클러스터 이름}/consumer 클러스터에 존재하는 컨슈머 그룹 리스트
GET /v3/kafka/{클러스터 이름}/topic 클러스터에 존재하는 토픽 리스트
GET /v3/kafka/{클러스터 이름}/consumer/{컨슈머 그룹 이름} 컨슈머 그룹의 컨슈머 랙, 오프셋 정보 조회
GET /v3/kafka/{클러스터 이름}/consumer/{컨슈머 그룹 이름}/lag 컨슈머 그룹의 파티션 정보, 상태, 컨슈머 랙 조회
GET /v3/kafka/{클러스터 이름}/topic/{토픽 이름} 토픽 상세 조회

컨슈머 랙 이슈 판별

버로우의 기능 중 가장 돋보이는 것은 컨슈머와 파티션의 상태를 단순히 컨슈머 랙의 임계치(threshhold)로 나타내지 않았다는 점이다.

  • 특정 파티션의 컨슈머 랙이 특정 시점에 100만이 넘었다고 컨슈머 또는 파티션에 이슈가 있다고 단정 지을 수는 없다. 왜냐하면 프로듀서가 데이터를 많이 보내면 일시적으로 임계치가 넘어가는 현상이 발생할 수도 있기 때문이다.
  • 컨슈머 애플리케이션을 운영할 때 컨슈머 랙이 임계치에 도달할 때마다 알람을 받는 것은 무의미한 일이다.

컨슈머 랙 평가(Evaluation)

버로우에서는 임계치가 아닌 슬라이딩 윈도우 계산을 통해 문제가 생긴 파티션과 컨슈머의 상태를 표현한다.

이렇게 버로우에서 컨슈머 랙의 상태를 표현하는 것을 컨슈머 랙 평가라고 부른다. 컨슈머 랙과 파티션의 오프셋을 슬라이딩 윈도우로 계산하면 상태가 정해진다.

결과적으로 파티션의 상태를 OK, STALLED, STOPPED로 표현하고 컨슈머의 상태를 OK, WARNING, ERROR로 표현한다.

  1. 정상적인 경우

    Untitled

    일반적으로 컨슈머를 운영하면서 자주 볼 수 있는 그래프이다.

    • 프로듀서가 지속적으로 데이터를 추가하기 때문에 최신 오프셋은 계속해서 증가한다.
    • 컨슈머는 데이터 처리를 하면서 때때로 컨슈머 랙이 증가하지만 다시 컨슈머 랙이 0으로 줄어드는 추이를 볼 수 있다.
    • 이런 경우 컨슈머가 정상적으로 동작한다고 볼 수 있으며 버로우는 파티션은 ‘OK’, 컨슈머도 ‘OK’로 상태를 나타낸다.
  2. 컨슈머 처리량 이슈

    Untitled

    프로듀서가 추가하는 최신 오프셋에 비해 컨슈버 오프셋이 따라가지 못하는 추이를 볼 수 있다.

    • 최신 오프셋과 컨슈머 오프셋의 거리가 계속 벌어지면서 컨슈머 랙은 지속적으로 증가한다.
    • 이러한 그래프가 나오는 이유는 컨슈머의 데이터 처리량이 프로듀서가 보내는 데이터량에 비해 적기 때문이다.
    • 이 경우에 버로우는 파티션은 ‘OK’, 컨슈머는 ‘WARNING’ 상태로 나타낸다.
  3. 컨슈머 이슈

    Untitled

    최신 오프셋이 지속석으로 증가하고 있지만 컨슈머 오프셋이 멈춘 것을 확인할 수 있다.

    • 이로 인해 컨슈머 랙이 급격하게 증가하는 모습을 볼 수 있다. 컨슈머가 어떠한 이유로 데이터를 더는 가져가지 않는 것이다.
    • 이 경우에 버로우는 파티션은 ‘STALLED’, 컨슈머는 ‘ERROR’ 상태로 나타낸다.
    • 컨슈머 상태가 ‘ERROR’인 경우에는 컨슈머가 확실히 비정상 동작하고 있으므로 이메일, SMS, 슬랙 등의 알람을 받고 즉각 조치해야 한다.

컨슈머 랙 모니터링 아키텍쳐

버로우를 통해 컨슈머 랙을 모니터링할 때는 이미 지나간 컨슈머 랙을 개별적으로 모니터링하기 위해서 별개의 저장소와 대시보드를 사용하는 것이 효과적이다. 컨슈머 랙 모니터링을 위해 사용할 수 있는 저장소와 대시보드는 다양하지만 빠르게, 무료로 설치할 수 있는 아키텍쳐를 제안한다.

  • 버로우 : github.com/linkedin/Burrow

  • 텔레그래프 : github.com/influxdata/telegraf

  • 엘라스틱서치 : www.elastic.co/kr

  • 그라파나 : grafana.com

  • 설치 방법 : blog.voidmainvoid.net/297

Untitled

-->

Categories:

Updated:

Comments