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.