Secara dinamis menambahkan partisi ke pusat aktivitas (topik Apache Kafka)
Event Hubs menyediakan streaming pesan melalui pola konsumen yang dipartisi di mana setiap konsumen hanya membaca subset tertentu, atau partisi, dari aliran pesan. Pola ini memungkinkan skala horizontal untuk pemrosesan peristiwa dan menyediakan fitur lain yang berfokus pada aliran yang tidak tersedia dalam antrean dan topik. Partisi adalah urutan peristiwa kronologis yang diadakan di pusat aktivitas. Ketika peristiwa yang lebih baru tiba, peristiwa tersebut akan ditambahkan ke akhir urutan ini. Untuk informasi selengkapnya tentang partisi secara umum, lihat Partisi
Anda dapat menentukan jumlah partisi pada saat membuat pusat aktivitas. Dalam beberapa skenario, Anda mungkin perlu menambahkan partisi setelah pusat aktivitas dibuat. Artikel ini menjelaskan cara menambahkan partisi secara dinamis ke pusat aktivitas yang sudah ada.
Penting
Penambahan partisi yang dinamis hanya tersedia di tingkat premium dan khusus Azure Event Hubs.
Catatan
Untuk klien Apache Kafka, pusat aktivitas memetakan ke topik Kafka. Untuk pemetaan selengkapnya antara Azure Event Hubs dan Apache Kafka, lihat pemetaan konsep Kafka dan Event Hubs
Memperbarui jumlah partisi
Bagian ini memperlihatkan kepada Anda cara memperbarui jumlah partisi pusat aktivitas dengan cara yang berbeda (PowerShell, CLI, dan sebagainya.).
PowerShell
Gunakan perintah Set-AzEventHub PowerShell untuk memperbarui partisi di pusat aktivitas.
Set-AzEventHub -ResourceGroupName MyResourceGroupName -Namespace MyNamespaceName -Name MyEventHubName -partitionCount 12
CLI
Gunakan az eventhubs eventhub update
perintah CLI untuk memperbarui partisi di pusat aktivitas.
az eventhubs eventhub update --resource-group MyResourceGroupName --namespace-name MyNamespaceName --name MyEventHubName --partition-count 12
Templat Azure Resource Manager
Perbarui nilai partitionCount
properti di templat Resource Manager dan sebarkan ulang templat untuk memperbarui sumber daya.
{
"apiVersion": "2017-04-01",
"type": "Microsoft.EventHub/namespaces/eventhubs",
"name": "[concat(parameters('namespaceName'), '/', parameters('eventHubName'))]",
"location": "[parameters('location')]",
"dependsOn": [
"[resourceId('Microsoft.EventHub/namespaces', parameters('namespaceName'))]"
],
"properties": {
"messageRetentionInDays": 7,
"partitionCount": 12
}
}
Apache Kafka
Gunakan AlterTopics
API (misalnya, melalui alat CLI kafka-topics) untuk meningkatkan jumlah partisi. Untuk detailnya, lihat Memodifikasi topik Kafka.
Klien Event Hubs
Mari kita lihat bagaimana klien Event Hubs berperilaku ketika jumlah partisi diperbarui pada pusat aktivitas.
Ketika Anda menambahkan partisi ke pusat lama, klien pusat aktivitas menerima MessagingException
dari layanan yang memberi tahu klien bahwa metadata entitas (entitas adalah pusat aktivitas dan metadata Anda adalah informasi partisi) telah diubah. Klien akan secara otomatis membuka kembali tautan AMQP, yang kemudian akan mengambil informasi metadata yang diubah. Klien kemudian beroperasi secara normal.
Klien pengirim/produsen
Event Hubs menyediakan tiga opsi pengirim:
- Pengirim partisi – Dalam skenario ini, klien mengirim peristiwa langsung ke partisi. Meskipun partisi dapat diidentifikasi dan peristiwa dapat dikirim langsung kepada mereka, kami tidak merekomendasikan pola ini. Menambahkan partisi tidak memengaruhi skenario ini. Sebaiknya Anda memulai ulang aplikasi sehingga mereka dapat mendeteksi partisi yang baru ditambahkan.
- Pengirim kunci partisi – dalam skenario ini, klien mengirim peristiwa dengan kunci sehingga semua peristiwa milik kunci itu berakhir di partisi yang sama. Dalam hal ini, layanan melakukan hash kunci dan rute ke partisi yang sesuai. Pembaruan jumlah partisi dapat menyebabkan masalah yang tidak sesuai perintah karena perubahan hash. Jadi, jika Anda peduli tentang urutan, pastikan bahwa aplikasi Anda mengkonsumsi semua peristiwa dari partisi yang ada sebelum Anda meningkatkan jumlah partisi.
- Pengirim round-robin (default) – Dalam skenario ini, layanan Event Hubs melakukan round robin peristiwa di seluruh partisi, serta menggunakan algoritma penyeimbang muatan. Layanan Event Hubs mengetahui perubahan jumlah partisi dan akan dikirim ke partisi baru dalam hitungan detik untuk mengubah jumlah partisi.
Klien penerima/konsumen
Azure Event Hubs menyediakan penerima langsung dan pustaka konsumen mudah yang disebut Prosesor Peristiwa.
Penerima langsung – Penerima langsung mendengarkan partisi tertentu. Perilaku runtime mereka tidak terpengaruh ketika partisi diskalakan untuk pusat aktivitas. Aplikasi yang menggunakan penerima langsung perlu mengurus pengambilan partisi baru dan menetapkan penerima yang sesuai.
Host pemroses peristiwa – Klien ini tidak secara otomatis memperbarui metadata entitas. Jadi, tindakan ini tidak akan melakukan penyesuaian pada peningkatan jumlah partisi. Membuat ulang instans pemroses peristiwa akan menyebabkan pengambilan metadata entitas, yang pada gilirannya akan membuat blob baru untuk partisi yang baru ditambahkan. Blob yang sudah ada sebelumnya tidak akan terpengaruh. Memulai ulang semua instans pemroses peristiwa disarankan untuk memastikan bahwa semua instans mengetahui partisi yang baru ditambahkan, dan penyeimbang muatan ditangani dengan benar di antara konsumen.
Jika Anda menggunakan versi lama .NET SDK (WindowsAzure.ServiceBus), host pemroses peristiwa akan menghapus titik pemeriksaan yang ada saat memulai ulang jika jumlah partisi di titik pemeriksaan tidak cocok dengan jumlah partisi yang diambil dari layanan. Perilaku ini mungkin berdampak pada aplikasi Anda.
Pada 30 September 2026, kami akan menghentikan pustaka Azure Bus Layanan SDK WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus, dan com.microsoft.azure.servicebus, yang tidak sesuai dengan panduan Azure SDK. Kami juga akan mengakhiri dukungan protokol SBMP, sehingga Anda tidak akan lagi dapat menggunakan protokol ini setelah 30 September 2026. Migrasikan ke pustaka Azure SDK terbaru, yang menawarkan pembaruan keamanan penting dan kemampuan yang ditingkatkan, sebelum tanggal tersebut.
Meskipun pustaka lama masih dapat digunakan melebihi 30 September 2026, pustaka tersebut tidak akan lagi menerima dukungan dan pembaruan resmi dari Microsoft. Untuk informasi selengkapnya, lihat pengumuman penghentian dukungan.
Klien Apache Kafka
Bagian ini menjelaskan bagaimana klien Apache Kafka yang menggunakan titik akhir Kafka dari Azure Event Hubs berperilaku ketika jumlah partisi diperbarui untuk pusat aktivitas.
Klien Kafka yang menggunakan Event Hubs dengan protokol Apache Kafka berperilaku berbeda dari klien pusat aktivitas yang menggunakan protokol AMQP. Klien Kafka memperbarui metadata mereka metadata.max.age.ms
sekali setiap milidetik. Anda menentukan nilai ini dalam konfigurasi klien. Pustaka librdkafka
juga menggunakan konfigurasi yang sama. Pembaruan metadata memberi tahu klien tentang perubahan layanan termasuk peningkatan jumlah partisi. Untuk daftar konfigurasi, lihat Konfigurasi Apache Kafka untuk Azure Event Hubs.
Klien pengirim/produsen
Produsen selalu menentukan bahwa mengirim permintaan berisi tujuan partisi untuk setiap set rekaman yang dihasilkan. Jadi, semua partisi dilakukan di sisi klien dengan tampilan produsen tentang metadata broker. Setelah partisi baru ditambahkan ke tampilan metadata produser, partisi tersebut akan tersedia untuk permintaan produser.
Klien konsumen/penerima
Ketika anggota grup konsumen melakukan pembaruan metadata dan mengambil partisi yang baru dibuat, anggota tersebut memulai penyeimbangan ulang grup. Metadata konsumen kemudian akan diperbarui untuk semua anggota grup, dan partisi baru akan ditetapkan oleh pemimpin penyeimbangan ulang yang dialokasikan.
Rekomendasi
Jika Anda menggunakan kunci partisi dengan aplikasi produsen dan bergantung pada hash kunci untuk memastikan urutan dalam partisi, secara dinamis menambahkan partisi tidak disarankan.
Penting
Sementara data yang ada mempertahankan urutan, hash partisi akan rusak untuk pesan yang di-hash setelah jumlah partisi berubah karena penambahan partisi.
Menambahkan partisi ke topik atau instans pusat aktivitas yang ada disarankan dalam kasus berikut:
- Saat Anda menggunakan metode default untuk mengirim peristiwa
- Strategi partisi default Kafka, contoh - strategi Sticky Assignor
Langkah berikutnya
Untuk informasi selengkapnya tentang partisi, lihat Partisi.