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.
Artikel ini menjelaskan konsep inti dan terminologi Azure Event Hubs. Untuk gambaran umum tingkat tinggi, lihat Apa itu Azure Event Hubs?
Sekilas konsep
| Konsep | Description |
|---|---|
| Namespace | Kontainer manajemen untuk satu atau beberapa pusat aktivitas. Mengontrol akses dan penskalakan jaringan. |
| Event hub | Log khusus tambahan yang menyimpan peristiwa. Setara dengan topik Kafka. |
| Partisi | Urutan peristiwa dalam hub acara. Mengaktifkan pemrosesan paralel. |
| Produser/Penerbit | Aplikasi yang mengirim peristiwa ke hub peristiwa. |
| Konsumen | Aplikasi yang membaca peristiwa dari pusat aktivitas. |
| Grup konsumen | Tampilan independen aliran peristiwa. Beberapa grup dapat membaca data yang sama secara terpisah. |
| Offset | Posisi peristiwa dalam partisi. Digunakan untuk melacak kemajuan membaca. |
| Titik Pemeriksaan | Menyimpan offset saat ini sehingga pengguna dapat melanjutkan dari tempat mereka berhenti. |
Architecture
Ruang Nama
Namespace untuk Event Hubs adalah kontainer manajemen untuk hub peristiwa (atau topik, dalam istilah Kafka). Ini menyediakan titik akhir jaringan dan mengontrol akses melalui fitur seperti pemfilteran IP, titik akhir layanan jaringan virtual, dan Private Link.
Sekat
Azure Event Hubs mengatur urutan peristiwa yang dikirim ke event hub ke dalam satu atau beberapa partisi. Ketika peristiwa yang lebih baru tiba, peristiwa tersebut akan ditambahkan ke akhir urutan ini.
Partisi dapat dianggap sebagai catatan komit. Partisi menyimpan data peristiwa yang berisi informasi berikut:
- Isi peristiwa
- Kumpulan properti yang ditentukan pengguna yang menjelaskan acara
- Metadata seperti offsetnya dalam partisi, jumlahnya dalam urutan aliran
- Tanda waktu sisi layanan saat diterima
Manfaat menggunakan partisi
Azure Event Hubs dirancang untuk membantu pemrosesan acara dalam jumlah besar, dan partisi membantu dengan dua cara:
- Meskipun Azure Event Hubs adalah layanan PaaS, ada realitas fisik di bawahnya. Memelihara log yang menjaga urutan peristiwa mensyaratkan bahwa peristiwa-peristiwa ini disimpan bersama-sama dalam penyimpanan dasar dan replikanya, yang mengakibatkan adanya batas throughput untuk log tersebut. Partisi memungkinkan penggunaan beberapa log paralel untuk hub peristiwa yang sama dan dengan demikian meningkatkan kapasitas throughput IO mentah yang tersedia.
- Aplikasi Anda sendiri harus dapat mengikuti pemrosesan volume peristiwa yang dikirim ke hub peristiwa. Ini mungkin kompleks dan membutuhkan kapasitas pemrosesan paralel yang signifikan dan terukur. Kapasitas satu proses untuk menangani peristiwa terbatas, sehingga Anda memerlukan beberapa proses. Partisi adalah cara solusi Anda mendukung proses tersebut dan memastikan bahwa setiap kejadian memiliki pemilik pemrosesan yang jelas.
Jumlah partisi
Jumlah partisi ditentukan pada saat membuat hub peristiwa. Ini harus antara satu dan jumlah partisi maksimum yang diizinkan untuk setiap tingkat harga. Untuk batas jumlah partisi untuk setiap tingkat, lihat artikel ini.
Kami menyarankan Anda memilih setidaknya sebanyak partisi yang Anda perkirakan diperlukan selama beban puncak aplikasi Anda untuk hub peristiwa tertentu tersebut.
Untuk tingkatan selain tingkat premium dan khusus, Anda tidak dapat mengubah jumlah partisi untuk pusat aktivitas setelah pembuatannya. Untuk hub peristiwa di tingkat premium atau khusus, Anda dapat meningkatkan jumlah partisi setelah pembuatannya, tetapi Anda tidak dapat menguranginya lagi. Distribusi aliran di seluruh partisi akan berubah ketika kunci partisi dipetakan ulang ke partisi. Oleh karena itu, Anda harus berusaha keras untuk menghindari perubahan tersebut jika urutan peristiwa penting bagi aplikasi Anda.
Mengatur jumlah partisi ke nilai maksimum yang diizinkan mungkin menarik, tetapi selalu ingat bahwa aliran peristiwa Anda harus terstruktur sedemikian rupa sehingga Anda memang dapat memanfaatkan banyak partisi. Jika Anda memerlukan pelestarian urutan secara mutlak untuk semua kejadian atau hanya beberapa sub-aliran, Anda mungkin tidak dapat memanfaatkan banyak partisi. Juga, partisi dalam jumlah banyak membuat sisi pemrosesan lebih kompleks.
Tidak masalah berapa banyak partisi yang ada di event hub dalam hal harga. Hal ini bergantung pada jumlah unit harga (unit throughput (TU) untuk tingkat standar, unit pemrosesan (PU) untuk tingkat premium, dan unit kapasitas (CU) untuk tingkat khusus) untuk namespace atau kluster khusus. Misalnya, pusat aktivitas tingkat standar dengan 32 partisi atau dengan satu partisi dikenakan biaya yang sama persis ketika namespace diatur ke satu kapasitas TU. Selain itu, Anda dapat menskalakan TU atau PU pada namespace atau CU kluster khusus Anda terlepas dari jumlah partisi.
Partisi adalah mekanisme organisasi data yang memungkinkan penerbitan dan konsumsi paralel. Meskipun mendukung pemrosesan dan penskalaan paralel, total kapasitas tetap dibatasi oleh alokasi penskalaan namespace. Unit penskalaan keseimbangan (unit throughput untuk tingkat standar, unit pemrosesan untuk tingkat premium, atau unit kapasitas untuk tingkat khusus) dan partisi untuk mencapai skala optimal.
Mulailah dengan profil beban kerja Anda: ukuran payload rata-rata, peristiwa per detik, dan sensitivitas terhadap penurunan throughput atau lonjakan latensi. Gunakan throughput per partisi di bawah ini sebagai titik awal, lalu validasi dengan pengujian beban:
- Tingkat standar: ~1 MB/dtk masuk dan ~2 MB/dtk keluar per partisi.
- Tingkat premium dan Khusus: ~1-2 MB/dtk masuk dan ~2-5 MB/dtk keluar per partisi.
Perkirakan partisi dengan membagi masukan dan keluaran yang diharapkan dengan tarif per partisi yang diterapkan dan menggunakan hasil yang lebih besar. Jika throughput atau latensi yang diamati tidak memenuhi ekspektasi, tingkatkan partisi (hanya tingkat Premium dan Khusus) dan coba lagi.
Partisi juga mengatur batas untuk paralelisme konsumen. Cara kerja langit-langit itu tergantung pada jenis konsumen:
-
Konsumen Eksklusif Epoch — Digunakan oleh
EventProcessorClient(.NET, Java) danEventHubConsumerClient(Python, JavaScript), yang merupakan pola yang direkomendasikan untuk beban kerja AMQP dalam produksi. Hanya satu konsumen epoch yang dapat memiliki partisi tertentu dalam grup konsumen pada satu waktu. Jika Anda menyebarkan lebih banyak instans prosesor daripada partisi, instans tambahan tidak diberi partisi apa pun dan menganggur sampai pemilik saat ini melepaskan partisi. Jika konsumen epoch baru terhubung dengan tingkat pemilik yang lebih tinggi, layanan memutuskan pemilik saat ini dengan kesalahanConsumerDisconnected, dan konsumen baru tersebut mengambil alih. - Konsumen non-epoch — Hingga 5 penerima non-epoch dapat membaca partisi yang sama secara bersamaan dalam grup konsumen. Setiap penerima melihat peristiwa yang sama (fan-out), sehingga mode ini tidak meningkatkan throughput pemrosesan per partisi. Menyambungkan konsumen epoch ke sebuah partisi akan memutus semua konsumen non-epoch pada partisi tersebut.
-
Konsumen Kafka — Konsumen Kafka menggunakan protokol koordinasi grup (
group.id) alih-alih epoch AMQP, tetapi model kepemilikan partisi setara: setiap partisi ditetapkan untuk tepat satu anggota konsumen dalam grup konsumen pada satu waktu. Saat anggota baru bergabung atau anggota yang sudah ada keluar, grup menyeimbangkan kembali dan mendistribusikan ulang penetapan partisi. Jika ada lebih banyak anggota konsumen daripada partisi, kelebihan anggota tidak mendapatkan penugasan dan tetap tidak aktif sampai penyeimbangan ulang di masa mendatang melepaskan partisi. Untuk mengurangi penyeimbangan ulang yang tidak perlu dari pemutusan sementara, atur instans unikgroup.instance.idper konsumen (keanggotaan statis).
Dalam praktiknya, jumlah partisi sama dengan jumlah maksimum konsumen paralel per grup konsumen terlepas dari apakah Anda menggunakan konsumen epoch AMQP atau konsumen Kafka. Faktorkan ini ke dalam jumlah partisi Anda saat Anda merencanakan peluasan skala.
Jika aplikasi Anda memiliki afinitas ke partisi tertentu, meningkatkan jumlah partisi tidak bermanfaat. Untuk informasi selengkapnya, lihat ketersediaan dan konsistensi.
Pemetaan peristiwa ke partisi
Anda dapat menggunakan kunci partisi untuk memetakan data peristiwa yang masuk ke dalam partisi tertentu untuk tujuan organisasi data. Kunci partisi adalah nilai yang disediakan pengirim yang diteruskan ke event hub. Ini diproses melalui fungsi hashing statis, yang membuat penetapan partisi. Jika Anda tidak menentukan kunci partisi saat menerbitkan peristiwa, maka penugasan round-robin akan digunakan.
Penerbit acara hanya mengetahui kunci partisinya, bukan partisi di mana peristiwa diterbitkan. Pemisahan kunci dan partisi ini membuat pengirim tidak perlu mengetahui terlalu banyak tentang pemrosesan hilir. Identitas unik per perangkat atau pengguna membuat kunci partisi yang baik, tetapi atribut lain seperti geografi juga dapat digunakan untuk mengelompokkan peristiwa terkait ke dalam satu partisi.
Menentukan kunci partisi memungkinkan menyimpan peristiwa terkait bersama-sama di partisi yang sama dan dalam urutan yang tepat di mana mereka tiba. Kunci partisi adalah beberapa untai yang diturunkan dari konteks aplikasi Anda dan mengidentifikasi keterkaitan peristiwa. Urutan peristiwa yang diidentifikasi oleh kunci partisi adalah aliran. Partisi adalah penyimpanan log multipleks untuk banyak aliran seperti itu.
Nota
Meskipun Anda dapat mengirim acara langsung ke partisi, kami tidak merekomendasikannya, terutama jika ketersediaan tinggi penting bagi Anda. Ini mengurangi ketersediaan event hub ke tingkat partisi. Untuk informasi selengkapnya, lihat Ketersediaan dan Konsistensi.
Penyelenggara acara
Produsen (atau penerbit) adalah aplikasi apa pun yang mengirim peristiwa ke pusat aktivitas.
Opsi penerbitan
| Metode | Description |
|---|---|
| azure SDK | .NET, Java, Python, JavaScript, Go |
| REST API | Permintaan HTTP POST untuk klien ringan |
| Klien Kafka | Gunakan produsen Kafka yang ada tanpa perubahan kode |
| AMQP 1.0 | Setiap klien AMQP seperti Apache Qpid |
Perilaku utama
- Batch atau individu: Menerbitkan peristiwa satu per satu atau dalam kelompok. Maksimum 1 MB per operasi penerbitan.
- Kunci partisi: Tentukan kunci partisi untuk mengelompokkan peristiwa terkait dalam partisi yang sama, memastikan pengiriman yang diurutkan.
- Otorisasi: Gunakan ID Microsoft Entra (OAuth2) atau Tanda Tangan Akses Bersama (SAS) untuk kontrol akses.
Kebijakan penerbit
Kebijakan penerbit memungkinkan kontrol terperinci saat Anda memiliki banyak penerbit independen. Setiap penerbit menggunakan pengidentifikasi unik:
//<my namespace>.servicebus.windows.net/<event hub name>/publishers/<my publisher name>
Nama penerbit harus cocok dengan token SAS yang digunakan untuk autentikasi. Saat menggunakan kebijakan penerbit, PartitionKey harus cocok dengan nama penerbit.
Pengguna acara
Konsumen adalah aplikasi apa pun yang membaca peristiwa dari pusat aktivitas. Azure Event Hubs menggunakan model penarikan—konsumen meminta peristiwa daripada peristiwa yang didorong kepada mereka.
Grup konsumen
Grup konsumen adalah tampilan independen dari aliran peristiwa. Beberapa grup konsumen dapat membaca pusat aktivitas yang sama secara bersamaan, masing-masing melacak posisi mereka sendiri.
| Pedoman | Recommendation |
|---|---|
| Pembaca per partisi | Satu pembaca aktif per partisi dalam grup konsumen (hingga lima dalam skenario khusus) |
| Grup bawaan | Setiap pusat aktivitas memiliki grup konsumen default ($Default) |
| Beberapa aplikasi | Membuat grup konsumen terpisah untuk setiap aplikasi (analitik, arsip, peringatan) |
//<my namespace>.servicebus.windows.net/<event hub name>/<Consumer Group #1>
//<my namespace>.servicebus.windows.net/<event hub name>/<Consumer Group #2>
Offset
Offset adalah posisi suatu peristiwa dalam partisi—anggap saja sebagai penunjuk (kursor). Konsumen menggunakan offset untuk menentukan tempat untuk mulai membaca. Anda dapat memulai dari:
- Nilai offset tertentu
- Stempel waktu
- Awal atau akhir aliran
Titik Pemeriksaan
Titik pemeriksaan adalah ketika konsumen menyimpan offsetnya saat ini. Ini memungkinkan:
- Dimulai kembali: Jika konsumen terputus, maka akan dilanjutkan dari titik pemeriksaan terakhir
- Failover: Instans konsumen baru dapat mengambil alih dari posisi terakhir yang ditinggalkan
- Pemutaran ulang: Memproses peristiwa historis dengan menentukan offset sebelumnya
Penting
Di AMQP, titik pemeriksaan adalah tanggung jawab konsumen. Layanan Azure Event Hubs menyediakan offset, tetapi konsumen harus menyimpan titik pemeriksaan.
Ikuti rekomendasi ini saat Anda menggunakan Azure Blob Storage sebagai penyimpanan titik pemeriksaan:
- Gunakan kontainer terpisah untuk setiap grup konsumen. Anda dapat menggunakan akun penyimpanan yang sama, tetapi menggunakan satu kontainer per setiap grup.
- Jangan gunakan akun penyimpanan untuk hal lain.
- Jangan gunakan kontainer untuk hal lain.
- Buat akun penyimpanan di wilayah yang sama dengan aplikasi yang disebarkan. Jika aplikasi lokal, coba pilih wilayah terdekat yang mungkin.
Pada halaman Akun penyimpanan di portal Azure, di bagian Blob service, pastikan bahwa pengaturan berikut dinonaktifkan.
- Namespace hierarkis
- Penghapusan sementara blob
- Pembuatan Versi
Klien pemroses acara
Azure SDK menyediakan klien konsumen cerdas yang menangani manajemen partisi, penyeimbangan beban, dan titik pemeriksaan secara otomatis:
| Bahasa | Klien |
|---|---|
| .NET | EventProcessorClient |
| Java | EventProcessorClient |
| Phyton | EventHubConsumerClient |
| JavaScript | EventHubConsumerClient |
Struktur data peristiwa
Setiap peristiwa berisi:
- Isi: Payload peristiwa
- Offset: Posisi dalam partisi
- Nomor urut: Urutan dalam partisi
- Properti pengguna: Metadata kustom
- Properti sistem: Metadata yang ditetapkan layanan (waktu antrean, dll.)
Manajemen data
Retensi Peristiwa
Peristiwa dihapus secara otomatis berdasarkan kebijakan penyimpanan berbasis waktu.
| Tier | Bawaan | Maximum |
|---|---|---|
| Standar | 1 jam | 7 hari |
| Premium | 1 jam | 90 hari |
| Berdedikasi | 1 jam | 90 hari |
Poin utama:
- Peristiwa tidak dapat dihapus secara eksplisit
- Perubahan retensi berlaku untuk acara yang ada
- Peristiwa akan menjadi tidak tersedia tepat pada saat periode penyimpanan berakhir
Nota
Azure Event Hubs adalah mesin streaming real-time, bukan database. Untuk penyimpanan jangka panjang, gunakan Event Hubs Capture untuk mengarsipkan peristiwa ke Azure Storage, Data Lake Storage, atau Azure Synapse.
Pengambilan Azure Event Hubs
Pengambilan secara otomatis menyimpan data streaming ke Azure Blob Storage atau Azure Data Lake Storage. Konfigurasikan ukuran minimum dan jendela waktu untuk mengontrol frekuensi pengambilan.
| Rancangan | Description |
|---|---|
| Avro | Format default untuk data yang diambil |
| Parquet | Tersedia melalui editor tanpa kode di portal Microsoft Azure (pelajari selengkapnya) |
Pemadatan log
Log compaction hanya mempertahankan peristiwa terbaru untuk setiap kunci unik, daripada menggunakan retensi berbasis waktu. Berguna untuk mempertahankan status saat ini tanpa menyimpan riwayat penuh.
Protokol
Azure Event Hubs mendukung beberapa protokol untuk fleksibilitas di berbagai jenis klien.
| Protokol | Kirim | Menerima | Paling cocok untuk |
|---|---|---|---|
| AMQP 1.0 | Yes | Yes | Throughput tinggi, latensi rendah, koneksi persisten |
| Apache Kafka | Yes | Yes | Aplikasi Kafka yang ada (versi 1.0+) |
| HTTPS | Yes | Tidak. | Klien ringan, lingkungan yang dibatasi firewall |
Perbandingan protokol
- AMQP: Memerlukan soket dua arah persisten. Biaya awal yang lebih tinggi, tetapi performa yang lebih baik untuk operasi yang sering. Digunakan oleh Azure SDK.
- Kafka: Dukungan asli berarti aplikasi Kafka yang ada berfungsi tanpa perubahan kode. Konfigurasikan ulang saja server bootstrap untuk menunjuk ke namespace Event Hubs Anda.
- HTTPS: HTTP POST sederhana untuk dikirim. Tidak menerima dukungan. Baik untuk penerbitan volume rendah sesekali.
Untuk detail integrasi Kafka, lihat Event Hubs untuk Apache Kafka.
Kontrol akses
Microsoft Entra ID
MICROSOFT Entra ID menyediakan autentikasi OAuth 2.0 dengan kontrol akses berbasis peran (RBAC). Tetapkan peran bawaan untuk mengontrol akses:
| Role | Permissions |
|---|---|
| Pemilik Data Azure Event Hubs | Akses penuh untuk mengirim dan menerima peristiwa |
| Azure Event Hubs Data Sender | Kirim peristiwa saja |
| Penerima Data Azure Event Hubs | Hanya menerima peristiwa |
Untuk detailnya, lihat Mengotorisasi akses dengan ID Microsoft Entra.
Tanda Tangan Akses Bersama (SAS)
Token SAS menyediakan akses terlingkup di namespace atau tingkat event hub. Token SAS dihasilkan dari kunci SAS dan biasanya hanya memberikan izin kirim atau dengarkan .
Untuk detailnya, lihat Autentikasi Tanda Tangan Akses Bersama.
Grup aplikasi
Grup aplikasi memungkinkan Anda menentukan kebijakan akses sumber daya (seperti pembatasan) untuk kumpulan aplikasi klien yang berbagi konteks keamanan (kebijakan SAS atau ID aplikasi Microsoft Entra).
Konten terkait
Get started
Pelajari lebih lanjut
- Unit skalabilitas dan throughput
- Ketersediaan dan konsistensi
- Gambaran Umum Capture Event Hubs
- Event Hubs untuk Apache Kafka