Lägg till partitioner dynamiskt i en händelsehubb (Apache Kafka-ämne)

Event Hubs tillhandahåller meddelandeströmning via ett partitionerat konsumentmönster där varje konsument endast läser en specifik delmängd, eller partition, av meddelandeströmmen. Det här mönstret gör det möjligt att skala horisontellt för händelsebearbetning och tillhandahåller andra strömfokuserade funktioner som inte är tillgängliga i köer och ämnen. En partition är en ordnad sekvens av händelser som hålls kvar i en händelsehubb. När nyare händelser kommer läggs de till i slutet av den här sekvensen. Mer information om partitioner i allmänhet finns i Partitioner

Du kan ange antalet partitioner när du skapar en händelsehubb. I vissa scenarier kan du behöva lägga till partitioner när händelsehubben har skapats. Den här artikeln beskriver hur du dynamiskt lägger till partitioner i en befintlig händelsehubb.

Viktigt!

Dynamiska tillägg av partitioner är endast tillgängliga på premium - och dedikerade nivåer i Event Hubs.

Kommentar

För Apache Kafka-klienter mappar en händelsehubb till ett Kafka-ämne. Fler mappningar mellan Azure Event Hubs och Apache Kafka finns i Konceptmappning av Kafka och Event Hubs

Uppdatera antalet partitioner

Det här avsnittet visar hur du uppdaterar antalet partitioner för en händelsehubb på olika sätt (PowerShell, CLI och så vidare).).

PowerShell

Använd Kommandot Set-AzEventHub PowerShell för att uppdatera partitioner i en händelsehubb.

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

CLI

Använd CLI-kommandot az eventhubs eventhub update för att uppdatera partitioner i en händelsehubb.

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

Resource Manager-mall

Uppdatera värdet för partitionCount egenskapen i Resource Manager-mallen och distribuera om mallen för att uppdatera resursen.

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

Använd API:et AlterTopics (till exempel via cli-verktyget kafka-topics ) för att öka antalet partitioner. Mer information finns i Ändra Kafka-ämnen.

Event Hubs-klienter

Nu ska vi titta på hur Event Hubs-klienter beter sig när antalet partitioner uppdateras på en händelsehubb.

När du lägger till en partition i en befintlig jämn hubb tar händelsehubbens klient emot en MessagingException från tjänsten som informerar klienterna om att entitetsmetadata (entiteten är din händelsehubb och metadata är partitionsinformationen) har ändrats. Klienterna öppnar automatiskt AMQP-länkarna igen, vilket sedan hämtar den ändrade metadatainformationen. Klienterna fungerar sedan normalt.

Avsändare/producentklienter

Event Hubs innehåller tre avsändaralternativ:

  • Partitionssändare – I det här scenariot skickar klienter händelser direkt till en partition. Även om partitioner är identifierbara och händelser kan skickas direkt till dem rekommenderar vi inte det här mönstret. Att lägga till partitioner påverkar inte det här scenariot. Vi rekommenderar att du startar om program så att de kan identifiera nyligen tillagda partitioner.
  • Avsändare av partitionsnyckel – i det här scenariot skickar klienterna händelserna med en nyckel så att alla händelser som tillhör den nyckeln hamnar i samma partition. I det här fallet hashar tjänsten nyckeln och dirigerar till motsvarande partition. Uppdateringen av antalet partitioner kan orsaka fel i fel ordning på grund av hashändring. Om du bryr dig om att beställa kontrollerar du att programmet förbrukar alla händelser från befintliga partitioner innan du ökar antalet partitioner.
  • Avsändare med resursallokering (standard) – I det här scenariot robinar Event Hubs-tjänsten händelserna mellan partitioner och använder även en belastningsutjämningsalgoritm. Event Hubs-tjänsten är medveten om ändringar i antalet partitioner och skickar till nya partitioner inom några sekunder efter att partitionsantalet har ändrats.

Mottagare/konsumentklienter

Event Hubs tillhandahåller direktmottagare och ett enkelt konsumentbibliotek som kallas händelseprocessor.

  • Direktmottagare – Direktmottagarna lyssnar på specifika partitioner. Deras körningsbeteende påverkas inte när partitioner skalas ut för en händelsehubb. Programmet som använder direktmottagare måste ta hand om att plocka upp de nya partitionerna och tilldela mottagarna i enlighet med detta.

  • Händelseprocessorvärd – Den här klienten uppdaterar inte entitetsmetadata automatiskt. Det skulle alltså inte öka antalet partitioner. Om du återskapar en händelseprocessorinstans kommer en entitetsmetadata att hämtas, vilket i sin tur skapar nya blobar för de nyligen tillagda partitionerna. Befintliga blobar påverkas inte. Vi rekommenderar att du startar om alla händelseprocessorinstanser för att säkerställa att alla instanser är medvetna om de nyligen tillagda partitionerna och att belastningsutjämningen hanteras korrekt bland konsumenterna.

    Om du använder den gamla versionen av .NET SDK (WindowsAzure.ServiceBus) tar händelseprocessorvärden bort en befintlig kontrollpunkt vid omstart om antalet partitioner i kontrollpunkten inte matchar det partitionsantal som hämtas från tjänsten. Det här beteendet kan påverka ditt program.

    Den 30 september 2026 drar vi tillbaka Azure Service Bus SDK-biblioteken WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus och com.microsoft.azure.servicebus, som inte följer Riktlinjerna för Azure SDK. Vi kommer också att avsluta stödet för SBMP-protokollet, så du kommer inte längre att kunna använda det här protokollet efter den 30 september 2026. Migrera till de senaste Azure SDK-biblioteken, som erbjuder kritiska säkerhetsuppdateringar och förbättrade funktioner, före det datumet.

    Även om de äldre biblioteken fortfarande kan användas efter den 30 september 2026 får de inte längre officiell support och uppdateringar från Microsoft. Mer information finns i meddelandet om supportavgång.

Apache Kafka-klienter

I det här avsnittet beskrivs hur Apache Kafka-klienter som använder Kafka-slutpunkten för Azure Event Hubs beter sig när partitionsantalet uppdateras för en händelsehubb.

Kafka-klienter som använder Event Hubs med Apache Kafka-protokollet beter sig annorlunda än de händelsehubbklienter som använder AMQP-protokoll. Kafka-klienter uppdaterar sina metadata en gång varje metadata.max.age.ms millisekunder. Du anger det här värdet i klientkonfigurationerna. Biblioteken librdkafka använder också samma konfiguration. Metadatauppdateringar informerar klienterna om tjänständringar, inklusive ökningar av antalet partitioner. En lista över konfigurationer finns i Apache Kafka-konfigurationer för Event Hubs.

Avsändare/producentklienter

Producenter dikterar alltid att sändningsbegäranden innehåller partitionsmålet för varje uppsättning producerade poster. Därför görs all partitionering av produkter på klientsidan med producentens vy över asynkrona asynkrona metadata. När de nya partitionerna har lagts till i producentens metadatavy blir de tillgängliga för producentbegäranden.

Konsument-/mottagarklienter

När en konsumentgruppmedlem utför en metadatauppdatering och hämtar de nyligen skapade partitionerna initierar medlemmen en ombalansering av gruppen. Konsumentmetadata uppdateras sedan för alla gruppmedlemmar och de nya partitionerna tilldelas av den tilldelade ombalanseringsledaren.

Rekommendationer

  • Om du använder partitionsnyckel med dina producentprogram och är beroende av nyckelshashing för att säkerställa ordning i en partition rekommenderas inte dynamiskt att lägga till partitioner.

    Viktigt!

    Medan befintliga data bevarar ordningen, kommer partitionshashing att brytas för meddelanden som hashats efter att partitionsantalet har ändrats på grund av tillägg av partitioner.

  • Att lägga till partition i ett befintligt ämne eller en händelsehubbinstans rekommenderas i följande fall:

    • När du använder standardmetoden för att skicka händelser
    • Kafka-standardpartitioneringsstrategier, till exempel – Strategi för fäst tilldelning

Nästa steg

Mer information om partitioner finns i Partitioner.