Kafka 클러스터의 안정성 모니터링

이 문서에서는 Managed Service for Apache Kafka 클러스터를 모니터링하여 Kafka 워크로드의 안정성을 보장하는 방법을 설명합니다.

개요

안정성은 시스템이 시간이 지나도 올바르고 일관되게 작동하는 능력입니다. Kafka 기반 워크로드의 경우 안정성에는 Kafka 클러스터 자체는 물론 메시지를 생성하고 소비하는 클라이언트 애플리케이션도 포함됩니다.

Managed Service for Apache Kafka는 많은 일반적인 오류를 허용하고 복구하도록 설계되었습니다. 예를 들어 이 서비스는 내결함성을 위해 복제본을 다른 영역에 배치하고 실패한 브로커를 자동으로 다시 시작합니다. 하지만 안정성에 영향을 미치는 다른 요인은 서비스의 직접 제어 범위를 벗어납니다. 예를 들면 다음과 같습니다.

  • 클라이언트 구성
  • 평균 부하 및 급증을 포함한 클러스터의 부하
  • 파티션 및 복제본 수
  • 메시지 보관과 같은 주제 구성

안정적인 작업을 위해서는 클러스터에서 이러한 운영 매개변수를 모니터링하고 권장 범위 내로 유지하는 것이 중요합니다. 다음 섹션에서는 안정성에 중요한 몇 가지 주요 측정항목을 설명합니다.

클러스터 용량 모니터링

클러스터 과부하를 방지하려면 다음 신호를 모니터링하세요. 장기간 권장 범위를 벗어나는 경우 알림을 제공하는 알림을 만듭니다.

  • CPU 사용률. 모든 브로커에서 CPU 사용률을 80% 미만으로 유지합니다.

  • 브로커 디스크 사용률: 브로커 디스크 사용률이 80% 미만으로 유지되는지 확인합니다.

  • 디스크 크기. 안전한 시작점으로 브로커당 파티션당 최소 2*(segment.bytes)를 사용하는 것이 좋습니다. 실제로 필요한 디스크 용량은 이보다 훨씬 적은 경우가 많습니다.

    기본적으로 세그먼트 파일은 7일 후에 닫히고 원격 스토리지로 이동됩니다. 대부분의 파티션은 해당 기간 동안 segment.bytes 미만의 데이터를 수신하는 것이 일반적입니다. 즉, 대부분의 파티션은 segment.bytes 미만의 디스크 공간을 사용합니다. 디스크 크기를 늘리기 전에 클러스터에 더 많은 파티션을 만들 때 디스크 사용률을 모니터링합니다.

  • 파티션 수. 브로커당 파티션 수를 4,000개 미만으로, 클러스터당 파티션 수를 100,000개 미만으로 유지하세요.

클러스터 용량이 부족한 경우 다음 완화 조치를 고려하세요.

다음 표에서는 커스텀 Cloud Monitoring 대시보드에 추가할 수 있는 이러한 측정항목의 Prometheus Query Language(PromQL) 쿼리를 보여줍니다.

신호PromQL 쿼리
CPU 사용률
rate(
  {
    "managedkafka.googleapis.com/cpu/core_usage_time",
    monitored_resource="managedkafka.googleapis.com/Cluster"
  }[${__interval}]
)
/ min_over_time(
  {
    "managedkafka.googleapis.com/cpu/limit",
    monitored_resource="managedkafka.googleapis.com/Cluster"
  }[${__interval}]
)
브로커 디스크 사용률
max_over_time(
  {
    "managedkafka.googleapis.com/disk/used_bytes",
    monitored_resource="managedkafka.googleapis.com/Cluster"
  }[${__interval}]
)
/ min_over_time(
  {
    "managedkafka.googleapis.com/disk/limit",
    monitored_resource="managedkafka.googleapis.com/Cluster"
  }[${__interval}]
)
파티션당 세그먼트 크기
# Assumes that segment files are 225 MiB. Check your cluster configuration.
2*225*(1024*1024) * max_over_time(
  {
    "managedkafka.googleapis.com/partitions",
    monitored_resource="managedkafka.googleapis.com/Cluster"
  }[${__interval}]
)
/ min_over_time(
  {
    "managedkafka.googleapis.com/disk/limit",
    monitored_resource="managedkafka.googleapis.com/Cluster"
  }[${__interval}]
)
브로커당 파티션
max by (resource_container, location, cluster_id, broker_index) (
  max_over_time(
    {
      "managedkafka.googleapis.com/partitions",
      monitored_resource="managedkafka.googleapis.com/Cluster"
    }[${__interval}]
  )
)
클러스터당 파티션
max by (resource_container, location, cluster_id) (
  max_over_time(
    {
      "managedkafka.googleapis.com/partitions",
      monitored_resource="managedkafka.googleapis.com/Cluster"
    }[${__interval}]
  )
)

브로커 간 파티션 균형 모니터링

부하가 고르지 않으면 Kafka 클러스터가 클라이언트 요청을 제대로 처리하지 못할 수 있습니다. 단일 브로커에 할당된 파티션 수는 브로커당 평균 파티션 수의 약 10% 이내여야 합니다. 이 측정항목에서 이상치를 찾습니다.

균형 잡힌 파티션을 유지하려면 클러스터에서 수직 확장 시 자동 재분산을 사용 설정하는 것이 좋습니다.

다음 표에서는 파티션 불균형을 모니터링하는 데 사용할 수 있는 PromQL 쿼리를 보여줍니다.

신호PromQL 쿼리
브로커당 파티션 수
sum by (resource_container, location, cluster_id, broker_index) (
  avg_over_time(
    {
      "managedkafka.googleapis.com/partitions",
      monitored_resource="managedkafka.googleapis.com/Cluster"
    }[${__interval}]
  )
)
파티션 불균형
sum by (resource_container, location, cluster_id, broker_index) (
  avg_over_time(
    {
      "managedkafka.googleapis.com/partitions",
      monitored_resource="managedkafka.googleapis.com/Cluster"
    }[${__interval}]
  )
)
/ on (resource_container, location, cluster_id)
  group_left avg by (resource_container, location, cluster_id) (
  avg_over_time(
    {
      "managedkafka.googleapis.com/partitions",
      monitored_resource="managedkafka.googleapis.com/Cluster"
    }[${__interval}]
  )
) - 1

파티션 복제 모니터링

데이터 복제는 워크로드의 내결함성을 보장하는 데 중요합니다. 정상 클러스터에서 주제의 모든 파티션에는 주제의 구성된 복제 인수에 따라 전체 복제본 수가 있습니다.

다음 신호를 사용하여 파티션 복제를 모니터링합니다.

  • 최소 동기화 복제본(ISR) 미만. 파티션에 구성된 최소값(min.insync.replicas)보다 동기화된 ISR이 적으면 데이터 손실 및 가용성 위험이 심각합니다. 일반적으로 이 상황은 하나 이상의 브로커에 용량이 부족하거나 인프라 장애로 인해 발생합니다.

  • 복제되지 않은 파티션 동기화된 복제본 수가 복제 인수보다 적으면 파티션이 복제되지 않습니다. 파티션이 수십 분 동안 복제되지 않은 상태로 유지되면 브로커, 스토리지 용량 또는 다른 문제가 있을 수 있습니다.

    순차적 다시 시작 중에 브로커가 다시 시작되면서 사용할 수 없게 되어 일시적인 복제 부족이 발생합니다. 이는 예상되는 상황이며 개입이 필요하지 않습니다.

다음 표에서는 복제를 모니터링하는 데 사용할 수 있는 PromQL 쿼리를 보여줍니다.

신호PromQL 쿼리
최소 ISR 미만
max by (
  resource_container,
  location,
  cluster_id
) (
  max_over_time(
    {
      "managedkafka.googleapis.com/broker/under_min_isr_partitions",
      monitored_resource="managedkafka.googleapis.com/Cluster"
    }[${__interval}]
  )
)
복제 중
max by (
  resource_container,
  location,
  cluster_id
) (
  min_over_time(
    {
      "managedkafka.googleapis.com/broker/under_replicated_partitions",
      monitored_resource="managedkafka.googleapis.com/Cluster"
    }[10m:${__interval}]
  )
)

승인 요청 할당량 모니터링

클라이언트가 클러스터에 연결되면 연결 승인은 프로젝트별 리전별 분당 클러스터 인증 연결 요청 할당량에 반영됩니다. 프로젝트 및 리전의 모든 클러스터가 이 할당량을 공유하며, 할당량을 초과하면 새 클라이언트 연결이 차단됩니다. 할당량 사용률을 80% 미만으로 유지하고 사용률이 계속 높으면 알림을 받도록 알림을 만듭니다.

할당량 사용률이 높은 경우 다음 완화 조치를 고려하세요.

  • 클라이언트가 불필요한 새 연결을 만드는 비율을 줄입니다. 예를 들어 생성 및 소비 오류에 지수 백오프를 사용하고, 적절한 경우 클라이언트 인스턴스를 통합하고, 기존 연결을 재사용하도록 클라이언트를 구성합니다.

  • 할당량 상향 조정을 요청합니다. 자세한 내용은 할당량 및 한도를 참조하세요.

다음 표에는 프로젝트 및 리전별로 상위 3개 승인 요청 할당량 사용률을 모니터링하는 데 사용할 수 있는 PromQL 쿼리가 나와 있습니다.

신호PromQL 쿼리
프로젝트 및 리전별 상위 3개 승인 요청 할당량 사용률
topk(3,
  sum by (project_id, location) (
    rate(
      {
        "serviceruntime.googleapis.com/quota/rate/net_usage",
        monitored_resource="consumer_quota",
        service="managedkafka.googleapis.com",
        quota_metric="managedkafka.googleapis.com/cluster_authenticate_requests"
      }[${__interval}]
    )
  )
  / (
    min by (project_id, location) (
      min_over_time(
        {
          "serviceruntime.googleapis.com/quota/limit",
          monitored_resource="consumer_quota",
          service="managedkafka.googleapis.com",
          quota_metric="managedkafka.googleapis.com/cluster_authenticate_requests",
          limit_name="ClusterAuthPerMinutePerProjectPerRegion"
        }[${__interval}]
      )
    )
    / 60
  )
)

다음 단계

Apache Kafka®는 미국 및/또는 다른 국가에서 사용되는 Apache Software Foundation 또는 해당 계열사의 등록 상표입니다.