이 문서에서는 Azure Stream Analytics 입력 연결의 일반적인 문제, 이러한 문제를 해결하는 방법 및 문제를 해결하는 방법을 설명합니다. 관련 문제에는 잘못된 형식의 이벤트의 역직렬화 오류, Event Hubs 수신기 제한, 파티션 수 변경 및 IoT Hub 판독기 제한이 포함됩니다.
많은 문제 해결 단계를 수행하려면 Stream Analytics 작업에 대한 리소스 로그를 사용하도록 설정해야 합니다. 리소스 로그를 사용하도록 설정하지 않은 경우 리소스 로그를 사용하여 Azure Stream Analytics 문제 해결을 참조하세요.
작업이 입력 이벤트를 수신하지 않음
입력 및 출력에 대한 연결을 확인합니다. 각 입력 및 출력에 대해 연결 테스트 단추를 사용합니다.
입력 데이터를 검사합니다.
각 입력에 대해 샘플 데이터 단추를 사용합니다. 입력 샘플 데이터를 다운로드합니다.
샘플 데이터를 검사하여 스키마 및 데이터 형식을 이해합니다.
Azure Event Hubs 메트릭을 확인하여 이벤트가 전송되고 있는지 확인합니다. Event Hubs가 메시지를 수신하는 경우 메시지 메트릭은 0보다 커야 합니다.
입력 미리 보기에서 시간 범위를 선택했는지 확인합니다. 시간 범위 선택을 선택한 다음, 쿼리를 테스트하기 전에 예시 기간을 입력합니다.
Important
네트워크가 삽입되지 않은 Azure Stream Analytics 작업의 경우 어떤 방식으로든 Stream Analytics에서 들어오는 연결의 원본 IP 주소를 사용하지 마세요. 때때로 발생하는 서비스 인프라 작업에 따라 공용 또는 개인 IP일 수 있습니다.
잘못된 형식의 입력 이벤트로 인해 역직렬화 오류가 발생합니다.
역직렬화 문제는 Stream Analytics 작업의 입력 스트림에 잘못된 형식의 메시지가 포함되어 있을 때 발생합니다. 예를 들어 JSON 개체의 괄호나 중괄호가 없거나 시간 필드의 타임스탬프 형식이 잘못되면 잘못된 형식의 메시지가 발생할 수 있습니다.
Stream Analytics 작업이 입력에서 잘못된 형식의 메시지를 수신하면 메시지가 삭제되고 경고가 표시됩니다. Stream Analytics 작업의 입력 타일에 경고 기호가 나타납니다. 경고 기호는 작업이 실행 중 상태인 한 존재합니다.
리소스 로그를 사용하여 오류의 세부 정보와 오류를 발생시킨 메시지(페이로드)를 볼 수 있습니다. 역직렬화 오류가 발생할 수 있는 여러 가지 이유가 있습니다. 특정 역직렬화 오류에 대한 자세한 내용은 입력 데이터 오류를 참조하세요. 리소스 로그를 사용하도록 설정하지 않으면 Azure 포털에 간단한 알림이 표시됩니다.
메시지 페이로드가 32KB보다 크거나 이진 형식인 경우 GitHub 샘플 리포지토리에서 사용할 수 있는 CheckMalformedEvents.cs 코드를 실행합니다. 이 코드는 파티션 ID 오프셋을 읽고 해당 오프셋에 있는 데이터를 출력합니다.
입력 역직렬화 오류의 다른 일반적인 이유는 다음과 같습니다.
- 값이 .보다
9223372036854775807큰 정수 열입니다. - 개체 또는 줄로 구분된 개체의 배열 대신 문자열입니다. 유효한 예:
[{'a':1}]. 잘못된 예:"'a' :1". - Event Hubs는 작업에서 입력으로 사용되는 Avro 형식의 Blob을 캡처합니다.
-
column1및COLUMN1처럼 대소문자만 다른 단일 입력 이벤트에 있는 두 열입니다.
이벤트 허브 파티션 수 변경
Stream Analytics 작업이 실행되는 동안 이벤트 허브의 파티션 수가 변경되면 다음 오류와 함께 작업이 실패합니다.
Microsoft.Streaming.Diagnostics.Exceptions.InputPartitioningChangedException
이 문제를 해결하려면 Stream Analytics 작업을 중지하고 다시 시작하여 새 파티션 수를 검색할 수 있습니다.
작업이 최대 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_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1,
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1,
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1,
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1,
AzureStreamAnalytics_a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1_1.
메모
작업 업그레이드 중에 판독기 수가 변경되면 임시 경고가 감사 로그에 기록됩니다. Stream Analytics 작업은 이러한 일시적인 문제에서 자동으로 복구됩니다.
Event Hubs 인스턴스에 새 소비자 그룹을 추가하려면 다음 단계를 수행합니다.
Azure Portal에 로그인합니다.
이벤트 허브를 찾으세요.
엔터티 제목 아래에서 Event Hubs를 선택합니다.
이름으로 이벤트 허브를 선택합니다.
Event Hubs 인스턴스 페이지의 엔터티 제목 아래에서 소비자 그룹을 선택합니다. 이름이 $Default 소비자 그룹이 나열됩니다.
+ 소비자 그룹을 선택하여 새 소비자 그룹을 추가합니다.
이벤트 허브를 가리키도록 Stream Analytics 작업에서 입력을 만들 때 해당 위치에 소비자 그룹을 지정했습니다. Event Hubs는 소비자 그룹이 지정되지 않은 경우 $Default 사용합니다. 소비자 그룹을 만든 후 Stream Analytics 작업에서 이벤트 허브 입력을 편집하고 새 소비자 그룹의 이름을 지정합니다.
파티션당 판독기는 Event Hubs 제한을 초과합니다.
스트리밍 쿼리 구문이 이벤트 허브 입력에 대해 동일한 리소스를 여러 번 참조하는 경우 작업 엔진은 동일한 소비자 그룹의 쿼리당 여러 판독기를 사용할 수 있습니다. 동일한 소비자 그룹에 대한 참조가 너무 많으면 작업이 5개 제한을 초과해 오류가 발생할 수 있습니다. 이러한 경우 여러 소비자 그룹에 걸쳐 여러 입력을 사용해 더 세분화할 수 있습니다.
파티션당 판독기 수가 Event Hubs 제한인 5개를 초과하는 시나리오는 다음과 같습니다.
여러
SELECT문:SELECT이벤트 허브 입력을 참조하는 여러 문을 사용하는 경우 각SELECT문은 새 수신기를 만듭니다.UNION: 사용하는UNION경우 동일한 이벤트 허브 및 소비자 그룹을 참조하는 여러 입력이 있을 수 있습니다.SELF JOIN: 작업을 사용하는SELF JOIN경우 동일한 이벤트 허브를 여러 번 참조할 수 있습니다.
다음 모범 사례는 파티션당 판독기 수가 Event Hubs 제한인 5개를 초과하는 시나리오를 완화하는 데 도움이 될 수 있습니다.
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 페이지를 참조하세요.