스트리밍 파이프라인을 작성하다 보면 스트리밍 실패가 발생할 수 있습니다. 이 페이지에서는 실패하는 스트림을 디버깅하기 위한 권장 워크플로와 스트림이 실패한 이유를 이해하는 데 도움이 되는 Foundry의 도구에 대해 설명합니다.
실패는 실패 유형으로 분류될 수 있으며, 각 실패 유형은 다른 기본 원인을 가리킬 수 있습니다. 아래는 가장 흔한 실패 유형과 그들이 발생할 수 있는 이유입니다.
빠르게 실패하는 스트림은 일반적으로 사용자가 작성한 로직에 문제가 있습니다. 예를 들어, 실패는 잘못된 캐스트, 구문 분석 예외, 또는 스트리밍 클러스터가 성공적으로 시작되지 못하게 하는 다른 문제로 인해 발생할 수 있습니다.
이전에 성공했던 스트림이 이제는 실패한다면, 로직과 상류 스트림의 변경 사항을 검사하여 잠재적 문제를 찾아보십시오.
이러한 문제의 근본 원인을 파악하기 위해 아래에 설명된 스트리밍 클러스터 로그 확인하기 워크플로의 단계를 따르십시오.
이전에 성공적으로 실행되었던 스트림이 재시작 후 다시 실행되는 경우 일반적으로 네트워크 중단으로 인한 인프라 문제를 가리킵니다. 중단은 종종 Foundry 인스턴스가 실행되는 클라우드 제공자(e.g. AWS, Azure, GCP 중단)에 의해 발생합니다. 스트림에 일정을 적용하면 Foundry는 자동으로 스트림을 다시 실행하고 이전에 중단된 곳에서 처리를 계속할 수 있습니다.
이전에 성공적으로 실행되었던 스트림이 이제는 로직 변경 없이 반복적으로 실패하는 경우, 일반적으로 가장 식별하기 어렵습니다. 그러나 대체로 두 가지 요인에 의해 일반적으로 발생합니다: 스트림에 새로운 입력 데이터가 추가되어 스트림이 진행을 멈추게 하는 경우(예: 유효하지 않은 유형, 손상된 데이터 등), 또는 지속적인 인프라 문제(AWS 중단 등)가 있는 경우입니다.
오류가 파이프라인 내 로직에 의해 발생하는지 확인하려면, 아래에 설명된 스트리밍 클러스터 로그 확인하기 워크플로의 단계를 따르십시오.
아래에서는 일반적인 스트리밍 문제를 해결하는 데 사용할 수 있는 몇 가지 워크플로를 설명합니다. 이 검사는 특정 순서대로 진행될 필요가 없습니다.
스트림 로그 가져오기 단계를 따르고 로그에서 예외, 오류, 또는 “throwable”을 검색합니다. 이러한 로그는 대체로 “ERROR”, “throwable”, 또는 “Exception”과 같은 키워드를 통해 잠재적인 기본 문제에 대한 설명을 제공합니다.
파이프라인 로직의 변경은 종종 사용자가 작성한 코드의 버그로 인해 중단을 일으키는 경우가 많습니다. 보통 이전 단계에서 얻은 로그의 예외는 문제를 일으키는 특정 코드를 가리킬 것입니다. 그렇다면, 문제가 해결되는지 확인하기 위해 변경사항을 롤백해 보십시오.
가끔 스트리밍 파이프라인의 로직이 예상치 못한 데이터를 만나면 예외를 발생시킬 수 있습니다. 이러한 행동의 예로는 파이프라인이 두 열을 서로 나누고 나눗셈 값으로 0
또는 null
을 반환하는 경우입니다. 입력 스트림의 끝부터 기록을 확인하여 데이터가 스트리밍 파이프라인에 문제를 일으킬 수 있는 방식으로 변경되었는지 확인하십시오. 변경된 데이터를 찾으면, 데이터를 정리하거나 제거하기 위한 필터 또는 로직을 추가하는 것을 고려해 보십시오.
Foundry는 스트림이 실패할 때 일반적인 예외를 감지하고 스트림 상세 페이지에 표시합니다. 상세를 확인하여 오류가 있는지 확인하십시오.
스트림 로그에서 상세 페이지보다 더 많은 정보를 찾을 수 있습니다. 스트림의 실패에 대한 정보를 얻기 위해 두 위치 모두를 확인하는 것이 좋습니다.
스트림 중에 실패가 발생하고 빌드 로그에서 원인을 식별하기 위해 로그에 접근해야 할 수 있습니다. 빌드 로그는 종종 다양한 유형의 스트림 실패의 원인을 파악하는 가장 좋은 장소입니다.
스트리밍 작업에 대한 로그를 가져오려면 먼저 데이터셋 미리보기에서 스트림 상세 페이지로 이동합니다.
다음으로, 검토하려는 작업을 찾은 다음 로그 다운로드를 클릭합니다.
가장 이른 또는 가장 늦은 로그 줄부터 로그를 다운로드할지 선택합니다.
// 에러 원인: com.palantir.logsafe.exceptions.SafeIllegalStateException: 시작 트랜잭션 rid가 현재 뷰의 일부가 아닙니다.
Caused by: com.palantir.logsafe.exceptions.SafeIllegalStateException: Start transaction rid is not part of the current view.
이 오류는 일반적으로 입력 데이터셋의 새로운 스냅샷이 스트리밍에서 실행되는 경우에 발생합니다.
스트리밍은 레코드가 수신되는 즉시 레코드를 다운스트림으로 전송하므로 레코드를 되돌릴 수 없습니다. 새로운 스냅샷이 생성되면 스트리밍 작업은 이전 트랜잭션을 무시하고 새로운 트랜잭션만 사용합니다. 새로운 스냅샷을 위해 오래된 레코드를 버리려면 수동 재생을 실행하십시오.
이 문제는 파이프라인의 새로운 배포를 실행하여 스트림을 재생함으로써 해결됩니다. 이는 파이프라인 배포 마법사에서 배포 시 재생 옵션을 선택함으로써 가능합니다.