Kafka 준실시간성 보장을 위한 Kafka lag 모니터링

김기현·2024년 11월 25일
2

Kafka 준실시간성 보장을 위한 Kafka Metric 모니터링 및 Lag 관리 방법

들어가며

실시간 데이터 처리를 위해 널리 사용되는 Apache Kafka는 대용량 데이터를 효율적으로 처리할 수 있는 분산 메시징 시스템입니다. 그러나 시스템의 효율성을 유지하고 준실시간성을 보장하려면 지속적인 Metric 모니터링과 적절한 조치가 필요합니다. 특히 Consumer Lag은 시스템의 성능과 실시간성을 직접적으로 나타내는 중요한 지표입니다.

이번 글에서는 Kafka의 주요 Metric인 Consumer Lag에 대해 자세히 알아보고, Lag 관리의 핵심인 파티션과 컨슈머의 1:1 매핑에 대해 설명하겠습니다. 또한, Kafka Lag이 증가했을 때 Concurrent Consume을 도입하여 어떻게 개선했는지 공유하고자 합니다.

Kafka Consumer Lag 이해하기

Consumer Lag이란?

Consumer Lag은 Kafka에서 ConsumerProducer로부터 받아야 할 메시지 중 아직 처리되지 않은 메시지의 수를 나타냅니다. 이는 특정 파티션의 최신 오프셋(latest offset)과 Consumer의 현재 오프셋(current offset) 간의 차이로 계산됩니다.

  • Latest Offset: Producer가 가장 마지막에 기록한 메시지의 오프셋
  • Current Offset: Consumer가 마지막으로 커밋한 오프셋

Lag는 다음과 같이 계산됩니다:

Consumer Lag = Latest Offset - Current Offset

Lag이 발생하는 이유

  • 처리 속도 불일치: Producer의 메시지 생산 속도가 Consumer의 처리 속도보다 빠를 때
  • 리소스 제한: Consumer 애플리케이션의 CPU, 메모리 등이 부족할 때
  • 파티션 불균형: 특정 파티션에 데이터가 집중되어 있을 때
  • 파티션 수와 Consumer 수의 불균형: Consumer 수에 비해 파티션 수가 적을 때

Kafka Metric 모니터링 방법

모니터링해야 할 주요 Metric

  1. Consumer Lag (Lag Latency)

    • 메시지가 생산된 시점부터 Consumer에 의해 처리될 때까지의 지연 시간
    • Lag가 증가하면 메시지 처리 지연이 발생하며, 실시간성이 저하됩니다.
  2. Lag Sum Offset

    • 모든 파티션에서의 Lag의 합계
    • 시스템 전체에서 처리되지 않은 메시지의 총량을 파악할 수 있습니다.

모니터링 도구 활용

  • Prometheus & Grafana

    • Metric 수집과 시각화에 널리 사용되며, 커스텀 대시보드를 구성할 수 있습니다.
  • consumer lag 관련 모니터링

Consumer Lag 관리 전략

파티션과 컨슈머의 1:1 매핑

Kafka에서 파티션과 Consumer는 1:1 매핑이 될 때 최적의 성능을 발휘합니다.

  • 파티션은 Kafka의 병렬 처리를 가능하게 하는 기본 단위입니다.
  • Consumer 그룹 내에서 각 Consumer는 하나의 파티션을 할당받아 메시지를 처리합니다.
  • 그러나 한 파티션은 동시에 둘 이상의 Consumer에게 할당될 수 없지만, 반대로 한 Consumer는 여러 파티션을 처리할 수 있습니다.

따라서, Consumer 수가 파티션 수보다 많을 경우 일부 Consumer는 할 일이 없게 되어 리소스 낭비가 발생합니다. 반대로, 파티션 수가 많고 Consumer 수가 적을 경우 각 Consumer에 부하가 증가합니다. 최적의 성능을 위해 파티션과 Consumer의 수를 동일하게 맞추는 것이 중요합니다.

왜 1:1 매핑이 중요한가?

  • 병렬 처리 극대화: 각 Consumer가 독립적으로 파티션을 처리하여 병렬 처리가 최적화됩니다.
  • 부하 분산: 메시지 처리 부하가 고르게 분산되어 특정 Consumer에 과부하가 걸리는 것을 방지합니다.
  • 리소스 효율성 향상: 불필요한 Consumer 인스턴스를 줄여 리소스 낭비를 방지합니다.
  • 실시간성 향상: Lag를 최소화하여 메시지 지연을 줄이고 준실시간성을 보장합니다.

파티션 수와 Consumer 수 조정 방법

  1. 파티션 수 증가

    • 토픽의 파티션 수를 늘려 병렬 처리의 단위를 세분화합니다.
    • Consumer 수에 맞게 파티션 수를 조정하여 1:1 매핑을 달성합니다.
  2. Consumer 인스턴스 조정

    • Consumer 그룹 내의 Consumer 인스턴스 수를 파티션 수와 동일하게 맞춥니다.
    • 불필요한 Consumer 인스턴스를 줄여 리소스 효율성을 높입니다.

문제 해결 과정

(가상의 시나리오입니다.)

1. Kafka Lag 증가 확인

운영 중인 Kafka 시스템에서 Lag Sum Offset이 지속적으로 증가하는 현상을 발견했습니다. 이에 따라 메시지 처리 지연이 발생하고, 시스템의 준실시간성이 저하되었습니다.

2. 원인 분석

  • Consumer 수와 파티션 수의 불균형

    • 파티션 수는 5개인데 Consumer 인스턴스는 10개였습니다.
    • 이로 인해 여분의 Consumer 인스턴스가 할당받을 파티션이 없어 유휴 상태로 남게 되었습니다.
    • 일부 Consumer에게만 파티션이 할당되어 그들에게 부하가 집중되었습니다.
  • Consumer 처리 속도 한계

    • 할당된 Consumer들이 처리해야 할 메시지 양이 많아져 병목 현상이 발생했습니다.

3. 해결 방안 수립

  • 파티션 수 증가

    • 파티션 수를 기존 5개에서 10개로 늘려 Consumer 인스턴스 수와 동일하게 맞추었습니다.
    • 이를 통해 파티션과 Consumer의 1:1 매핑을 달성했습니다.
  • Concurrent Consume 구현

    • 멀티스레드 처리를 통해 각 Consumer가 더욱 효율적으로 메시지를 처리하도록 개선했습니다.

Concurrent Consume을 통한 Lag 개선

구현 방법

파티션 수 증가 및 Consumer 수와의 매핑 조정

  • 토픽의 파티션 수를 5개에서 10개로 늘려 각 Consumer에게 하나의 파티션이 할당되도록 했습니다.
  • Kafka의 kafka-topics.sh 스크립트를 사용하여 파티션 수를 증가시켰습니다.

멀티스레드 Consumer 적용

  • Consumer 애플리케이션 내에서 멀티스레드를 활용하여 메시지 처리를 병렬화했습니다.
  • 각 스레드가 할당된 파티션의 메시지를 처리하도록 구성했습니다.

파티션 재분배 확인

  • Kafka의 리밸런싱 과정을 통해 파티션이 새로운 Consumer들에게 고르게 분배되었는지 확인했습니다.

개선 결과

  • Lag Sum Offset 감소
    파티션 수 증가와 Consumer의 효율적 활용으로 메시지 소비 속도가 향상되어 Lag이 감소했습니다.

  • Lag Latency 개선
    메시지 처리 지연이 해소되어 준실시간성이 회복되었습니다.

Consumer Lag 알림 설정하기 (재발 방지)

왜 알림이 필요할까?

Kafka 시스템에서 Consumer Lag는 실시간성을 판단하는 중요한 지표입니다.
그런데 사람이 계속 모니터링할 수는 없잖아요?
그래서 Lag가 특정 임계치를 넘으면 자동으로 알림이 오도록 설정하면 문제를 빠르게 대응할 수 있어요.

얼마 정도의 Lag에서 알림을 받을까?

우리 팀에서는 Lag가 20분을 넘으면 알림이 오도록 설정했어요.
이 값은 시스템의 특성과 요구 사항에 따라 달라질 수 있어요.
실시간성이 중요하다면 더 짧은 시간으로 설정하고, 약간의 지연이 허용된다면 길게 잡을 수도 있어요.

마무리

Kafka의 준실시간성을 유지하기 위해서는 Consumer Lag을 지속적으로 모니터링하고 관리해야 합니다. 특히 파티션과 Consumer의 1:1 매핑은 Lag 관리의 핵심 전략 중 하나입니다. 이를 통해 병렬 처리를 극대화하고 부하를 고르게 분산시켜 시스템의 효율성을 높일 수 있습니다.

Lag이 증가하는 문제가 발생한다면, 파티션 수를 조정하고 Concurrent Consume과 같은 방법을 도입하여 처리 성능을 개선할 수 있습니다. 또한, 파티션 수와 Consumer 수를 적절히 조정하여 Lag를 효과적으로 관리하시길 바랍니다.

참고 자료

0개의 댓글