Memecahkan masalah koneksi input

Artikel ini menjelaskan masalah umum dengan koneksi input Azure Stream Analytics, cara memecahkan masalah tersebut, dan cara memperbaikinya.

Banyak langkah pemecahan masalah mengharuskan Anda mengaktifkan log sumber daya untuk pekerjaan Azure Stream Analytics Anda. Jika Anda tidak mengaktifkan log sumber daya, lihat Memecahkan masalah Azure Stream Analytics dengan menggunakan log sumber daya.

Pekerjaan tidak menerima peristiwa input

  1. Verifikasi konektivitas Anda ke input dan output. Gunakan tombol Uji Koneksi ion untuk setiap input dan output.

  2. Periksa data input Anda:

    1. Gunakan tombol Data Sampel untuk setiap input. Unduh data sampel input.

    2. Periksa data sampel untuk memahami jenis data dan skema.

    3. Periksa metrik Azure Event Hubs untuk memastikan bahwa peristiwa sedang dikirim. Metrik pesan harus lebih besar dari nol jika Azure Event Hubs menerima pesan.

  3. Pastikan Anda memilih rentang waktu dalam pratinjau input. Klik Pilih rentang waktu, lalu masukkan durasi sampel sebelum menguji kueri Anda.

Penting

Untuk pekerjaan Azure Stream Analytics yang tidak disuntikkan jaringan, jangan mengandalkan alamat IP sumber koneksi yang berasal dari Azure Stream Analytics dengan cara apa pun. Ip tersebut dapat berupa IP publik atau privat, tergantung pada operasi infrastruktur layanan yang terjadi dari waktu ke waktu.

Peristiwa input cacat menyebabkan kesalahan deserialisasi

Masalah deserialisasi terjadi saat aliran input pekerjaan Azure Stream Analytics Anda berisi pesan yang salah bentuk. Misalnya, tanda kurung atau kurung kurawal yang hilang dalam objek JSON, atau format stempel waktu yang salah di bidang waktu, dapat menyebabkan pesan cacat.

Saat pekerjaan Azure Stream Analytics menerima format pesan yang salah dari input, pekerjaan ini akan menghapus pesan dan memberi Anda peringatan. Simbol peringatan muncul di petak Input pekerjaan Azure Stream Analytics Anda. Simbol peringatan ada selama pekerjaan dalam keadaan berjalan.

Screenshot that shows the Inputs tile for Azure Stream Analytics.

Aktifkan log sumber daya untuk melihat detail kesalahan dan pesan (payload) yang menyebabkan kesalahan. Ada beberapa alasan mengapa kesalahan deserialisasi dapat terjadi. Untuk informasi selengkapnya tentang kesalahan deserialisasi tertentu, lihat Kesalahan data input. Jika log sumber daya tidak diaktifkan, pemberitahuan singkat akan muncul di portal Azure.

Screenshot that shows a warning notification about input details.

Jika payload pesan lebih besar dari 32 KB atau dalam format biner, jalankan kode CheckMalformedEvents.cs yang tersedia di repositori sampel GitHub. Kode ini membaca offset ID partisi dan mencetak data yang terletak di offset tersebut.

Alasan umum lainnya untuk kesalahan deserialisasi input adalah:

  • Kolom bilangan bulat yang memiliki nilai lebih besar dari 9223372036854775807.
  • String alih-alih array objek atau objek yang dipisahkan baris. Contoh yang valid: *[{'a':1}]*. Contoh tidak valid: *"'a' :1"*.
  • Menggunakan blob pengambilan Azure Event Hubs dalam format Avro sebagai input dalam pekerjaan Anda.
  • Memiliki dua kolom dalam satu peristiwa input yang hanya berbeda kasus. Contoh: *column1* dan *COLUMN1*.

Perubahan jumlah partisi

Jumlah partisi hub peristiwa dapat diubah. Jika jumlah partisi hub peristiwa diubah, Anda perlu menghentikan dan memulai ulang pekerjaan Azure Stream Analytics.

Kesalahan berikut muncul ketika jumlah partisi hub peristiwa diubah saat pekerjaan sedang berjalan: Microsoft.Streaming.Diagnostics.Exceptions.InputPartitioningChangedException.

Pekerjaan melebihi penerima Azure Event Hubs maksimum

Praktik terbaik untuk menggunakan Azure Event Hubs adalah dengan menggunakan beberapa grup konsumen untuk skalabilitas pekerjaan. Jumlah pembaca dalam pekerjaan Azure Stream Analytics untuk input tertentu memengaruhi jumlah pembaca dalam satu grup konsumen.

Jumlah penerima yang tepat didasarkan pada detail implementasi internal untuk logika topologi peluasan skala. Angka tidak diekspos secara eksternal. Jumlah pembaca dapat berubah ketika pekerjaan dimulai atau ditingkatkan.

Pesan kesalahan berikut muncul ketika jumlah penerima melebihi maksimum. Pesan menyertakan daftar koneksi yang ada yang dibuat ke Azure Event Hubs di bawah grup konsumen. Tag AzureStreamAnalytics menunjukkan bahwa koneksi berasal dari layanan streaming 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.

Catatan

Ketika jumlah pembaca berubah selama peningkatan pekerjaan, peringatan sementara ditulis ke log audit. Pekerjaan Azure Stream Analytics secara otomatis pulih dari masalah sementara ini.

Untuk menambahkan grup konsumen baru di instans Azure Event Hubs, ikuti langkah-langkah berikut:

  1. Masuk ke portal Microsoft Azure.

  2. Temukan pusat aktivitas Anda.

  3. Di bawah judul Entitas , pilih Azure Event Hubs.

  4. Pilih pusat aktivitas menurut nama.

  5. Pada halaman Instans Azure Event Hubs, di bawah judul Entitas, pilih Grup konsumen. Grup konsumen dengan nama $Default tercantum.

  6. Pilih + Grup Konsumen untuk menambahkan grup konsumen baru.

    Screenshot that shows the button for adding a consumer group in Event Hubs.

  7. Saat Anda membuat input dalam pekerjaan Azure Stream Analytics untuk menunjuk ke hub peristiwa, Anda menentukan grup konsumen di sana. Azure Event Hubs menggunakan $Default jika tidak ada grup konsumen yang ditentukan. Setelah Anda membuat grup konsumen, edit input pusat aktivitas di pekerjaan Azure Stream Analytics dan tentukan nama grup konsumen baru.

Pembaca per partisi melebihi batas Azure Event Hubs

Jika sintaks kueri streaming Anda mereferensikan sumber daya yang sama untuk input hub peristiwa beberapa kali, mesin pekerjaan dapat menggunakan beberapa pembaca per kueri dari grup konsumen yang sama. Ketika ada terlalu banyak referensi ke grup konsumen yang sama, pekerjaan dapat melebihi batas lima dan melemparkan kesalahan. Dalam keadaan tersebut, Anda dapat membagi lebih lanjut dengan menggunakan beberapa input di beberapa grup konsumen.

Skenario di mana jumlah pembaca per partisi melebihi batas Azure Event Hubs lima meliputi:

  • Beberapa SELECT pernyataan: Jika Anda menggunakan beberapa SELECT pernyataan yang merujuk ke input hub peristiwa yang sama , setiap SELECT pernyataan menyebabkan penerima baru dibuat.

  • UNION: Saat Anda menggunakan UNION, dimungkinkan untuk memiliki beberapa input yang merujuk ke hub peristiwa dan grup konsumen yang sama .

  • SELF JOIN: Saat Anda menggunakan SELF JOIN operasi, Anda dapat merujuk ke hub peristiwa yang sama beberapa kali.

Praktik terbaik berikut dapat membantu mengurangi skenario di mana jumlah pembaca per partisi melebihi batas lima Azure Event Hubs.

Pisahkan kueri Anda menjadi beberapa langkah dengan menggunakan klausul WITH

Klausa WITH menentukan kumpulan hasil bernama sementara yang FROM dapat dirujuk oleh klausul dalam kueri. Anda menentukan WITH klausa dalam cakupan eksekusi satu SELECT pernyataan.

Misalnya, daripada kueri ini:

SELECT foo 
INTO output1
FROM inputEventHub

SELECT bar
INTO output2
FROM inputEventHub 
…

Gunakan kueri ini:

WITH data AS (
   SELECT * FROM inputEventHub
)

SELECT foo
INTO output1
FROM data

SELECT bar
INTO output2
FROM data
…

Memastikan bahwa input mengikat grup konsumen yang berbeda

Untuk kueri di mana tiga atau lebih input terhubung ke grup konsumen Azure Event Hubs yang sama, buat grup konsumen terpisah. Tugas ini memerlukan pembuatan input Azure Stream Analytics tambahan.

Membuat input terpisah dengan grup konsumen yang berbeda

Anda dapat membuat input terpisah dengan grup konsumen yang berbeda untuk hub peristiwa yang sama. Dalam contoh UNION kueri berikut, InputOne dan InputTwo merujuk ke sumber Event Hubs yang sama. Setiap kueri dapat memiliki input terpisah dengan grup konsumen yang berbeda. Kueri UNION hanya satu contoh.

WITH 
DataOne AS 
(
SELECT * FROM InputOne 
),

DataTwo AS 
(
SELECT * FROM InputTwo 
),

SELECT foo FROM DataOne
UNION 
SELECT foo FROM DataTwo

Pembaca per partisi melebihi batas IoT Hub

Pekerjaan Azure Stream Analytics menggunakan titik akhir yang kompatibel dengan Event Hubs bawaan di Azure IoT Hub untuk menyambungkan dan membaca peristiwa dari IoT Hub. Jika pembaca per partisi Melebihi batas IoT Hub, Anda dapat menggunakan solusi untuk Azure Event Hubs untuk mengatasinya. Anda dapat membuat grup konsumen untuk titik akhir bawaan melalui sesi titik akhir portal IoT Hub atau melalui IoT Hub SDK.

Dapatkan bantuan

Untuk bantuan lebih lanjut, coba halaman Tanya Jawab Microsoft untuk Azure Stream Analytics.

Langkah berikutnya