메세지큐

최종 수정: 2026. 1. 23.

메세지큐

Kafka 메시지 큐 모니터링 기능을 사용하여 Producer, Consumer, 토픽, 파티션의 성능을 분석하는 방법을 안내합니다.


개요

Messaging Queues는 Apache Kafka 클러스터의 성능을 실시간으로 모니터링하고 분석하는 기능입니다. OpenTelemetry 트레이스와 메트릭을 기반으로 Producer-Consumer 간의 데이터 흐름을 시각화합니다.

주요 기능

기능 설명
Consumer Lag 분석 Consumer 그룹별 지연 현황 모니터링
Producer Latency Producer의 토픽별 지연시간 분석
Partition Latency 파티션별 처리 지연시간 분석
Drop Rate 분석 메시지 드롭율 및 에러율 추적
메트릭 대시보드 Kafka 브로커, JVM 성능 지표 시각화

Messaging Queues 접근

  1. 좌측 메뉴에서 Messaging Queues 클릭
  2. Kafka 탭 선택

화면 구성

Messaging Queues 메뉴는 4개의 주요 탭으로 구성됩니다:

설명
Kafka Kafka 개요 및 주요 지표
Kafka Detail 상세 분석 (Consumer Lag, Producer, Partition 등)
Celery Task Celery 작업 모니터링
Overview 전체 메시징 큐 개요

Consumer Lag 분석

Consumer Lag는 Producer가 토픽에 쓴 메시지와 Consumer가 읽은 메시지 간의 차이를 나타냅니다.

표시 정보

컬럼 설명
Service Name Consumer 서비스 이름
P99 Latency 99번째 백분위수 지연시간 (ms)
Error Rate 에러 비율 (%)
Throughput 초당 처리량 (msg/s)
Avg Message Size 평균 메시지 크기 (bytes)

사용되는 수식

Consumer 데이터 조회 시 다음 수식이 적용됩니다:

-- P99 지연시간 (밀리초)
quantile(0.99)(durationNano) / 1000000 AS p99

-- 에러율 (%)
COALESCE((error_count * 100.0) / total_requests, 0) AS error_rate

-- 처리량 (초당 요청 수)
COALESCE(total_requests / time_range, 0) AS throughput

-- 평균 메시지 크기
avg(attributes_number['messaging.message.body.size']) AS avg_msg_size

필터링 조건

조건 설명
kind 5 Consumer span
attribute_string_messaging$$system kafka Kafka 시스템 식별

Producer Latency 분석

Producer가 Kafka 브로커에 메시지를 전송하는 데 걸리는 시간을 분석합니다.

표시 정보

컬럼 설명
Topic 토픽 이름
Service Name Producer 서비스 이름
P99 Latency 99번째 백분위수 지연시간 (ms)
Error Rate 에러 비율 (%)
Throughput 초당 처리량 (msg/s)

사용되는 수식

-- P99 지연시간 (밀리초)
quantile(0.99)(durationNano) / 1000000 AS p99

-- 에러율 (%)
COALESCE((error_count * 100.0) / total_requests, 0) AS error_rate

-- 처리량 (초당 요청 수)
COALESCE(total_requests / time_range, 0) AS throughput

필터링 조건

조건 설명
kind 4 Producer span
attribute_string_messaging$$system kafka Kafka 시스템 식별

Partition Latency 분석

토픽의 각 파티션별 지연시간과 처리량을 분석합니다.

표시 정보

컬럼 설명
Topic 토픽 이름
Partition 파티션 ID
P99 Latency 99번째 백분위수 지연시간 (ms)
Throughput 초당 처리량 (msg/s)

사용되는 수식

-- 토픽 및 파티션 식별
attributes_string['messaging.destination.name'] AS topic
attributes_string['messaging.destination.partition.id'] AS partition

-- P99 지연시간 (밀리초)
quantile(0.99)(durationNano) / 1000000 AS p99

-- 처리량 (초당 요청 수)
COALESCE(total_requests / time_range, 0) AS throughput

Producer-Consumer 평가

Producer와 Consumer 간의 메시지 전달 시간을 분석하여 SLA 위반 여부를 확인합니다.

표시 정보

컬럼 설명
Producer Service Producer 서비스 이름
Consumer Service Consumer 서비스 이름
Total Spans 총 스팬 수
Breached Spans SLA 위반 스팬 수
Breach Percentage SLA 위반 비율 (%)
Top Trace IDs 위반 트레이스 ID 목록 (상위 10개)

사용되는 수식

-- 메시지 전달 시간 계산
time_difference = (consumer_timestamp - producer_timestamp) + producer_duration

-- SLA 위반 비율 (%)
breach_percentage = (breached_spans * 100.0) / total_spans

-- SLA 위반 스팬 수
SUM(time_difference > eval_time) AS breached_spans

네트워크 레이턴시 및 처리량

Consumer 클라이언트별 네트워크 처리량을 분석합니다.

표시 정보

컬럼 설명
Client ID Kafka 클라이언트 ID
Service Instance ID 서비스 인스턴스 식별자
Service Name 서비스 이름
Throughput 초당 처리량 (msg/s)

사용되는 수식

-- 클라이언트 식별
attributes_string['messaging.client_id'] AS client_id
resources_string['service.instance.id'] AS service_instance_id

-- 처리량 (초당 요청 수)
count(*) / time_range AS throughput

메트릭 대시보드

Kafka 브로커, Producer, Consumer의 상세 메트릭을 시각화합니다. 메트릭 대시보드는 5개 섹션으로 구성됩니다.


Broker Metrics

Kafka 브로커의 핵심 성능 지표를 모니터링합니다.

1. Broker Count

Kafka 클러스터 내 활성 브로커 수를 표시합니다.

항목
메트릭 kafka.brokers
집계 sum
설명 Total number of active brokers in the Kafka cluster.

쿼리:

A: sum(kafka.brokers)

2. Request Times

Kafka 브로커의 평균 요청 지연시간을 측정합니다.

항목
메트릭 kafka.request.time.avg
집계 avg
설명 This metric is used to measure the average latency experienced by requests across the Kafka broker.

쿼리:

A: avg(kafka.request.time.avg)

3. Producer and Fetch Request Purgatory

브로커가 수신했지만 즉시 처리할 수 없는 요청 수를 측정합니다.

항목
메트릭 kafka.purgatory.size
집계 avg
설명 Measures the number of requests that Kafka brokers have received but cannot immediately fulfill

쿼리:

A: avg(kafka.purgatory.size)

4. Broker Network Throughput

브로커에서 Consumer로 전송되는 데이터 처리량을 측정합니다.

항목
메트릭 kafka_server_brokertopicmetrics_bytesoutpersec_oneminuterate
집계 avg
설명 Helps gauge the data throughput from the Kafka broker to consumer clients, focusing on the network usage associated with serving messages to consumers.

쿼리:

A: avg(kafka_server_brokertopicmetrics_bytesoutpersec_oneminuterate)

Producer Metrics

Kafka Producer의 성능 지표를 모니터링합니다.

1. I/O Wait Time

Producer의 I/O 대기 시간을 측정하여 데이터 전송 병목 현상을 파악합니다.

항목
메트릭 kafka.producer.io_waittime_total
타입 Sum
집계 rate
설명 This metric measures the total time that producers are in an I/O wait state, indicating potential bottlenecks in data transmission from producers to Kafka brokers.

쿼리:

A: rate(kafka.producer.io_waittime_total)

2. Request and Response Rate

Producer의 요청/응답 속도를 측정합니다. 하나의 그래프에 2개의 쿼리가 포함됩니다.

항목
메트릭 A kafka.producer.request_rate
메트릭 B kafka.producer.response_rate
집계 avg
설명 Indicates how many requests the producer is sending per second, reflecting the intensity of the producer's interaction with the Kafka cluster. Also, helps Kafka administrators gauge the responsiveness of brokers to producer requests.

쿼리:

A: avg(kafka.producer.request_rate)    -- Request Rate
B: avg(kafka.producer.response_rate)   -- Response Rate

3. Average Request Latency

Producer 요청의 평균 지연시간을 측정합니다.

항목
메트릭 kafka.producer.request_latency_avg
집계 avg
설명 Helps Kafka administrators and developers understand the average latency experienced by producer requests.

쿼리:

A: avg(kafka.producer.request_latency_avg)

4. kafka.producer.byte_rate

토픽별 Producer의 데이터 출력 속도를 측정합니다.

항목
메트릭 kafka.producer.byte_rate
집계 avg
Group By topic
설명 Helps measure the data output rate from the producer, indicating the load a producer is placing on Kafka brokers.

쿼리:

A: avg(kafka.producer.byte_rate) by (topic)

5. Bytes Consumed

Consumer 그룹의 데이터 소비율을 모니터링합니다.

항목
메트릭 kafka.consumer.bytes_consumed_rate
집계 avg
설명 Helps Kafka administrators monitor the data consumption rate of a consumer group, showing how much data (in bytes) is being read from the Kafka cluster over time.

쿼리:

A: avg(kafka.consumer.bytes_consumed_rate)

Consumer Metrics

Kafka Consumer의 성능 지표를 모니터링합니다.

1. Consumer Offset

각 Consumer 그룹의 토픽 파티션별 현재 오프셋을 표시합니다.

항목
메트릭 kafka.consumer_group.offset
집계 avg
Group By group, topic, partition
설명 Current offset of each consumer group for each topic partition

쿼리:

A: avg(kafka.consumer_group.offset) by (group, topic, partition)

2. Consumer Group Members

각 Consumer 그룹의 활성 멤버 수를 표시합니다.

항목
메트릭 kafka.consumer_group.members
집계 sum
Group By group
설명 Number of active users in each group

쿼리:

A: sum(kafka.consumer_group.members) by (group)

3. Consumer Lag by Group

Consumer 그룹별 랙(지연)을 측정하여 데이터 스트림을 따라가는지 확인합니다.

항목
메트릭 kafka.consumer_group.lag
집계 avg
Group By group, topic, partition
설명 Helps Kafka administrators assess whether consumer groups are keeping up with the incoming data stream or falling behind

쿼리:

A: avg(kafka.consumer_group.lag) by (group, topic, partition)

4. Consumer Fetch Rate

Consumer가 브로커에 Fetch 요청을 보내는 속도를 측정합니다.

항목
메트릭 kafka.consumer.fetch_rate
집계 avg
Group By service.name
설명 Metric measures the rate at which fetch requests are made by a Kafka consumer to the broker, typically in requests per second.

쿼리:

A: avg(kafka.consumer.fetch_rate) by (service.name)

5. Messages Consumed

Consumer가 초당 소비하는 레코드(메시지) 수를 측정합니다.

항목
메트릭 kafka.consumer.records_consumed_rate
집계 avg
설명 Measures the rate at which a Kafka consumer is consuming records (messages) per second from Kafka brokers.

쿼리:

A: avg(kafka.consumer.records_consumed_rate)

Broker JVM Metrics

Kafka 브로커의 JVM 성능 지표를 모니터링합니다.

1. JVM GC Count

JVM에서 발생한 GC 이벤트 횟수를 추적합니다.

항목
메트릭 jvm.gc.collections.count
타입 Sum
집계 rate
설명 Tracks the total number of garbage collection (GC) events that have occurred in the Java Virtual Machine (JVM).

쿼리:

A: rate(jvm.gc.collections.count)

2. jvm.gc.collections.elapsed

GC에 소요된 총 시간(밀리초)을 측정합니다.

항목
메트릭 jvm.gc.collections.elapsed
타입 Sum
집계 rate
설명 Measures the total time (usually in milliseconds) spent on garbage collection (GC) events in the Java Virtual Machine (JVM).

쿼리:

A: rate(jvm.gc.collections.elapsed)

3. CPU Recent Utilization

JVM의 최근 CPU 사용률(%)을 측정합니다.

항목
메트릭 jvm.cpu.recent_utilization
집계 avg
설명 This metric measures the recent CPU usage by the Java Virtual Machine (JVM), typically expressed as a percentage.

쿼리:

A: avg(jvm.cpu.recent_utilization)

4. JVM memory heap

JVM에 사용 가능한 최대 힙 메모리 크기를 표시합니다.

항목
메트릭 jvm.memory.heap.max
집계 avg
설명 The metric represents the maximum amount of heap memory available to the Java Virtual Machine (JVM)

쿼리:

A: avg(jvm.memory.heap.max)

Partition Metrics

Kafka 파티션의 상태와 오프셋 정보를 모니터링합니다.

1. Partition Count per Topic

토픽별 파티션 수를 표시합니다.

항목
메트릭 kafka.topic.partitions
집계 sum
Group By topic
설명 Number of partitions for each topic

쿼리:

A: sum(kafka.topic.partitions) by (topic)

2. Current Offset ( Partition )

각 파티션의 현재 오프셋(최신 위치)을 표시합니다.

항목
메트릭 kafka.partition.current_offset
집계 avg
Group By topic, partition
설명 Current offset of each partition, showing the latest position in each partition

쿼리:

A: avg(kafka.partition.current_offset) by (topic, partition)

3. Oldest Offset (Partition)

각 파티션의 가장 오래된 오프셋을 표시하여 로그 보존 상태를 확인합니다.

항목
메트릭 kafka.partition.oldest_offset
집계 avg
Group By topic, partition
설명 Oldest offset of each partition to identify log retention and offset range.

쿼리:

A: avg(kafka.partition.oldest_offset) by (topic, partition)

4. In-Sync Replicas (ISR)

각 파티션의 동기화된 레플리카 수를 표시하여 데이터 가용성을 확인합니다.

항목
메트릭 kafka.partition.replicas_in_sync
집계 avg
Group By topic, partition
설명 Count of in-sync replicas for each partition to ensure data availability.

쿼리:

A: avg(kafka.partition.replicas_in_sync) by (topic, partition)

데이터 수집 요구사항

Kafka 모니터링을 위해 OpenTelemetry 계측이 필요합니다.

필수 트레이스 속성 (Producer)

속성 설명
messaging.system kafka
messaging.destination.name 토픽 이름
messaging.destination.partition.id 파티션 ID
span.kind PRODUCER (kind=4)

필수 트레이스 속성 (Consumer)

속성 설명
messaging.system kafka
messaging.destination.name 토픽 이름
messaging.destination.partition.id 파티션 ID
messaging.kafka.consumer.group Consumer 그룹 이름
messaging.message.body.size 메시지 크기 (선택)
messaging.client_id 클라이언트 ID (선택)
span.kind CONSUMER (kind=5)

권장 메트릭

Kafka JMX 메트릭을 OpenTelemetry로 수집:

# otel-collector-config.yaml
receivers:
  jmx:
    jar_path: /opt/opentelemetry-jmx-metrics.jar
    endpoint: localhost:1099
    target_system: kafka,jvm

온보딩 검증

Kafka 데이터 수집 상태를 확인합니다.

Producer 온보딩 체크

항목 설명
entries 트레이스 데이터 존재 여부
queue kafka 시스템 식별자 존재 여부
kind Producer span (kind=4) 존재 여부
destination messaging.destination.name 속성 존재 여부
partition messaging.destination.partition.id 속성 존재 여부

Consumer 온보딩 체크

항목 설명
entries 트레이스 데이터 존재 여부
queue kafka 시스템 식별자 존재 여부
kind Consumer span (kind=5) 존재 여부
svc service.name 존재 여부
destination messaging.destination.name 속성 존재 여부
partition messaging.destination.partition.id 속성 존재 여부
cgroup messaging.kafka.consumer.group 속성 존재 여부
bodysize messaging.message.body.size 속성 존재 여부
clientid messaging.client_id 속성 존재 여부
instanceid service.instance.id 속성 존재 여부

필터링 및 시간 범위

시간 범위 선택

  • 빠른 선택: 15분, 1시간, 6시간, 24시간, 7일
  • 커스텀: 특정 시작/종료 시간 지정

필터 옵션

필터 설명
Topic 특정 토픽 선택
Partition 특정 파티션 선택
Consumer Group 특정 Consumer 그룹 선택
Service Name 특정 서비스 선택

알림 설정

Kafka 메트릭 기반 알림을 설정합니다.

Consumer Lag 알림

조건: kafka.consumer_group.lag > 10000 (5분 이상)
알림 채널: Slack #kafka-alerts

에러율 알림

조건: error_rate > 5%
알림 채널: PagerDuty

처리량 급감 알림

조건: throughput < 정상 대비 50% 감소
알림 채널: Email

자세한 내용은 알림 문서를 참조하세요.


문제 해결

데이터가 표시되지 않음

  1. OpenTelemetry 계측이 올바르게 설정되었는지 확인
  2. messaging.system 속성이 kafka로 설정되었는지 확인
  3. 시간 범위가 올바른지 확인
  4. 온보딩 검증 실행하여 누락된 속성 확인

Consumer Lag가 높음

  1. Consumer 처리 속도 확인
  2. 파티션 수 대비 Consumer 수 확인
  3. Consumer 그룹 리밸런싱 여부 확인
  4. 네트워크 지연 확인

Producer 지연시간이 높음

  1. 브로커 응답 시간 확인
  2. 배치 설정 (batch.size, linger.ms) 검토
  3. 압축 설정 확인
  4. 네트워크 대역폭 확인

메트릭이 수집되지 않음

  1. JMX 익스포터 설정 확인
  2. OTel Collector 설정 확인:
    receivers:
      jmx:
        jar_path: /opt/opentelemetry-jmx-metrics.jar
        endpoint: localhost:1099
        target_system: kafka,jvm

다음 단계

  • 메트릭 - PromQL을 사용한 고급 쿼리
  • 대시보드 - 커스텀 Kafka 대시보드 생성
  • 알림 - Kafka 알림 설정
  • 트레이스 - 분산 트레이싱 상세 분석