본문 바로가기

빅데이터/Kafka

Kafka burrow http endpoint 정리

이전 포스팅에서 Kafka burrow의 정보와 lag을 평가하는 방법에 대해 알아보았다.

이번 포스팅에서는 Burrow에서 제공하는 http endpoint를 알아보고 각 topic별 offset, lag등의 정보를 가져오는 예제를 알아보고자 한다.


Burrow Endpoint

Burrow의 http server는 kafka, zookeeper의 정보를 효과적으로 가져올 수 있다. 모든 요청은 간단한 HTTP call로 요청되며(대부분 GET request) response는 JSON기반이다.

Healthcheck

Method : GET

URL Format : /burrow/admin

설명 : burrow의 healthcheck

GOOD

List Clustsers

Method : GET

URL Format : /v3/kafka

설명 : kafka broker list

{
    "error": false,
    "message": "cluster list returned",
    "clusters": [
        "local"
    ],
    "request": {
        "url": "/v3/kafka",
        "host": "aa8a968b4d40"
    }
}

Kafka Cluster Detail

Method : GET

URL Format : /v3/kafka/(cluster)

설명 : kafka broker들의 정보를 가져온다.

{
    "error": false,
    "message": "cluster module detail returned",
    "module": {
        "class-name": "kafka",
        "servers": [
            "172.22.123.1:9092",
            "172.22.123.2:9092",
            "172.22.123.3:9092",
            "172.22.123.4:9092",
            "172.22.123.5:9092"
        ],
        "client-profile": {
            "name": "",
            "client-id": "burrow-lagchecker",
            "kafka-version": "0.8",
            "tls": null,
            "sasl": null
        },
        "topic-refresh": 60,
        "offset-refresh": 30
    },
    "request": {
        "url": "/v3/kafka/local",
        "host": "aa8a968b4d40"
    }
}

List Consumers

Method : GET

URL Format : /v3/kafka/(cluster)/consumer

설명 : 해당 kafka broker에 존재하는 consumer group 리스트를 가져온다.

{
    "error": false,
    "message": "consumer list returned",
    "consumers": [
        "test-consumers",
        "test2-consumers",
        "test-aws-ec2-consumer"
    ],
    "request": {
        "url": "/v3/kafka/local/consumer",
        "host": "aa8a968b4d40"
    }
}

List Cluster Topics

Method : GET

URL Format : /v3/kafka/(cluster)topic

설명 : 해당 kafka broker에 존재하는 topic 리스트를 가져온다.

{
    "error": false,
    "message": "consumer list returned",
    "consumers": [
        "test",
        "test2",
        "test-aws-ec2"
    ],
    "request": {
        "url": "/v3/kafka/local/consumer",
        "host": "aa8a968b4d40"
    }
}

Get Consumer Detail

Method : GET

URL Format : /v3/kafka/(cluster)/consumer/(group)

설명 : 해당 kafka broker의 consumer group에 대한 lag, offset 정보를 가져온다.

{
    "error": false,
    "message": "consumer detail returned",
    "topics": {
        "test2": [
            {
                "offsets": [
                    {
                        "offset": 942,
                        "timestamp": 1564726784140,
                        "lag": 0
                    },
                    {
                        "offset": 942,
                        "timestamp": 1564726844142,
                        "lag": 0
                    },
                    {
                        "offset": 942,
                        "timestamp": 1564726904142,
                        "lag": 0
                    },
                    {
                        "offset": 942,
                        "timestamp": 1564726964143,
                        "lag": 0
                    },
                    {
                        "offset": 942,
                        "timestamp": 1564727024144,
                        "lag": 0
                    },
                    {
                        "offset": 942,
                        "timestamp": 1564727084145,
                        "lag": 0
                    },
                    {
                        "offset": 942,
                        "timestamp": 1564727144146,
                        "lag": 0
                    },
                    {
                        "offset": 942,
                        "timestamp": 1564727204147,
                        "lag": 0
                    },
                    {
                        "offset": 942,
                        "timestamp": 1564727264149,
                        "lag": 0
                    },
                    {
                        "offset": 942,
                        "timestamp": 1564727324149,
                        "lag": 0
                    }
                ],
                "owner": "/172.22.212.50",
                "client_id": "consumer-103",
                "current-lag": 0
            },
            {
                "offsets": [
                    {
                        "offset": 918,
                        "timestamp": 1564726784087,
                        "lag": 0
                    },
                    {
                        "offset": 918,
                        "timestamp": 1564726844088,
                        "lag": 0
                    },
                    {
                        "offset": 918,
                        "timestamp": 1564726904089,
                        "lag": 0
                    },
                    {
                        "offset": 918,
                        "timestamp": 1564726964090,
                        "lag": 0
                    },
                    {
                        "offset": 918,
                        "timestamp": 1564727024091,
                        "lag": 0
                    },
                    {
                        "offset": 918,
                        "timestamp": 1564727084090,
                        "lag": 0
                    },
                    {
                        "offset": 918,
                        "timestamp": 1564727144090,
                        "lag": 0
                    },
                    {
                        "offset": 918,
                        "timestamp": 1564727204091,
                        "lag": 0
                    },
                    {
                        "offset": 918,
                        "timestamp": 1564727264091,
                        "lag": 0
                    },
                    {
                        "offset": 918,
                        "timestamp": 1564727324091,
                        "lag": 0
                    }
                ],
                "owner": "/172.22.123.123",
                "client_id": "consumer-104",
                "current-lag": 0
            }
        ]
    },
    "request": {
        "url": "/v3/kafka/local/consumer/test2-consumers",
        "host": "aa8a968b4d40"
    }
}

Consumer Group Status

Method : GET

URL Format : /v3/kafka/(cluster)/consumer/(group)/status

설명 : 해당 consumer group의 partition정보, status, total lag정보 조회. 

{
    "error": false,
    "message": "consumer status returned",
    "status": {
        "cluster": "local",
        "group": "test2-consumers",
        "status": "OK",
        "complete": 1,
        "partitions": [],
        "partition_count": 2,
        "maxlag": {
            "topic": "test2",
            "partition": 0,
            "owner": "/172.22.123.123",
            "client_id": "consumer-103",
            "status": "OK",
            "start": {
                "offset": 942,
                "timestamp": 1564726904142,
                "lag": 0
            },
            "end": {
                "offset": 942,
                "timestamp": 1564727444149,
                "lag": 0
            },
            "current_lag": 0,
            "complete": 1
        },
        "totallag": 0
    },
    "request": {
        "url": "/v3/kafka/local/consumer/test2-consumers/status",
        "host": "aa8a968b4d40"
    }
}

Status의 종류

  • NOTFOUND - Consumer group이 cluster에 존재하지 않는 경우
  • OK - Consumer group, Partition 정상작동 중
  • WARN - offset이 증가하면서 lag도 증가하는 경우(데이터가 증가하는데 consumer가 다소 따라가지 못할 경우)
  • ERR - offset이 중지된 경우이지만 lag이 0이 아닌 경우
  • STOP - offset commit이 일정시간 이상 중지된 경우
  • STALL - offset이 commit되고 있지만 lag이 0이 아닌경우

Status를 결정하는 로직 : https://blog.voidmainvoid.net/244

 

Burrow(Kafka consumer monitoring)에서 consumer의 lag을 정의하는(평가하는) 방법

이전 포스팅(https://blog.voidmainvoid.net/243)에서 Burrow가 나오게된 배경에 대해 알아보았다. 이 포스팅에서는 burrow가 lag이라고 판단하는 근거와 규칙에 대해 예제와 함께 확인해본다. Burrow - kafka con..

blog.voidmainvoid.net

 Consumer Group Lag

Method : GET

URL Format : /v3/kafka/(cluster)/consumer/(group)/lag

설명 : 해당 consumer group의 partition정보, status, total lag정보 조회

{
    "error": false,
    "message": "consumer status returned",
    "status": {
        "cluster": "local",
        "group": "test2-consumers",
        "status": "OK",
        "complete": 1,
        "partitions": [
            {
                "topic": "test2",
                "partition": 0,
                "owner": "/172.22.123.123",
                "client_id": "consumer-103",
                "status": "OK",
                "start": {
                    "offset": 942,
                    "timestamp": 1564726964143,
                    "lag": 0
                },
                "end": {
                    "offset": 942,
                    "timestamp": 1564727504151,
                    "lag": 0
                },
                "current_lag": 0,
                "complete": 1
            },
            {
                "topic": "test2",
                "partition": 1,
                "owner": "/172.22.123.123",
                "client_id": "consumer-104",
                "status": "OK",
                "start": {
                    "offset": 918,
                    "timestamp": 1564726964090,
                    "lag": 0
                },
                "end": {
                    "offset": 918,
                    "timestamp": 1564727504091,
                    "lag": 0
                },
                "current_lag": 0,
                "complete": 1
            }
        ],
        "partition_count": 2,
        "maxlag": {
            "topic": "test2",
            "partition": 0,
            "owner": "/172.22.123.123",
            "client_id": "consumer-103",
            "status": "OK",
            "start": {
                "offset": 942,
                "timestamp": 1564726964143,
                "lag": 0
            },
            "end": {
                "offset": 942,
                "timestamp": 1564727504151,
                "lag": 0
            },
            "current_lag": 0,
            "complete": 1
        },
        "totallag": 0
    },
    "request": {
        "url": "/v3/kafka/local/consumer/test2-consumers/lag",
        "host": "aa8a968b4d40"
    }
}

Remove Consumer Group

Method : GET

URL Format : /v3/kafka/(cluster)/consumer/(group)

설명 : consumer group제거 

{
  "error": false,
  "message": "consumer group removed",
  "result": {},
  "request": {
    "url": "/v3/kafka/local/consumer/test2",
    "host": "172.22.123.123",
  }
}

Get Topic Detail

 

URL Format : /v3/kafka/(cluster)/topic/(topic)

설명 : topic의 현재 offset 조회

{
    "error": false,
    "message": "topic offsets returned",
    "offsets": [
        942,
        918
    ],
    "request": {
        "url": "/v3/kafka/local/topic/test2",
        "host": "aa8a968b4d40"
    }
}