Bir olay hub'ına dinamik olarak bölüm ekleme (Apache Kafka konusu)

Event Hubs her bir tüketicinin ileti akışında yalnızca belirli bir alt küme ya da bölümü okuduğu bölünmüş bir tüketici modeli aracılığıyla ileti akışı sağlar. Bu model, olay işleme için yatay ölçek sağlar ve kuyruklar ile konularda kullanılamayan diğer akış odaklı özellikleri sunar. Bölüm bir olay hub'ında tutulan olayların sıralı dizisidir. Yeni olaylar geldikçe bu dizinin sonuna eklenir. Genel olarak bölümler hakkında daha fazla bilgi için bkz. Bölümler

Olay hub'ı oluşturulurken bölüm sayısını belirtebilirsiniz. Bazı senaryolarda, olay hub'ı oluşturulduktan sonra bölümler eklemeniz gerekebilir. Bu makalede, var olan bir olay hub'ına dinamik olarak bölümlerin nasıl ekleneceği açıklanır.

Önemli

Bölümlerin dinamik eklemeleri yalnızca Event Hubs'ın premium ve ayrılmış katmanlarında kullanılabilir.

Not

Apache Kafka istemcileri için olay hub'ı bir Kafka konusuyla eşler. Azure Event Hubs ile Apache Kafka arasında daha fazla eşleme için bkz. Kafka ve Event Hubs kavramsal eşlemesi

Bölüm sayısını güncelleştirme

Bu bölümde, bir olay hub'ının bölüm sayısını farklı yollarla (PowerShell, CLI vb.) güncelleştirme gösterilmektedir.

PowerShell

Bir olay hub'ında bölümleri güncelleştirmek için Set-AzEventHub PowerShell komutunu kullanın.

Set-AzEventHub -ResourceGroupName MyResourceGroupName -Namespace MyNamespaceName -Name MyEventHubName -partitionCount 12

CLI

Bir olay hub'ında az eventhubs eventhub update bölümleri güncelleştirmek için CLI komutunu kullanın.

az eventhubs eventhub update --resource-group MyResourceGroupName --namespace-name MyNamespaceName --name MyEventHubName --partition-count 12

Resource Manager şablonu

Resource Manager şablonundaki özelliğin partitionCount değerini güncelleştirin ve kaynağı güncelleştirmek için şablonu yeniden dağıtın.

    {
        "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

AlterTopics Bölüm sayısını artırmak için API'yi (örneğin kafka konuları CLI aracı aracılığıyla) kullanın. Ayrıntılar için bkz . Kafka konularını değiştirme.

Event Hubs istemcileri

Olay hub'ında bölüm sayısı güncelleştirildiğinde Event Hubs istemcilerinin nasıl davrandığını görelim.

Mevcut bir çift hub'a bölüm eklediğinizde, olay hub'ı istemcisi hizmetten varlık meta verilerinin (varlık olay hub'ınızdır ve meta veriler bölüm bilgileridir) değiştirildiğini bildiren bir MessagingException alır. İstemciler AMQP bağlantılarını otomatik olarak yeniden açar ve değiştirilen meta veri bilgilerini alır. İstemciler daha sonra normal şekilde çalışır.

Gönderen/üretici istemcileri

Event Hubs üç gönderen seçeneği sağlar:

  • Bölüm gönderen – Bu senaryoda, istemciler olayları doğrudan bir bölüme gönderir. Bölümler tanımlanabilir olsa ve olaylar doğrudan bunlara gönderilse de, bu düzeni önermeyiz. Bölümlerin eklenmesi bu senaryoya etki etmez. Yeni eklenen bölümleri algılamaları için uygulamaları yeniden başlatmanızı öneririz.
  • Bölüm anahtarı gönderen – bu senaryoda, istemciler olayları bir anahtarla gönderir, böylece bu anahtara ait tüm olaylar aynı bölümde olur. Bu durumda hizmet anahtarı karma olarak kullanır ve ilgili bölüme yönlendirir. Karma değişiklik nedeniyle bölüm sayısı güncelleştirmesi sıra dışı sorunlara neden olabilir. Bu nedenle, sıralamaya önem veriyorsanız, bölüm sayısını artırmadan önce uygulamanızın mevcut bölümlerdeki tüm olayları tükettiğinden emin olun.
  • Hepsini bir kez deneme gönderen (varsayılan) – Bu senaryoda Event Hubs hizmeti bölümler arasında olayları hepsini bir kez deneme ve ayrıca bir yük dengeleme algoritması kullanır. Event Hubs hizmeti bölüm sayısı değişikliklerini algılar ve bölüm sayısını değiştirdikten sonra saniyeler içinde yeni bölümlere gönderir.

Alıcı/tüketici istemcileri

Event Hubs, doğrudan alıcılar ve Olay İşlemcisi adlı kolay bir tüketici kitaplığı sağlar.

  • Doğrudan alıcılar – Doğrudan alıcılar belirli bölümleri dinler. Bölümlerin ölçeği bir olay hub'ı için genişletildiğinde çalışma zamanı davranışları etkilenmez. Doğrudan alıcıları kullanan uygulamanın yeni bölümleri alma ve alıcıları uygun şekilde atama işlemleriyle ilgilenmesi gerekir.

  • Olay işlemcisi konağı – Bu istemci varlık meta verilerini otomatik olarak yenilemez. Bu nedenle, bölüm sayısı artışını almaz. Olay işlemcisi örneğinin yeniden oluşturulması bir varlık meta verisi getirme işlemine neden olur ve bu da yeni eklenen bölümler için yeni bloblar oluşturur. Önceden var olan bloblar etkilenmez. Tüm örneklerin yeni eklenen bölümlerin farkında olduğundan ve yük dengelemenin tüketiciler arasında doğru şekilde işlendiğinden emin olmak için tüm olay işlemcisi örneklerinin yeniden başlatılması önerilir.

    .NET SDK'sının eski sürümünü (WindowsAzure.ServiceBus) kullanıyorsanız, denetim noktasındaki bölüm sayısı hizmetten getirilen bölüm sayısıyla eşleşmiyorsa olay işlemcisi ana bilgisayarı yeniden başlatma sırasında mevcut bir denetim noktasını kaldırır. Bu davranışın uygulamanız üzerinde bir etkisi olabilir.

    30 Eylül 2026'da Azure SDK yönergelerine uymayan WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus ve com.microsoft.azure.servicebus Azure Service Bus SDK kitaplıklarını kullanımdan kaldıracağız. Ayrıca SBMP protokolünün desteğini de sonlandıracağız, bu nedenle 30 Eylül 2026'da bu protokolü artık kullanamayacaksınız. Bu tarihten önce kritik güvenlik güncelleştirmeleri ve geliştirilmiş özellikler sunan en son Azure SDK kitaplıklarına geçiş yapın.

    Eski kitaplıklar 30 Eylül 2026'dan sonra da kullanılabilir olsa da artık Microsoft'tan resmi destek ve güncelleştirmeler almayacaktır. Daha fazla bilgi için bkz . destek kullanımdan kaldırma duyurusu.

Apache Kafka istemcileri

Bu bölümde, Azure Event Hubs'ın Kafka uç noktasını kullanan Apache Kafka istemcilerinin bir olay hub'ı için bölüm sayısı güncelleştirildiğinde nasıl davrandığı açıklanmaktadır.

Apache Kafka protokolüyle Event Hubs kullanan Kafka istemcileri, AMQP protokolü kullanan olay hub'ı istemcilerinden farklı davranır. Kafka istemcileri her metadata.max.age.ms milisaniyede bir meta verilerini güncelleştirir. Bu değeri istemci yapılandırmalarında belirtirsiniz. librdkafka Kitaplıklar aynı yapılandırmayı da kullanır. Meta veri güncelleştirmeleri, bölüm sayısı artışları dahil olmak üzere hizmet değişikliklerini istemcilere bildirir. Yapılandırmaların listesi için bkz . Event Hubs için Apache Kafka yapılandırmaları.

Gönderen/üretici istemcileri

Üreticiler her zaman gönderilen isteklerin oluşturulan her kayıt kümesi için bölüm hedefini içerdiğini dikte eder. Bu nedenle, tüm üretim bölümlemesi üreticinin aracı meta verilerinin görünümüyle istemci tarafında yapılır. Yeni bölümler üreticinin meta veri görünümüne eklendikten sonra üretici istekleri için kullanılabilir.

Tüketici/alıcı istemcileri

Bir tüketici grubu üyesi meta veri yenilemesi gerçekleştirip yeni oluşturulan bölümleri aldığında, bu üye bir grup yeniden dengelemesi başlatır. Ardından tüm grup üyeleri için tüketici meta verileri yenilenir ve yeni bölümler ayrılan yeniden dengeleme lideri tarafından atanır.

Öneriler

  • Üretici uygulamalarınızla bölüm anahtarı kullanıyorsanız ve bir bölümde sıralama yapmak için anahtar karmasına bağımlıysanız, bölümleri dinamik olarak eklemeniz önerilmez.

    Önemli

    Mevcut veriler sıralamayı korurken, bölüm ekleme nedeniyle bölüm sayısı değiştikten sonra karma iletiler için bölüm karması bozulur.

  • Aşağıdaki durumlarda mevcut bir konuya veya olay hub'ı örneğine bölüm eklenmesi önerilir:

    • Olayları göndermek için varsayılan yöntemi kullandığınızda
    • Kafka varsayılan bölümleme stratejileri, örnek – Yapışkan Atayıcı stratejisi

Sonraki adımlar

Bölümler hakkında daha fazla bilgi için bkz . Bölümler.