반응형
컨슈머 랙(LAG)
컨슈머 애플리케이션을 운영하고 전체 데이터 파이프라인을 운영할 때 가장 중요한 지표 중 하나며, 토픽의 최신 오프셋(LOG-END-OFFSET)과 컨슈머 오프셋(CURRENT-OFFSET) 간의 차이를 말합니다.
- 컨슈머 랙 = 프로듀서 오프셋 - 컨슈머 오프셋
이런 차이가 발생하는 이유는?
프로듀서는 항상 최신의 offset을 가지지만 컨슈머는 애플리케이션 상황에 따라서, 혹은 처리 방식에 따라서 데이터 처리량이 늦어질 수 있기 때문입니다.
- poll() 메서드 전에 데이터를 배치로 받아오기 때문에 늦어져도 처리는 가능하지만 지연이 발생한다면 파티션 개수를 늘리고 컨슈머 개수를 늘리는게 좋다.
컨슈머 랙을 보는 방법
컨슈머 랙은 컨슈머 그룹과 토픽, 파티션별로 생성됩니다. 즉 각각의 컨슈머 그룹마다 각각의 파티션에 대한 컨슈머 랙이 각기 다르게 측정됩니다.
예시
1개의 토픽에 3개의 파티션이 있고, 1개의 컨슈머 그룹이 토픽을 구독하여 데이터를 가져가면 컨슈머 랙은 총 3개가 된다.
- 컨슈머 그룹의 개수가 많아질 수록 모니터링 해야하는 컨슈머 랙에 개수는 더 많아지게 된다.
2개의 파티션으로 구성된 토픽에 2개의 컨슈머가 각각 할당되어 데이터를 처리한다면?
- 프로듀서가 보내는 데이터양은 동일한데 파티션 1번의 컨슈머 랙이 늘어나는 상황이 발생한다면 1번 파티션에 할당된 컨슈머에 이슈가 발생한 것을 알 수 있다.
- 파티션에 커밋이 되지 않고 프로듀서가 데이터를 보내는데도 offset 레코드가 추가되지 않는 경우(파티션 0는 정상적인데 파티션 1은 데이터가 안들어오고 처리도 안되는 경우)도 알 수 있다.
컨슈머 랙 계산하는 방법
프로듀서가 보내는 데이터양 > 컨슈머의 데이터 처리량: 컨슈머 랙은 늘어난다.
프로듀서가 보내는 데이터양 < 컨슈머의 데이터 처리량: 컨슈머 랙은 줄어든다.
- 최소로 줄어들 수 있는 값은 0으로 지연이 없음을 의미한다.
컨슈머 랙 확인 방법
1. 카프카 명령어를 사용하기
kafka-consumer-groups.sh 명령어를 사용할 수 있습니다.
- 컨슈머 그룹 이름 : my-group
이 방법은 일회성에 그치고 지표를 지속적으로 기록하고 모니터링하기에는 부족하다.
- 테스트용 카프카에서 주로 사용된다.
2. metrics() 메서드 사용하기
자바 라이브러리로 컨슈머 인스턴스가 제공하는 컨슈머 랙 관련 모니터링 지표는 3가지 입니다.
- records-lag-max, records-lag, records-lag-avg이다.
KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(configs);
/* metrics() 메서드를 사용하여 컨슈머 랙 조회 */
for (Map.Entry<MetricName, ? extends Metric> entry : consumer.metrics().entrySet()) {
if ("record-lag-max".equals(entry.getKey().name())
|| "record-lags".equals(entry.getKey().name())
|| "record-lag-avg".equals(entry.getKey().name())) {
Metric metric = entry.getValue();
log.info(entry.getKey().name(), metric.metricValue());
}
}
- 한개의 토픽와 컨슈머 그룹에 대한 lag이 여러개 존재할 떄, 그 중 높은 숫자의 lag을 records-lag-max
⛔️ metrics() 문제점
- 컨슈머가 장애가 발생하거나 처리량 이슈가 발생하는 경우, 컨슈머 랙을 통해서 확인하려고 하는건데 컨슈머 자기 자신의 metrics() 메서드를 호출하기 때문에 정상 동작하지 않는 경우 모니터링할 방법이 없다.
- 모든 컨슈머 애플리케이션에 컨슈머 랙 모니터링 코드를 중복해서 작성해야 한다.
- 특정 컨슈머 그룹에 해당하는 애플리케이션이 수집하는 컨슈머 랙은 자기 자신 컨슈머 그룹에 대한 컨슈머 랙만 한정되기 때문이다.
- logstash, fluent 같은 서드 파티 애플리케이션의 컨슈머 랙 모니터링이 불가능하다.
3. 외부 모니터링 툴 사용하기
컨슈머 랙을 모니터링하는 가장 최선의 방법은 외부 모니터링 툴을 사용하는 것이다.
- 데이터 독, 컨플루언트 컨트롤 센터와 같은 카프카 클러스터 종합 모니터링 툴과 컨슈머 랙 모니터링만을 위한 오픈소스 버로우가 있다. (Kafka Lag exporter도 있음)
카프카 운영에 필요한 다양한 지표를 모니터링할 수 있고 모니터링 지표에는 컨슈머 랙도 포함되어 있기 때문에 클러스터 모니터링과 컨슈머 랙을 함께 모니터하기에 적합하다.
✅ 버로우를 통해 컨슈머 랙을 모니터링 하는 경우
버로우는 이미 지나간 컨슈머 랙을 개별적으로 모니터링하기 위해서 별개의 저장소와 대시보드를 사용하는 것이 효과적이다.
- 빠르고, 무료로 설치할 수 있는 아키텍처
반응형
'Kafka' 카테고리의 다른 글
카프카 스트림 처리 (0) | 2025.02.17 |
---|---|
Purgatory (0) | 2025.01.25 |
Kafka ISR(In-Sync-Replica) (1) | 2024.11.15 |