Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Output Azure Cosmos DB di Azure Stream Analytics menulis hasil pemrosesan aliran sebagai dokumen JSON ke dalam kontainer Azure Cosmos DB. Mendukung pengarsipan data dan kueri berlatensi rendah pada data JSON yang tidak terstruktur. Memahami bagaimana output ini berperilaku membantu Anda mengonfigurasinya sesuai dengan throughput, konsistensi, dan partisi yang dibutuhkan skenario Anda.
Dasar-dasar Azure Cosmos DB sebagai target output
Output Azure Cosmos DB di Stream Analytics menulis hasil pemrosesan stream Anda sebagai output JSON ke dalam kontainer Azure Cosmos DB Anda. Jika Anda tidak terbiasa dengan Azure Cosmos DB, lihat dokumentasi Azure Cosmos DB untuk memulai.
Stream Analytics hanya terhubung ke Azure Cosmos DB melalui SQL API. 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. Saat Anda menggunakan Azure Cosmos DB sebagai output, atur pekerjaan Anda ke level kompatibilitas 1.2.
Stream Analytics tidak membuat kontainer di database Anda. Sebaliknya, Anda diharuskan membuatnya terlebih dahulu. 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
Untuk menyesuaikan kebutuhan aplikasi Anda, sesuaikan database dan kontainer di Azure Cosmos DB dan lakukan kompromi antara konsistensi, ketersediaan, latensi, dan throughput.
Tergantung pada tingkat konsistensi baca yang dibutuhkan skenario Anda terhadap latensi baca dan tulis, pilih tingkat konsistensi pada akun database Anda. Untuk meningkatkan laju pemrosesan, tingkatkan Unit Permintaan (RU) pada kontainer. Secara default, Azure Cosmos DB memungkinkan pengindeksan sinkron pada setiap operasi CRUD ke kontainer Anda. Opsi ini adalah cara berguna lainnya untuk mengontrol kinerja membaca dan menulis di Azure Cosmos DB. Untuk informasi selengkapnya, tinjau artikel Mengubah database dan tingkat konsistensi kueri Anda.
Upsert dari Stream Analytics
Dengan menggunakan integrasi Stream Analytics dengan Azure Cosmos DB, Anda dapat menyisipkan atau memperbarui catatan di kontainer Anda berdasarkan kolom ID Dokumen yang diberikan. Operasi ini juga disebut upsert. Stream Analytics menggunakan pendekatan upsert yang optimis. Pembaruan terjadi hanya saat penyisipan gagal dengan konflik ID dokumen.
Dengan menggunakan level kompatibilitas 1.0, Stream Analytics melakukan pembaruan ini sebagai operasi PATCH, sehingga mendukung pembaruan parsial pada dokumen. Stream Analytics menambahkan properti baru atau mengganti properti yang ada secara bertahap. Namun, perubahan nilai-nilai properti array dalam dokumen JSON Anda berakibat pada penimpaan seluruh array. Artinya, array tidak digabung dalam proses ini.
Dengan menggunakan level kompatibilitas 1.2, perilaku upsert berubah untuk memasukkan atau mengganti dokumen. Bagian selanjutnya tentang tingkat kompatibilitas 1.2 menjelaskan lebih lanjut perilaku ini.
Jika dokumen JSON yang masuk memiliki bidang ID yang sudah ada, Azure Cosmos DB secara otomatis menggunakan bidang tersebut sebagai kolom ID Dokumen. Stream Analytics memperlakukan operasi penulisan berikutnya dengan cara ini, sehingga menghasilkan salah satu situasi berikut:
- ID unik memungkinkan penyisipan.
- ID duplikat dan ID Dokumen yang diatur ke ID mengarah ke upsert.
- ID duplikat dan ID Dokumen yang belum 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).
Pemartisian data di Azure Cosmos DB
Azure Cosmos DB otomatis menskalakan partisi berdasarkan beban kerja Anda. Gunakan kontainer tak terbatas untuk membagi data Anda. Saat Stream Analytics menulis ke kontainer tak terbatas, ia menggunakan jumlah penulis paralel yang sama banyaknya dengan 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. Kunci 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.
Pilih properti kunci partisi yang memiliki banyak nilai berbeda dan mendistribusikan beban kerja Anda secara merata di seluruh nilai-nilai tersebut. Sebagai artefak alami dari partisi, throughput maksimum dari satu partisi membatasi permintaan yang melibatkan kunci partisi yang sama.
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 ideal adalah kunci yang sering muncul sebagai filter dalam kueri Anda dan memiliki kardinalitas yang cukup untuk memastikan solusi Anda dapat diskalakan.
Kunci partisi yang digunakan untuk kueri Azure Stream Analytics dan Azure Cosmos DB tidak perlu identik. Untuk topologi paralel penuh, gunakan kunci PartitionIdInput Partition, , sebagai kunci partisi pada kueri Stream Analytics, tetapi pilihan tersebut 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. Pilih kunci partisi sehingga dokumen yang terjadi bersama dalam transaksi berbagi 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 tidak menyediakan cara untuk meningkatkan atau memperluas setelah kontainer penuh. Mereka 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. Jangan gunakan itu untuk memperluas pekerjaan Stream Analytics Anda.
Throughput yang ditingkatkan dengan tingkat kompatibilitas 1.2
Dengan menggunakan level kompatibilitas 1.2, Stream Analytics mendukung integrasi native untuk menulis secara massal ke Azure Cosmos DB. Dengan menggunakan integrasi ini, Stream Analytics menulis secara efektif ke Azure Cosmos DB sambil memaksimalkan throughput dan menangani permintaan throttling secara efisien.
Mekanisme penulisan data yang ditingkatkan tersedia pada tingkat kompatibilitas baru karena perbedaan perilaku upsert. Pada level sebelum 1.2, perilaku upsert adalah menyisipkan atau menggabungkan dokumen. Dengan menggunakan versi 1.2, perilaku upsert berubah untuk menyisipkan atau menggantikan dokumen.
Pada level sebelum 1.2, Stream Analytics menggunakan prosedur tersimpan khusus untuk melakukan upsert massal dokumen berdasarkan setiap kunci partisi ke Azure Cosmos DB. Di sana, Stream Analytics menulis batch sebagai transaksi. Bahkan ketika satu rekaman mengalami kesalahan sementara (throttling), Stream Analytics harus mencoba ulang seluruh batch. Perilaku ini membuat skenario dengan throttling yang masuk akal pun menjadi 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 berasal dari pekerjaan yang dikonfigurasi dengan 1.2. Kunci partisi kontainer Azure Cosmos DB adalah GUID unik yang berasal dari peristiwa input.
Laju peristiwa yang masuk di Event Hubs dua kali lebih tinggi daripada yang dikonfigurasi dapat ditangani oleh kontainer Azure Cosmos DB (20.000 RU), sehingga Anda dapat mengharapkan pembatasan throughput di Azure Cosmos DB. Namun, pekerjaan dengan 1.2 secara konsisten menghasilkan throughput yang lebih tinggi (peristiwa output per menit) dan dengan penggunaan rata-rata SU% yang lebih rendah. Di lingkungan Anda, perbedaan ini bergantung pada beberapa faktor lain. Faktor-faktor ini termasuk pilihan format peristiwa, ukuran peristiwa/pesan input, kunci partisi, dan kueri.
Dengan menggunakan versi 1.2, Stream Analytics secara lebih cerdas memanfaatkan 100 persen throughput yang tersedia di Azure Cosmos DB, dengan sedikit pengajuan ulang akibat throttling atau pembatasan rate. Perilaku ini memberikan pengalaman yang lebih baik bagi beban kerja lain, seperti kueri yang berjalan secara bersamaan pada kontainer. Jika Anda ingin melihat bagaimana Stream Analytics mengatur skalanya dengan Azure Cosmos DB sebagai tempat penyimpanan untuk 1.000 hingga 10.000 pesan per detik, coba proyek sampel Azure ini.
Throughput output Azure Cosmos DB tetap identik saat menggunakan 1.0 dan 1.1. Kami sangat menyarankan Anda menggunakan tingkat kompatibilitas 1.2 di Stream Analytics dengan Azure Cosmos DB.
Pengaturan output Azure Cosmos DB untuk JSON
Saat Anda mengonfigurasi Azure Cosmos DB sebagai output di Stream Analytics, properti berikut mendefinisikan output.
| 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 pangkalan data Azure Cosmos DB. |
| Nama kontainer | Nama kontainer, seperti MyContainer. Satu kontainer bernama MyContainer harus ada. |
| ID Dokumen | Opsional. Nama kolom dalam event output yang berfungsi sebagai kunci unik untuk operasi sisipan atau pembaruan. Jika Anda membiarkannya kosong, Stream Analytics akan menyisipkan semua event 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 dengan cara itu, Anda harus mengatur kunci partisi secara eksplisit.
Catatan output harus berisi kolom yang bersifat case-sensitive yang dinamakan 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, ia tidak mencoba mencoba ulang untuk kegagalan Unauthorized (kode kesalahan HTTP 401), NotFound (kode kesalahan HTTP 404), Forbidden (kode kesalahan HTTP 403), atau BadRequest (kode kesalahan HTTP 400).
Masalah umum yang menyebabkan output Azure Cosmos DB gagal
Beberapa kondisi dapat menyebabkan output Azure Cosmos DB gagal. Data keluaran dari Stream Analytics mungkin melanggar batasan indeks unik pada kontainer, kolom tersebut PartitionKey mungkin tidak ada, atau kolom tersebut Id mungkin tidak ada. Untuk informasi lebih lanjut tentang kendala indeks unik, lihat Kendala kunci unik di Azure Cosmos DB.