Named Channel 운영

Named Channel 운영

이 주제는 Named Channels의 라이프사이클, 모니터링, 복구 작업을 다룹니다. 채널 개념과 exactly-once 전달에 대해서는 Named Channels 및 exactly-once 전달 을 참고하세요. 액세스 권한에 대해서는 액세스 제어 를 참고하세요.

출처: Snowflake 문서

본문

채널 라이프사이클

openChannel(channelName, offsetToken)로 Named Channel을 열고 행을 추가하며, 수집 작업이 지속되는 동안 채널을 열어두세요. 채널을 반복적으로 열고 닫는 것을 피하세요. 설정과 코드 샘플은 튜토리얼: SDK 시작하기 를 참고하세요.

  • 접근할 수 있는 채널을 SHOW CHANNELS로 나열하세요. 구문은 SHOW CHANNELS 을 참고하세요.
  • 더 이상 필요하지 않은 채널은 dropChannel로 버리세요. 버리려는 의도가 아니면 먼저 대기 중(pending) 데이터를 flush하세요. 자세한 내용은 Named Channels 및 exactly-once 전달 을 참고하세요.
  • 비활성 채널은 offset token과 함께 30일 후 자동으로 삭제됩니다.

Flush 및 정상 종료

프로듀서를 종료하기 전에 대기 중 데이터를 flush하고 진행 중인 append가 완료될 때까지 기다리세요.

channel.initiateFlush();
channel.waitForFlush(Duration.ofMinutes(2)).get();
channel.close();
channel.initiate_flush()
channel.wait_for_flush(timeout_seconds=120)
channel.close()
channel.initiateFlush();
await channel.waitForFlush({ timeoutMs: 120000 });
await channel.close();

클라이언트도 동일한 initiateFlush와 waitForFlush 메서드를 노출합니다. 그 close 옵션은 종료 전에 모든 열린 채널이 flush될 때까지 기다릴 수도 있습니다.

SDK는 정상 수집 중에 append를 자동으로 배치합니다. 명시적 flush는 체크포인트나 종료에 사용하고 매 행마다 사용하지 마세요. 완료된 flush는 커밋된 offset 체크포인트가 아닙니다. 재생 가능한 소스를 전진시키기 전에 관련 offset이 커밋될 때까지 기다리세요. 커밋 대기가 시간 초과되면 소스 위치를 유지하고 커밋된 진행 상황을 다시 확인하세요. 시간 초과 자체를 채널 무효화나 재생 지시로 취급하지 마세요. Named Channel SDK 튜토리얼 을 참고하세요.

채널 및 offset 상태

단일 채널의 상태는 getChannelStatus()로, 여러 채널은 클라이언트의 일괄 getChannelStatus(channelNames)(SDK) 또는 Bulk Get Channel Status REST 엔드포인트로 한 번에 확인하세요. last_committed_offset_token과 row_error_count를 추적해 진행 상황을 확인하고 잘못된 레코드를 조기에 잡으세요. 전체 필드 목록은 채널 상태 엔드포인트 세부 정보 를 참고하세요.

마지막 커밋된 위치를 찾아 거기서 소스를 재개하려면 단일 채널에는 getLatestCommittedOffsetToken을, 여러 채널에는 getLatestCommittedOffsetTokens를 호출하세요. 전체 복구 패턴은 Offset tokens 및 exactly-once 전달 을 참고하세요.

행 오류

대상 테이블에서 오류 로깅을 켜서 행 수준 처리 실패를 전용 오류 테이블에 캡처하고, 채널 상태의 row_error_count를 모니터링해 조기에 감지하세요. 설정 및 쿼리 예시는 오류 로깅 및 오류 테이블 을 참고하세요.

채널 히스토리

SNOWPIPE_STREAMING_CHANNEL_HISTORY 뷰는 모니터링과 문제 해결을 위한 채널 활동의 과거 기록을 제공합니다.

SELECT *
FROM SNOWFLAKE.ACCOUNT_USAGE.SNOWPIPE_STREAMING_CHANNEL_HISTORY
WHERE DATABASE_NAME = 'MY_DATABASE'
  AND SCHEMA_NAME = 'MY_SCHEMA'
  AND TABLE_NAME = 'MY_TABLE'
ORDER BY START_TIME DESC
LIMIT 20;

무효화로부터의 복구

channel_status_code가 SUCCESS가 아니면 채널은 항상 유효하지 않습니다. 유효하지 않은 채널은 클라이언트에 HTTP 409 응답으로 표면화될 수 있습니다. 채널을 닫고 다시 연 다음 마지막 커밋된 offset token에서 재개하세요. 권한 부여 오류(401, 403)는 재오픈이 아니라 구성 수정이 필요합니다. 무효화를 일으키는 오류 코드의 전체 목록과 필요한 클라이언트 조치는 클라이언트 측 오류 처리 및 필요한 조치 를 참고하세요.

Prometheus 지표 및 로깅

지표 설정, Prometheus 구성, 클라이언트 로깅에 대해서는 Prometheus와 로그로 SDK 클라이언트 모니터링하기 를 참고하세요.

클래식 아키텍처에서 마이그레이션

클래식 애플리케이션은 두 모델 모두 복구에 채널 식별자와 offset token을 사용하므로 일반적으로 Named Channels로 마이그레이션합니다. 마이그레이션 가이드, SDK 비교, 예정된 폐기 공지 를 참고하세요.

더 알아보기 (Learn more)