입력 연결 문제 해결
이 문서에서는 Azure Stream Analytics 입력 연결의 일반적인 문제, 이러한 문제를 해결하는 방법 및 문제를 해결하는 방법을 설명합니다.
많은 문제 해결 단계를 수행하려면 Stream Analytics 작업에 대한 리소스 로그를 설정해야 합니다. 리소스 로그를 설정하지 않은 경우 리소스 로그를 사용하여 Azure Stream Analytics 문제 해결을 참조 하세요.
작업이 입력 이벤트를 수신하지 않음
입력 및 출력에 대한 연결을 확인합니다. 각 입력 및 출력에 대해 테스트 커넥트ion 단추를 사용합니다.
입력 데이터를 검사합니다.
각 입력에 대해 샘플 데이터 단추를 사용합니다. 입력 샘플 데이터를 다운로드합니다.
샘플 데이터를 검사하여 스키마 및 데이터 형식을 파악합니다.
Azure Event Hubs 메트릭을 확인 하여 이벤트가 전송되고 있는지 확인합니다 . Event Hubs가 메시지를 수신하는 경우 메시지 메트릭은 0보다 커야 합니다.
입력 미리 보기에서 시간 범위를 선택했는지 확인합니다. 시간 범위 선택을 선택한 다음, 쿼리를 테스트하기 전에 샘플 기간을 입력합니다.
Important
네트워크가 삽입되지 않은 Azure Stream Analytics 작업의 경우 어떤 방식으로든 Stream Analytics에서 들어오는 연결의 원본 IP 주소를 사용하지 마세요. 때때로 발생하는 서비스 인프라 작업에 따라 공용 또는 개인 IP일 수 있습니다.
잘못된 형식의 입력 이벤트로 인해 역직렬화 오류가 발생합니다.
역직렬화 문제는 Stream Analytics 작업의 입력 스트림에 잘못된 형식의 메시지가 포함되어 있을 때 발생합니다. 예를 들어 JSON 개체의 괄호나 중괄호가 없거나 시간 필드의 타임스탬프를 잘못 입력하면 잘못된 형식의 메시지가 발생할 수 있습니다.
Stream Analytics 작업이 입력으로부터 잘못된 형식의 메시지를 수신하면 해당 메시지를 삭제하고 경고로 알립니다. Stream Analytics 작업의 입력 타일에 경고 기호가 나타납니다. 경고 기호는 작업이 실행 중 상태인 한 존재합니다.
리소스 로그를 켜서 오류의 세부 정보와 오류를 발생시킨 메시지(페이로드)를 확인합니다. 역직렬화 오류가 발생할 수 있는 여러 가지 이유가 있습니다. 특정 역직렬화 오류에 대한 자세한 내용은 입력 데이터 오류를 참조 하세요. 리소스 로그가 켜져 있지 않으면 Azure Portal에 간단한 알림이 표시됩니다.
메시지 페이로드가 32KB보다 크거나 이진 형식인 경우 GitHub 샘플 리포지토리에서 사용할 수 있는 CheckMalformedEvents.cs 코드를 실행합니다. 이 코드는 파티션 ID 오프셋을 읽고 해당 오프셋에 있는 데이터를 출력합니다.
입력 역직렬화 오류의 다른 일반적인 이유는 다음과 같습니다.
- 값이 .보다
9223372036854775807
큰 정수 열입니다. - 개체 또는 줄로 구분된 개체의 배열 대신 문자열입니다. 유효한 예:
*[{'a':1}]*
. 잘못된 예:*"'a' :1"*
. - Event Hubs를 사용하여 Avro 형식의 Blob을 작업의 입력으로 캡처합니다.
- 단일 입력 이벤트에 두 개의 열이 있는 경우만 다릅니다. 예:
*column1*
및*COLUMN1*
.
파티션 수 변경 내용
이벤트 허브의 파티션 수를 변경할 수 있습니다. 이벤트 허브의 파티션 수가 변경된 경우 Stream Analytics 작업을 중지하고 다시 시작해야 합니다.
다음 오류는 작업이 실행되는 Microsoft.Streaming.Diagnostics.Exceptions.InputPartitioningChangedException
동안 이벤트 허브의 파티션 수가 변경될 때 나타납니다.
작업이 최대 Event Hubs 수신기를 초과합니다.
Event Hubs를 사용하는 모범 사례는 작업 확장성을 위해 여러 소비자 그룹을 사용하는 것입니다. 특정 입력에 대한 Stream Analytics 작업의 판독기 수가 단일 소비자 그룹의 판독기 수에 영향을 줍니다.
정확한 수신자 수는 스케일 아웃 토폴로지 논리에 대한 내부 구현 세부 정보를 기반으로 합니다. 이 숫자는 외부에서 노출되지 않습니다. 작업을 시작하거나 업그레이드할 때 판독기 수가 변경될 수 있습니다.
수신기 수가 최대값을 초과하면 다음 오류 메시지가 나타납니다. 메시지에는 소비자 그룹에서 Event Hubs에 대한 기존 연결 목록이 포함됩니다. 태그 AzureStreamAnalytics
는 연결이 Azure 스트리밍 서비스에서 온 것임을 나타냅니다.
The streaming job failed: Stream Analytics job has validation errors: Job will exceed the maximum amount of Event Hubs Receivers.
The following information may be helpful in identifying the connected receivers: Exceeded the maximum number of allowed receivers per partition in a consumer group which is 5. List of connected receivers –
AzureStreamAnalytics_c4b65e4a-f572-4cfc-b4e2-cf237f43c6f0_1,
AzureStreamAnalytics_c4b65e4a-f572-4cfc-b4e2-cf237f43c6f0_1,
AzureStreamAnalytics_c4b65e4a-f572-4cfc-b4e2-cf237f43c6f0_1,
AzureStreamAnalytics_c4b65e4a-f572-4cfc-b4e2-cf237f43c6f0_1,
AzureStreamAnalytics_c4b65e4a-f572-4cfc-b4e2-cf237f43c6f0_1.
참고 항목
작업을 업그레이드하는 동안 판독기 수가 변경되면 일시적인 경고가 감사 로그에 기록됩니다. Stream Analytics 작업은 이러한 일시적인 문제에서 자동으로 복구됩니다.
Event Hubs 인스턴스에 새 소비자 그룹을 추가하려면 다음 단계를 수행합니다.
Azure Portal에 로그인합니다.
이벤트 허브를 찾습니다.
엔터티 제목 아래에서 Event Hubs를 선택합니다.
이름으로 이벤트 허브를 선택합니다.
Event Hubs 인스턴스 페이지의 엔터티 제목 아래에서 소비자 그룹을 선택합니다. 이름이 $Default 소비자 그룹이 나열됩니다.
+소비자 그룹을 선택하여 새 소비자 그룹을 추가합니다.
이벤트 허브를 가리키도록 Stream Analytics 작업에서 입력을 만들 때 해당 위치에 소비자 그룹을 지정했습니다. Event Hubs는 소비자 그룹이 지정되지 않은 경우 $Default 사용합니다. 소비자 그룹을 만든 후 Stream Analytics 작업에서 이벤트 허브 입력을 편집하고 새 소비자 그룹의 이름을 지정합니다.
파티션당 판독기는 Event Hubs 제한을 초과합니다.
스트리밍 쿼리 구문이 이벤트 허브 입력에 대해 동일한 리소스를 여러 번 참조하는 경우 작업 엔진은 동일한 소비자 그룹의 쿼리당 여러 판독기를 사용할 수 있습니다. 동일한 소비자 그룹에 대한 참조가 너무 많으면 작업이 5개 제한을 초과하여 오류를 throw할 수 있습니다. 이러한 경우 여러 소비자 그룹에서 여러 입력을 사용하여 더 나눌 수 있습니다.
파티션당 판독기 수가 Event Hubs 제한인 5개를 초과하는 시나리오는 다음과 같습니다.
여러
SELECT
문: 동일한 이벤트 허브 입력을 참조하는 여러SELECT
문을 사용하는 경우 각SELECT
문은 새 수신기를 만듭니다.UNION
: 사용하는UNION
경우 동일한 이벤트 허브 및 소비자 그룹을 참조하는 여러 입력이 있을 수 있습니다.SELF JOIN
: 작업을 사용하는SELF JOIN
경우 동일한 이벤트 허브를 여러 번 참조할 수 있습니다.
다음 모범 사례는 파티션당 읽기 권한자 수가 5개 Event Hubs 제한을 초과하는 시나리오를 완화하는 데 도움이 될 수 있습니다.
WITH 절을 사용하여 쿼리를 여러 단계로 분할
이 절은 WITH
쿼리의 절에서 참조할 수 있는 FROM
임시 명명된 결과 집합을 지정합니다. 단일 SELECT
문의 실행 범위에서 절을 정의 WITH
합니다.
예를 들어 아래 쿼리 대신,
SELECT foo
INTO output1
FROM inputEventHub
SELECT bar
INTO output2
FROM inputEventHub
…
이 쿼리를 사용:
WITH data AS (
SELECT * FROM inputEventHub
)
SELECT foo
INTO output1
FROM data
SELECT bar
INTO output2
FROM data
…
입력이 다른 소비자 그룹으로 바인딩되었는지 확인
세 개 이상의 입력이 동일한 Event Hubs 소비자 그룹에 연결된 쿼리의 경우 개별 소비자 그룹을 만듭니다. 이 작업을 수행하려면 추가 Stream Analytics 입력을 생성해야 합니다.
다른 소비자 그룹을 사용하여 별도의 입력 만들기
동일한 이벤트 허브에 대해 서로 다른 소비자 그룹을 사용하여 별도의 입력을 만들 수 있습니다. 다음 쿼리 예제 UNION
에서 InputOne 및 InputTwo는 동일한 Event Hubs 원본을 참조합니다. 모든 쿼리에는 서로 다른 소비자 그룹을 사용하는 별도의 입력이 있을 수 있습니다. 쿼리는 UNION
하나의 예일 뿐입니다.
WITH
DataOne AS
(
SELECT * FROM InputOne
),
DataTwo AS
(
SELECT * FROM InputTwo
),
SELECT foo FROM DataOne
UNION
SELECT foo FROM DataTwo
파티션당 판독기는 IoT Hub 제한을 초과합니다.
Stream Analytics 작업은 Azure IoT Hub에서 기본 제공 Event Hubs 호환 엔드포인트 를 사용하여 IoT Hub에서 이벤트를 연결하고 읽습니다. 파티션당 판독기 수가 IoT Hub의 제한을 초과하는 경우 Event Hubs에 대한 솔루션을 사용하여 해결할 수 있습니다. IoT Hub 포털 엔드포인트 세션 또는 IoT Hub SDK를 통해 기본 제공 엔드포인트에 대한 소비자 그룹을 만들 수 있습니다.
도움말 보기
추가 지원을 받으려면 Azure Stream Analytics에 대한 Microsoft Q&A 페이지를 사용해 보세요.