對輸入連線進行疑難排解

本文說明 Azure 串流分析輸入連線的常見問題、如何針對輸入問題進行疑難解答,以及如何修正問題。 許多疑難解答步驟都需要為您的串流分析作業啟用資源記錄。 如果您沒有啟用資源記錄,請參閱 使用資源記錄對 Azure 串流分析進行疑難解答。

作業未接收的輸入事件

  1. 測試輸入和輸出連線能力。 使用每個輸入和輸出的 [測試 連線 ion] 按鈕,確認輸入和輸出的連線能力。

  2. 檢查您的輸入數據。

    1. 針對每個輸入使用 [ 範例數據] 按鈕。 下載輸入範例數據。

    2. 檢查範例數據以瞭解架構和 數據類型

    3. 檢查 事件中 樞計量,以確保事件正在傳送。 如果事件中樞正在接收訊息,訊息計量應大於零。

  3. 請確定您已在輸入預覽中選取時間範圍。 選擇 [ 選取時間範圍],然後在測試查詢之前輸入範例持續時間。

    重要

    對於非網路插入的 ASA 作業,請不要以任何方式依賴來自 ASA 之連線的來源 IP 位址。 視不時發生的服務基礎結構作業而定,它們可以是公用或私人IP。

格式不正確的輸入事件導致還原序列化錯誤

當串流分析作業的輸入資料流包含格式不正確的訊息時,就會導致還原序列化問題。 例如,格式錯誤的訊息可能是因為 JSON 物件中的遺漏括弧或大括弧所造成,或是時間欄位中的時間戳格式不正確。

當串流分析作業從輸入收到格式不正確的訊息時,它會卸除訊息,併發出警告通知您。 串流分析作業的 [輸入] 圖格上會顯示警告符號。 只要作業處於執行中狀態,就會存在下列警告符號:

Azure Stream Analytics inputs tile

啟用資源記錄,以檢視錯誤的詳細數據,以及造成錯誤的訊息(承載)。 還原串行化錯誤的原因有很多。 如需有關特定還原串行化錯誤的詳細資訊,請參閱 輸入數據錯誤。 如果未啟用資源記錄,則會在 Azure 入口網站 中提供簡短通知。

Input details warning notification

如果訊息承載大於 32 KB 或二進位格式,請執行 GitHub 範例存放庫中提供的 CheckMalformedEvents.cs 程式代碼。 此程式代碼會讀取分割區標識碼、位移,並列印位於該位移中的數據。

導致輸入還原串行化錯誤的其他常見原因如下:

  1. 具有大於9223372036854775807值的整數數據行。
  2. 字串,而不是物件陣列或行分隔物件。 有效的範例:[{'a':1}]。 無效的範例:“'a' :1”。
  3. 使用事件中樞以 Avro 格式擷取 Blob 作為作業中的輸入。
  4. 在單一輸入事件中具有兩個數據行,但大小寫不同。 範例: column1COLUMN1

分割區計數變更

事件中樞的數據分割計數可以變更。 如果事件中樞的數據分割計數已變更,就必須停止並重新啟動串流分析作業。

當作業執行時,事件中樞的數據分割計數變更時,會顯示下列錯誤。 Microsoft.Streaming.Diagnostics.Exceptions.InputPartitioningChangedException

作業超過事件中樞接收者上限

使用事件中樞的最佳做法是使用多個取用者群組來進行作業延展性。 特定輸入之串流分析作業中的讀取器數目會影響單一取用者群組中的讀取器數目。 接收者的確切數目是以向外延展拓撲邏輯的內部實作詳細數據為基礎,而且不會在外部公開。 讀取器數目可以在作業啟動時或作業升級期間變更。

當接收者數目超過最大值時,會顯示下列錯誤訊息。 錯誤訊息包含取用者群組下事件中樞的現有連線清單。 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.

注意

當作業升級期間讀取器數目變更時,會將暫時性警告寫入稽核記錄。 串流分析作業會自動從這些暫時性問題復原。

在事件中樞中新增取用者群組

若要在事件中樞實例中新增取用者群組,請遵循下列步驟:

  1. 登入 Azure 入口網站。

  2. 找出您的事件中樞。

  3. 選取 [實體] 標題下的 [事件中樞]。

  4. 依名稱選取事件中樞。

  5. 在 [事件中樞實例] 頁面上的 [實體] 標題底下,選取 [取用者群組]。 列出名稱 為 $Default 的取用者群組。

  6. 選取 [+ 取用者群組 ] 以新增取用者群組。

    Add a consumer group in Event Hubs

  7. 當您在串流分析作業中建立輸入以指向事件中樞時,您會指定該處的取用者群組。 未指定任何專案時,會使用$Default。 建立新的取用者群組之後,請在串流分析作業中編輯事件中樞輸入,並指定新取用者群組的名稱。

每個分割區的讀取器超過事件中樞限制

如果您的串流查詢語法多次參考相同的輸入事件中樞資源,則作業引擎可以為每個來自該取用者群組的查詢使用多個讀取器。 當相同取用者群組的參考太多時,作業可能會超過5個限制並擲回錯誤。 在這些情況下,您可以使用下一節所述的解決方案,在多個取用者群組之間使用多個輸入來進一步劃分。

每個分割區的讀取器數目超過 5 個事件中樞限制的案例包括:

  • 多個 SELECT 語句:如果您使用多個參考 相同 事件中樞輸入的 SELECT 語句,每個 SELECT 語句都會建立新的接收者。

  • UNION:當您使用 UNION 時,可能會有多個輸入來參考 相同的 事件中樞和取用者群組。

  • SELF JOIN:當您使用 SELF JOIN 作業時,可以多次參考相同的事件中樞。

下列最佳做法可協助減輕每個分割區讀取器數目超過 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
…

確定輸入系結至不同的取用者群組

針對三個或多個輸入連線到相同事件中樞取用者群組的查詢,請建立個別的取用者群組。 這需要建立額外的串流分析輸入。

使用不同的取用者群組建立個別的輸入

您可以為相同的事件中樞建立具有不同取用者群組的個別輸入。 下列 UNION 查詢是 InputOne 和 InputTwo 參考相同事件中樞來源的範例。 任何查詢都可以有不同取用者群組的個別輸入。 UNION 查詢只是一個範例。

WITH 
DataOne AS 
(
SELECT * FROM InputOne 
),

DataTwo AS 
(
SELECT * FROM InputTwo 
),

SELECT foo FROM DataOne
UNION 
SELECT foo FROM DataTwo

每個分割區的讀取器超過 IoT 中樞 限制

串流分析作業會使用 IoT 中樞 的內建事件中樞相容端點,從 IoT 中樞 聯機和讀取事件。 如果您的每個分割區讀取超過 IoT 中樞 的限制,您可以使用事件中樞的解決方案加以解析。 您可以透過 IoT 中樞 入口網站端點會話或 IoT 中樞 SDK,為內建端點建立取用者群組。

取得說明

如需進一步的協助,請嘗試 Azure 串流分析Microsoft Q&A 問題頁面。

下一步