06. Kakfa 운영해 보기 (Kafka Burrow)

Kafka Burrow

  • 운영에 있어 Consumer-lag을 관리하고 대응 하는것은 상당히 중요하다.

    • 모니터링 하기 위해 Burrow가 필요하다. (링크드인 제작)

  • 등록된 컨슈머들의 모든 오프셋 확인 및 컨슈머의 상태 판정

  • HTTP 프로토콜 지원

  • 카프카 클러스터의 전체적인 lag 판단 가능

https://github.com/linkedin/Burrow

// Go install
brew install go

// burrow git
Clone github.com/linkedin/Burrow

go mod tidy

go install

// burrow 위치
/go/bin/Burrow

// Running Burrow
$GOPATH/bin/Burrow --config-dir /path/containing/config

MaxLag

  • 모든 컨슈머가 모니터링이 되어야 한다.

  • 컨슈머가 살아있을 때만 유효하다. (컨슈머가 넘겨주는 방식)

  • 컨슈머 렉의 객관적인 지표가 될 수 없다

  • 공식 클라이언트는 자바 뿐이다.

Work

  • Clusters

    는 주제 목록과 모든 파티션에 대한 현재 HEAD 오프셋(가장 최근 오프셋)을 주기적으로 업데이트하는 Kafka 클라이언트를 실행합니다.

  • Consumers

    는 리포지토리에서 소비자 그룹에 대한 정보를 가져옵니다. 이것은 Kafka 클러스터(__consumer_offsets 주제 사용), Zookeeper 또는 다른 저장소일 수 있습니다.

  • Storage

    모든 정보를 Burrow에 저장합니다 .

  • Evaluator (중요)

    하특정 소비자 그룹에 대한 정보를 Storage 하위 시스템에서 검색하고 해당 그룹의 상태를 계산합니다. 이것은 consumer lag evaluation rules을 따릅니다 .

    → 컨슈머의 동작 상태 파악

    Evalutaion Rules

    1. 창 내의 지연이 0이면 상태는 정상으로 간주됩니다.

    2. 소비자 오프셋이 창 동안 변경되지 않고 지연이 고정되거나 증가하는 경우 소비자는 ERROR 상태에 있고 파티션은 STALLED로 표시됩니다. 소비자는 여전히 오프셋을 커밋하고 있습니다.

    3. 소비자 오프셋이 기간 동안 증가하고 있지만 지연이 동일하게 유지되거나 오프셋의 모든 쌍 사이에서 증가하는 경우 소비자는 WARNING 상태에 있습니다. 이것은 소비자가 느리고 뒤처지고 있음을 의미합니다.

    4. 지금 시간과 가장 최근 오프셋 시간의 차이가 창에서 가장 최근 오프셋과 가장 오래된 오프셋 사이의 차이보다 크면 소비자는 ERROR 상태에 있고 파티션은 STOPPED로 표시됩니다. 그러나 파티션에 대한 소비자 오프셋과 현재 브로커 오프셋이 같은 경우 파티션에 오류가 있는 것으로 간주되지 않습니다. 소비자가 최근에 오프셋을 커밋하지 않았습니다.

    5. 지연이 -1이면 해당 파티션에 대한 브로커 오프셋이 아직 없음을 의미하는 특별한 값입니다. 이것은 Burrow가 시작되고 상태가 OK일 때만 발생합니다.

    example

    이 파티션은 규칙 #1의 평가에 따라 정상으로 간주됩니다(지연 시간은 창 중 어떤 지점에서 0이었습니다). 지연이 계속 동일하게 유지되거나 증가하는 경우 이 파티션은 오프셋 커밋 6개를 추가로 수행한 후(0이 지워지면) 경고 상태로 이동할 수 있습니다.

    1. topicA의 파티션 0에 대해 우리 그룹에는 다음과 같은 저장된 오프셋이 있습니다.

    이 파티션은 STALLED 상태로 간주되며 규칙 #2의 평가에 따라 소비자 상태는 ERROR로 표시됩니다. 소비자는 오프셋을 커밋하지만 진행되지 않고 지속되는 지연이 있습니다. 소비자가 실행 중이지만 이 파티션에서 메시지를 사용하고 있지 않습니다.

    1. topicA의 파티션 0에 대해 우리 그룹에는 다음과 같은 저장된 오프셋이 있습니다.

    이 파티션은 규칙 #3의 평가에 따라 WARNING 상태에 있는 것으로 간주됩니다. 소비자는 앞으로 나아가고 있지만 전체 창에서 지연이 증가하고 있습니다. 소비자가 뒤처지고 있다는 뜻이다. 이것은 소비자가 실패한 것이 아니라 단지 느릴 뿐이기 때문에 경고로 간주됩니다.

    1. topicA의 파티션 0에 대해 우리 그룹에는 다음과 같은 저장된 오프셋이 있습니다.

    이 파티션은 규칙 #3의 평가에 따라 OK 상태에 있는 것으로 간주됩니다. 저장된 첫 번째 오프셋과 마지막 오프셋 사이에 지연이 증가했지만 적어도 두 지점(예: W3 및 W4) 사이의 지연은 감소했습니다. 이것은 소비자가 앞으로 나아가고 있으며 기간의 일부 동안 따라잡고 있음을 의미합니다. 이 패턴은 바쁜 주제에 일반적입니다.

    5. 파티션 오프셋 정보는 위의 예 4와 정확히 동일합니다. 차이점은 현재 상태 평가를 수행할 때 T+1200이라는 점입니다.

    파티션은 이제 STOPPED 상태로 간주되고 소비자 상태는 규칙 #4의 평가에 따라 ERROR로 표시됩니다. 저장된 첫 번째 오프셋과 마지막으로 저장된 오프셋 사이의 시간 차이는 540초이고, 지금과 마지막으로 저장된 오프셋 사이의 시간 차이는 660초입니다. 소비자가 오프셋 커밋을 중지했습니다. 이는 실패했거나 중지되었음을 의미합니다.

  • Notifier

    하위 시스템 은 구성된 간격으로 소비자 그룹의 상태를 요청하고 구성된 기준을 충족하는 그룹에 대해 알림(이메일, HTTP 또는 기타 방법)을 보냅니다.

  • HTTP 서버

    하위 시스템 은 클러스터 및 소비자에 대한 정보를 가져오기 위해 Burrow에 API 인터페이스를 제공합니다. 사용할 수 있는 HTTP 요청 을 확인하세요.

실습

// topic 생성
./kafka-topics --bootstrap-server localhost:19092 --create --topic burrowtest --partitions 3 --replication-factor 3

// consumer 2개 생성 
./kafka-console-consumer --bootstrap-server localhost:19092 --topic burrowtest --group burrowgroup

// 위와 같이 test 하는 경우 컨슈머가 그룹단위로 나눠서 처리하는 것을 확인할 수 있다.

Consumer-gorup status

  • NOTFOUND - The group is not found for this cluster

  • OK - The group or partition is in a good state

  • WARN - The group or partition is in a warning state. For example, the offsets are moving but lag is increasing

  • ERR - The group is in an error state. For example, the offsets have stopped for one or more partitions but lag is non-zero

  • STOP - The partition has stopped. For example, the offsets have not been committed in a long period of time

  • STALL - The partition has stalled. For example, the offsets are being committed, but they are not changing and the lag is non-zero

Comsumer-group status api

GET /v3/kafka/(cluster)/consumer/(group)/status or GET /v3/kafka/(cluster)/consumer/(group)/lag

Last updated