Output Azure Stream Analytics ke Azure Cosmos DB

Azure Stream Analytics dapat menghasilkan data dalam format JSON ke Azure Cosmos DB. Ini memungkinkan pengarsipan data dan kueri latensi rendah pada data JSON yang tidak terstruktur. Artikel ini membahas beberapa praktik terbaik untuk menerapkan konfigurasi ini (Stream Analytics ke Cosmos DB). Jika Anda tidak terbiasa dengan Azure Cosmos DB, lihat dokumentasi Azure Cosmos DB untuk memulai.

Catatan

  • Saat ini, Stream Analytics mendukung koneksi ke Azure Cosmos DB hanya melalui API SQL. API Azure Cosmos DB lainnya belum didukung. Jika Anda mengarahkan akun Stream Analytics ke Azure Cosmos DB yang dibuat dengan API lain, data mungkin tidak disimpan dengan benar.
  • Kami menyarankan agar Anda mengatur pekerjaan Anda ke tingkat kompatibilitas 1.2 saat menggunakan Azure Cosmos DB sebagai output.

Dasar-dasar Azure Cosmos DB sebagai target output

Output Azure Cosmos DB di Stream Analytics memungkinkan penulisan hasil pemrosesan streaming Anda sebagai output JSON ke dalam kontainer Azure Cosmos DB Anda. Stream Analytics tidak membuat kontainer di database Anda. Sebaliknya, Stream Analytics mengharuskan Anda untuk di depan. Anda kemudian dapat mengontrol biaya penagihan kontainer Azure Cosmos DB. Anda juga dapat menyetel performa, konsistensi, dan kapasitas kontainer secara langsung menggunakan API Azure Cosmos DB. Bagian berikut merinci beberapa opsi kontainer untuk Azure Cosmos DB.

Menyelaraskan konsistensi, ketersediaan, dan latensi

Agar sesuai dengan persyaratan aplikasi Anda, Azure Cosmos DB memungkinkan Anda menyempurnakan database dan kontainer dan melakukan trade-off antara konsistensi, ketersediaan, latensi, dan throughput.

Bergantung pada tingkat konsistensi baca apa yang dibutuhkan skenario Anda terhadap latensi baca dan tulis, Anda dapat memilih tingkat konsistensi di akun database. Anda dapat meningkatkan throughput dengan meningkatkan Unit Permintaan (RU) pada kontainer. Secara default, Azure Cosmos DB memungkinkan pengindeksan sinkron pada setiap operasi CRUD ke kontainer Anda. Opsi ini adalah opsi lain yang berguna untuk mengontrol performa tulis/baca di Azure Cosmos DB. Untuk informasi selengkapnya, tinjau artikel Mengubah database dan tingkat konsistensi kueri Anda.

Upsert dari Stream Analytics

Integrasi Stream Analytics dengan Azure Cosmos DB memungkinkan Anda menyisipkan atau memperbarui data di kontainer berdasarkan kolom ID Dokumen tertentu. Operasi ini juga disebut upsert. Stream Analytics menggunakan pendekatan upsert yang optimis. Pembaruan terjadi hanya saat penyisipan gagal dengan konflik ID dokumen.

Dengan tingkat kompatibilitas 1.0, Stream Analytics menjalankan pembaruan ini sebagai operasi PATCH, sehingga memungkinkan pembaruan parsial pada dokumen. Stream Analytics menambahkan properti baru atau mengganti properti yang ada secara bertahap. Namun, perubahan nilai properti array dalam dokumen JSON Anda mengakibatkan penimpaan seluruh array. Artinya, array tidak digabungkan.

Dengan 1.2, perilaku upsert dimodifikasi untuk menyisipkan atau mengganti dokumen. Bagian selanjutnya tentang tingkat kompatibilitas 1.2 menjelaskan lebih lanjut perilaku ini.

Jika dokumen JSON masuk memiliki bidang ID yang sudah ada, bidang tersebut otomatis digunakan sebagai kolom ID Dokumen di Azure Cosmos DB. Setiap tulisan berikutnya ditangani seperti itu, yang mengarah ke salah satu situasi ini:

  • ID unik mengarah ke penyisipan.
  • ID duplikat dan ID Dokumen yang diatur ke ID mengarah ke upsert.
  • ID duplikat dan ID Dokumen yang tidak diatur menyebabkan kesalahan, setelah dokumen pertama.

Jika Anda ingin menyimpan semua dokumen, termasuk dokumen yang memiliki ID duplikat, ganti nama bidang ID di kueri Anda (dengan menggunakan kata kunci AS). Biarkan Azure Cosmos DB membuat bidang ID atau mengganti ID dengan nilai kolom lain (dengan menggunakan kata kunci AS atau dengan menggunakan pengaturan ID Dokumen).

Partisi data di Azure Cosmos DB

Azure Cosmos DB otomatis menskalakan partisi berdasarkan beban kerja Anda. Jadi kami sarankan Anda menggunakan kontainer tak terbatas untuk mempartisi data Anda. Saat Stream Analytics menulis ke kontainer tak terbatas, Stream Analytics menggunakan sebanyak mungkin penulis paralel sebagai langkah kueri sebelumnya atau skema partisi input.

Catatan

Azure Stream Analytics hanya mendukung kontainer tak terbatas dengan tombol partisi di tingkat teratas. Misalnya, /region didukung. Tombol partisi bersarang (misalnya, /region/name) tidak didukung.

Tergantung pada pilihan kunci partisi Anda, Anda mungkin menerima peringatan ini:

CosmosDB Output contains multiple rows and just one row per partition key. If the output latency is higher than expected, consider choosing a partition key that contains at least several hundred records per partition key.

Penting untuk memilih properti kunci partisi yang memiliki banyak nilai berbeda, dan yang memungkinkan Anda mendistribusikan beban kerja secara merata di seluruh nilai ini. Sebagai artefak alami partisi, permintaan yang melibatkan kunci partisi yang sama dibatasi oleh throughput maksimum dari satu partisi.

Ukuran penyimpanan untuk dokumen yang termasuk dalam nilai kunci partisi yang sama dibatasi hingga 20 GB (batas ukuran partisi fisik adalah 50 GB). Kunci partisi yang ideal adalah kunci yang sering muncul sebagai filter dalam kueri Anda dan memiliki kardinalitas yang memadai untuk memastikan bahwa solusi Anda dapat diskalakan.

Kunci partisi yang digunakan untuk kueri Azure Stream Analytics dan Azure Cosmos DB tidak perlu identik. Topologi paralel sepenuhnya merekomendasikan penggunaan kunci Partisi Input, PartitionId, sebagai kunci partisi kueri Azure Stream Analytics tetapi itu mungkin bukan pilihan yang direkomendasikan untuk kunci partisi kontainer Azure Cosmos DB.

Kunci partisi juga merupakan batas untuk transaksi dalam prosedur dan pemicu yang disimpan untuk Azure Cosmos DB. Anda harus memilih kunci partisi sehingga dokumen yang terjadi bersamaan dalam transaksi memiliki nilai kunci partisi yang sama. Artikel Partisi di Azure Cosmos DB memberikan detail lebih lanjut tentang memilih kunci partisi.

Untuk kontainer Azure Cosmos DB tetap, Stream Analytics memungkinkan tidak ada cara untuk meningkatkan atau meluaskan skala setelah penuh. Stream Analytics memiliki batas atas 10 GB dan throughput 10.000 RU/dtk. Untuk memigrasikan data dari kontainer tetap ke kontainer tak terbatas (misalnya, satu dengan setidaknya 1.000 RU/dtk dan kunci partisi), gunakan alat migrasi data atau pustaka umpan perubahan.

Kemampuan untuk menulis ke beberapa kontainer tetap tidak akan digunakan lagi. Kami tidak merekomendasikannya untuk meluaskan skala pekerjaan Stream Analytics Anda.

Throughput yang disempurnakan dengan tingkat kompatibilitas 1.2

Dengan tingkat kompatibilitas 1.2, Stream Analytics mendukung integrasi native untuk menulis secara massal ke Azure Cosmos DB. Integrasi ini memungkinkan penulisan secara efektif ke Azure Cosmos DB sambil memaksimalkan throughput dan menangani permintaan pembatasan secara efisien.

Mekanisme penulisan yang ditingkatkan tersedia di bawah tingkat kompatibilitas baru karena perbedaan perilaku upsert. Dengan tingkat sebelum 1.2, perilaku upsert adalah menyisipkan atau menggabungkan dokumen. Dengan 1.2, perilaku upsert dimodifikasi untuk menyisipkan atau mengganti dokumen.

Dengan level sebelum 1.2, Stream Analytics menggunakan prosedur khusus yang disimpan untuk melakukan upsert dokumen secara massal per kunci partisi ke Azure Cosmos DB. Di sana, batch ditulis sebagai transaksi. Bahkan ketika satu data mencapai kesalahan sementara (pembatasan), seluruh batch harus dicoba. Perilaku ini membuat skenario dengan pembatasan yang wajar relatif lambat.

Contoh berikut menunjukkan dua pekerjaan Stream Analytics yang identik yang membaca dari input Azure Event Hubs yang sama. Kedua pekerjaan Stream Analytics sepenuhnya dipartisi dengan kueri passthrough dan menulis ke kontainer Azure Cosmos DB yang identik. Metrik di sebelah kiri berasal dari pekerjaan yang dikonfigurasi dengan tingkat kompatibilitas 1.0. Metrik di sebelah kanan dikonfigurasi dengan 1.2. Kunci partisi kontainer Azure Cosmos DB adalah GUID unik yang berasal dari peristiwa input.

Cuplikan layar yang menunjukkan perbandingan metrik Azure Stream Analytics.

Tingkat peristiwa yang masuk di Event Hubs dua kali lebih tinggi daripada kontainer Azure Cosmos DB (20.000 RU) dikonfigurasi untuk dibawa masuk, sehingga pembatasan diharapkan di Azure Cosmos DB. Namun, pekerjaan dengan 1.2 secara konsisten menulis pada throughput yang lebih tinggi (peristiwa output per menit) dan dengan penggunaan SU% rata-rata yang lebih rendah. Di lingkungan Anda, perbedaan ini tergantung pada beberapa faktor lagi. Faktor-faktor ini termasuk pilihan format peristiwa, ukuran peristiwa/pesan input, kunci partisi, dan kueri.

Cuplikan layar yang memperlihatkan perbandingan metrik Azure Cosmos DB.

Dengan 1.2, Azure Stream Analytics lebih cerdas dalam menggunakan 100 persen throughput yang tersedia di Azure Cosmos DB dengan beberapa pengiriman ulang dari pembatasan atau pembatasan laju. Perilaku ini memberikan pengalaman yang lebih baik untuk beban kerja lain seperti kueri yang berjalan pada kontainer secara bersamaan. Jika Anda ingin melihat bagaimana Analisis Aliran ditingkatkan dengan Azure Cosmos DB sebagai sink untuk 1.000 hingga 10.000 pesan per detik, coba proyek sampel Azure ini.

Throughput output Azure Cosmos DB identik dengan 1.0 dan 1.1. Kami sangat menyarankan Anda menggunakan tingkat kompatibilitas 1.2 di Stream Analytics dengan Azure Cosmos DB.

Output pengaturan Azure Cosmos DB untuk JSON

Menggunakan Azure Cosmos DB sebagai output di Stream Analytics membuat permintaan informasi berikut.

Cuplikan layar yang memperlihatkan bidang informasi untuk aliran output Azure Cosmos DB.

Bidang Deskripsi
Alias output Alias untuk merujuk ke output ini di kueri Stream Analytics Anda.
Langganan Langganan Azure.
ID Akun Nama atau URI titik akhir dari akun Azure Cosmos DB.
Kunci akun Kunci akses bersama untuk akun Azure Cosmos DB.
Database Nama database Azure Cosmos DB.
Nama kontainer Nama kontainer, seperti MyContainer. Satu kontainer bernama MyContainer harus ada.
ID Dokumen Opsional. Nama kolom dalam peristiwa output yang digunakan sebagai kunci unik tempat operasi penyisipan atau pembaruan harus didasarkan. Jika Anda membiarkannya kosong, semua peristiwa disisipkan, tanpa opsi pembaruan.

Setelah mengonfigurasi output Azure Cosmos DB, Anda dapat menggunakannya dalam kueri sebagai target pernyataan INTO. Saat Anda menggunakan output Azure Cosmos DB seperti itu, kunci partisi harus diatur secara eksplisit.

Catatan output harus berisi kolom yang peka huruf besar kecil yang dinamai sesuai dengan kunci partisi di Azure Cosmos DB. Untuk mencapai paralelisasi yang lebih besar, pernyataan tersebut mungkin memerlukan klausul PARTITION BY yang menggunakan kolom yang sama.

Berikut contoh kueri:

    SELECT TollBoothId, PartitionId
    INTO CosmosDBOutput
    FROM Input1 PARTITION BY PartitionId

Penanganan kesalahan dan percobaan ulang

Jika kegagalan sementara, tidak tersedianya layanan, atau pembatasan terjadi saat Stream Analytics mengirimkan peristiwa ke Azure Cosmos DB, Stream Analytics berusaha tanpa batas waktu untuk menyelesaikan operasi dengan sukses. Namun, hal tersebut tidak berupaya untuk mencoba kembali kegagalan berikut:

  • Unauthorized (kode kesalahan HTTP 401)
  • NotFound (kode kesalahan HTTP 404)
  • Forbidden (kode kesalahan HTTP 403)
  • BadRequest (kode kesalahan HTTP 400)

Masalah umum

  1. Batasan indeks unik ditambahkan ke koleksi dan data output dari Stream Analytics melanggar batasan ini. Pastikan data output dari Stream Analytics tidak melanggar batasan unik atau menghapus batasan. Untuk mengetahui informasi selengkapnya, lihat Batasan kunci unik di Azure Cosmos DB.

  2. Kolom PartitionKey tidak ada.

  3. Kolom Id tidak ada.

Langkah berikutnya