JMX(Java Management Extensions)로 Kafka 커넥터 모니터링
JMX(Java Management Extensions)로 Kafka 커넥터 모니터링 (Monitoring the Kafka connector using Java Management Extensions)
중요:
- 사전 공지: 클래식 Kafka 커넥터(v3 이하)는 현재 완전히 지원되지만, 향후 폐기될 예정이에요.
- 조치: 즉시 변경할 필요는 없어요. 현재 워크로드는 안전하며 계속 완전히 지원돼요.
- 일정: Snowflake는 2026년 중반에 공식 폐기 공지를 발표할 계획이에요. 공지 후 수명 종료까지 18개월의 마이그레이션 기간이 시작돼요.
- 권장사항: 모든 새 구현에는 Snowflake Connector for Kafka (v4)를 사용하세요.
마이그레이션 지침은 v3에서 v4로 마이그레이션을 참고하세요.
이 문서는 JMX(Java Management Extensions)를 사용해 Snowflake Connector for Kafka를 모니터링하는 방법을 설명해요. Kafka Connect는 Kafka 커넥터에 대한 정보를 제공하는 사전 구성된 JMX 메트릭을 제공해요. Snowflake Connector for Kafka는 Kafka 환경에 대한 메트릭을 수집하는 데 사용할 수 있는 여러 MBean(Managed Bean)을 제공해요. 이 정보를 Prometheus와 Grafana를 포함한 타사 도구에 로드할 수 있어요.
JMX 기능은 커넥터에서 기본적으로 활성화돼 있어요. JMX를 비활성화하려면 jmx 속성을 false로 설정하세요.
중요: Snowpipe는 Kafka 커넥터 버전 1.6.0 이상을 지원해요. Snowpipe Streaming은 Kafka 커넥터 버전 2.1.2 이상을 지원해요.
출처: 문서
본문
Kafka 커넥터에서 JMX 구성
JMX는 Snowflake Kafka 커넥터에서 기본적으로 활성화돼 있어요. Kafka에서 JMX를 활성화하려면 다음을 수행하세요:
- Kafka 설치에 JMX가 연결되도록 활성화:
- 원격 서버에서 실행되는 Kafka 설치에 JMX 연결을 하려면 Kafka Connect 시작 스크립트에서 KAFKA_JMX_OPTS 환경 변수를 설정하세요:
export KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=<ip_address>
-Dcom.sun.management.jmxremote.port=<jmx_port>"
- 여기서
ip_address는 Kafka Connect 설치의 IP 주소를,jmx_port는 Kafka Connect가 JMX 연결을 수신 대기하는 JMX 포트를 지정해요. - 같은 서버에서 실행되는 Kafka에 JMX 연결을 하려면 Kafka 시작 스크립트에서 JMX_PORT 환경 변수를 설정하세요:
export JMX_PORT=<port_number>
-
여기서
port_number는 Kafka 설치의 JMX 포트예요. -
Kafka 커넥터를 다시 시작.
Snowflake Kafka 커넥터 MBean 사용
JMX는 Kafka 내에서 모니터링할 수 있는 객체(예: 스레드 수, CPU 부하 등)를 나타내는 데 MBean을 사용해요. Snowflake Kafka 커넥터는 커넥터가 관리하는 객체에 접근하기 위한 MBean을 제공해요. 이 MBean을 사용해 모니터링 대시보드를 만들 수 있어요.
Kafka 커넥터 MBean 객체 이름의 일반적인 형식은 다음과 같아요:
snowflake.kafka.connector:connector=connector_name,pipe=pipe_name,category=category_name,name=metric_name
여기서:
connector=connector_name은 Kafka 구성 파일에 정의된 커넥터의 이름을 지정해요.pipe=pipe_name은 데이터 수집에 사용되는 Snowpipe 객체를 지정해요. Kafka 커넥터는 각 파티션에 대해 Snowpipe 객체를 정의해요.category=category_name은 MBean의 카테고리를 지정해요. 각 카테고리에는 메트릭 세트가 포함돼요.name=metric_name은 메트릭의 이름을 지정해요.
다음 섹션은 Snowflake Kafka 커넥터가 제공하는 카테고리와 메트릭의 이름을 나열해요.
카테고리: file-counts
이 카테고리의 메트릭은 Snowpipe 기반 Kafka 커넥터에만 적용되며 Snowpipe Streaming에는 적용되지 않아요.
| 메트릭 이름 | 데이터 타입 | 설명 |
| file-count-on-stage | long | 현재 내부 스테이지에 있는 파일 수. 이 값은 파일 제거(purge) 프로세스가 시작된 후 감소돼요. 이 속성은 현재 내부 스테이지에 있는 파일 수의 추정치를 제공해요. |
| file-count-on-ingestion | long | insertFiles REST API 호출로 결정된 Snowpipe의 파일 수. 단일 REST API 요청으로 전송되는 파일에는 현재 5k 제한이 있어요. 파일 수와 REST API 호출 수 사이에는 일대일 관계가 없어요. insertFiles REST API 호출 수는 이 값보다 클 수 있어요. 더 이상 수집할 파일이 없으면 이 속성의 값은 0이에요. |
| file-count-table-stage-ingestion-fail | long | 수집에 실패한 테이블 스테이지의 파일 수. |
| file-count-table-stage-broken-record | long | 깨진 오프셋에 해당하는 테이블 스테이지에 있는 파일 수. |
| file-count-purged | long | 수집 상태가 결정된 후 내부 스테이지에서 제거된 파일 수. |
카테고리: offsets
offsetPersistedInSnowflake와 latestConsumerOffset 메트릭은 Snowpipe Streaming 기반 Kafka 커넥터에 적용돼요. 이 카테고리의 나머지는 Snowpipe 기반 Kafka 커넥터에만 적용돼요.
| 메트릭 이름 | 데이터 타입 | 설명 |
| processed-offset | long | 인메모리 버퍼로 보낸 가장 최근 레코드를 가리키는 오프셋. |
| flushed-offset | long | 버퍼 임계값에 도달한 후 내부 스테이지에서 플러시되고 있는 레코드를 가리키는 오프셋. 버퍼는 시간, 레코드 수, 크기로 임계값에 도달할 수 있어요. |
| committed-offset | long | precommit API가 호출되었고 Snowpipe insertFiles REST API가 호출된 레코드를 가리키는 오프셋. |
| purged-offset | long | 내부 스테이지에서 제거되고 있는 레코드를 가리키는 오프셋. 이 숫자는 내부 스테이지에서 제거된 가장 최근 오프셋의 값이에요. |
| offsetPersistedInSnowflake | long | Snowflake에서 가장 최근에 지속된 데이터가 있는 레코드를 가리키는 오프셋. 오프셋은 insertRows API 호출로 결정돼요. |
| latestConsumerOffset | long | 인메모리 버퍼로 보낸 가장 최근 레코드를 가리키는 오프셋. 채널 오프셋 토큰이 NULL일 때 오프셋을 다시 보내는 데만 사용돼요. |
카테고리: buffer
이 카테고리의 메트릭은 Snowpipe 기반 Kafka 커넥터에서만 사용할 수 있어요.
| 메트릭 이름 | 데이터 타입 | 설명 | | buffer-size-bytes | long | 버퍼 임계값에 따라 내부 스테이지로 플러시되기 전의 버퍼 크기(바이트)를 반환해요. 파일이 내부 스테이지에 로드될 때 압축되므로 이 값은 파일 크기와 같지 않을 수 있어요. | | buffer-record-count | long | 버퍼 임계값에 따라 버퍼가 내부 스테이지로 플러시되기 전에 메모리에 버퍼링된 Kafka 레코드 수를 반환해요. |
카테고리: latencies
이 카테고리의 메트릭은 Snowpipe 기반 Kafka 커넥터에서만 사용할 수 있어요.
| 메트릭 이름 | 데이터 타입 | 설명 |
| kafka-lag | long | 레코드가 Kafka에 배치된 시각과 레코드가 Kafka Connect로 가져와진 시각 사이의 차이(초). 레코드 안에 값이 설정되지 않으면 이 값은 null일 수 있어요. |
| commit-lag | long | 파일이 내부 스테이지에 업로드된 시각과 insertFiles REST API가 호출된 시각 사이의 차이(초). |
| ingestion-lag | long | 파일이 내부 스테이지에 업로드된 시각과 insertReport 또는 loadHistoryScan API를 통해 파일 수집 상태가 보고된 시각 사이의 차이(초). |