Dynamické přidávání oddílů do centra událostí (téma Apache Kafka)

Služba Event Hubs poskytuje datový proud zpráv pomocí schématu rozdělujícího datový proud na oddíly pro jednotlivé příjemce. To zajišťuje, aby každý příjemce četl jenom konkrétní podmnožinu nebo oddíl datového proudu zpráv. Toto schéma umožňuje vodorovné škálování zpracování událostí a poskytuje další funkce zaměřené na datový proud, které nejsou ve frontách a tématech k dispozici. Oddíl je seřazená posloupnost událostí, která se nachází v centru událostí. Při příchodu novějších událostí se na konec této sekvence přidají. Další informace o oddílech obecně najdete v tématu Oddíly

V době vytváření centra událostí můžete určit počet oddílů. V některých scénářích možná budete muset po vytvoření centra událostí přidat oddíly. Tento článek popisuje, jak dynamicky přidávat oddíly do existujícího centra událostí.

Důležité

Dynamické přidávání oddílů je k dispozici pouze v premium a vyhrazených úrovních služby Event Hubs.

Poznámka:

V případě klientů Apache Kafka se centrum událostí mapuje na téma Kafka. Další mapování mezi Azure Event Hubs a Apache Kafka najdete v koncepčním mapování Kafka a event Hubs.

Aktualizace počtu oddílů

V této části se dozvíte, jak aktualizovat počet oddílů centra událostí různými způsoby (PowerShell, rozhraní příkazového řádku atd.).

PowerShell

K aktualizaci oddílů v centru událostí použijte příkaz Set-AzEventHub PowerShell.

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

Rozhraní příkazového řádku

az eventhubs eventhub update K aktualizaci oddílů v centru událostí použijte příkaz rozhraní příkazového řádku.

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

Šablona Resource Manageru

Aktualizujte hodnotu partitionCount vlastnosti v šabloně Resource Manageru a znovu nasaďte šablonu, aby se prostředek aktualizoval.

    {
        "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 Ke zvýšení počtu oddílů použijte rozhraní API (například prostřednictvím nástroje rozhraní příkazového řádku kafka-topics). Podrobnosti najdete v tématu Úpravy témat Kafka.

Klienti služby Event Hubs

Pojďme se podívat, jak se klienti Event Hubs chovají, když se počet oddílů aktualizuje v centru událostí.

Když přidáte oddíl do existujícího sudého centra, klient centra událostí obdrží MessagingException od služby od klienta informace o tom, že metadata entity (entita je vaše centrum událostí a metadata jsou informace o oddílu) byly změněny. Klienti automaticky znovu otevřou odkazy AMQP, které pak vyzvednou změněné informace metadat. Klienti pak fungují normálně.

Klienti odesílatele/producenta

Služba Event Hubs nabízí tři možnosti odesílatele:

  • Odesílatel oddílu – V tomto scénáři klienti odesílají události přímo do oddílu. I když jsou oddíly identifikovatelné a události se dají odesílat přímo do nich, nedoporučujeme tento vzor. Přidání oddílů nemá vliv na tento scénář. Doporučujeme restartovat aplikace, aby mohly detekovat nově přidané oddíly.
  • Odesílatel klíče oddílu – v tomto scénáři klienti odesílají události s klíčem, aby všechny události patřící k tomuto klíči skončily ve stejném oddílu. V tomto případě služba hashuje klíč a směruje do odpovídajícího oddílu. Aktualizace počtu oddílů může způsobit problémy s chybou mimo pořadí kvůli změně hodnoty hash. Takže pokud vás zajímá řazení, před zvýšením počtu oddílů zajistěte, aby vaše aplikace spotřebovává všechny události z existujících oddílů.
  • Odesílatel kruhového dotazování (výchozí) – V tomto scénáři služba Event Hubs dotazuje události napříč oddíly a používá také algoritmus vyrovnávání zatížení. Služba Event Hubs ví o změnách počtu oddílů a během několika sekund od změny počtu oddílů se odešle do nových oddílů.

Klienti příjemce/příjemce

Event Hubs poskytuje přímé příjemce a snadnou spotřebitelskou knihovnu označovanou jako Procesor událostí.

  • Přímé přijímače – Přímí příjemci naslouchají konkrétním oddílům. Jejich chování za běhu není ovlivněno při horizontálním navýšení kapacity oddílů pro centrum událostí. Aplikace, která používá přímé příjemce, se musí postarat o vyzvednutí nových oddílů a přiřazení příjemců odpovídajícím způsobem.

  • Hostitel procesoru událostí – Tento klient automaticky neaktualizuje metadata entity. Proto by se nezvyšilo zvýšení počtu oddílů. Opětovné vytvoření instance procesoru událostí způsobí načtení metadat entity, což zase vytvoří nové objekty blob pro nově přidané oddíly. Na existující objekty blob to nebude mít vliv. Restartování všech instancí procesoru událostí se doporučuje zajistit, aby všechny instance věděly o nově přidaných oddílech a vyrovnávání zatížení se mezi příjemci správně zpracuje.

    Pokud používáte starou verzi sady .NET SDK (WindowsAzure.ServiceBus), hostitel procesoru událostí po restartování odebere existující kontrolní bod, pokud počet oddílů v kontrolním bodu neodpovídá počtu oddílů načteným ze služby. Toto chování může mít vliv na vaši aplikaci.

    30. září 2026 vyřadíme knihovny sady SDK služby Azure Service Bus pro WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus a com.microsoft.azure.servicebus, které nevyhovují pokynům sady Azure SDK. Také ukončíme podporu protokolu SBMP, takže tento protokol už nebudete moct používat po 30. září 2026. Před tímto datem migrujte na nejnovější knihovny sady Azure SDK, které nabízejí důležité aktualizace zabezpečení a vylepšené funkce.

    I když starší knihovny je možné používat i po 30. září 2026, nebudou už od Microsoftu dostávat oficiální podporu a aktualizace. Další informace najdete v oznámení o vyřazení podpory.

Klienti Apache Kafka

Tato část popisuje, jak se chovají klienti Apache Kafka, kteří používají koncový bod Kafka služby Azure Event Hubs, když se počet oddílů aktualizuje pro centrum událostí.

Klienti Kafka, kteří používají službu Event Hubs s protokolem Apache Kafka, se chovají jinak než klienti centra událostí, kteří používají protokol AMQP. Klienti Kafka aktualizují svá metadata jednou za každou metadata.max.age.ms milisekundu. Tuto hodnotu zadáte v konfiguracích klienta. Knihovny librdkafka také používají stejnou konfiguraci. Aktualizace metadat informují klienty o změnách služby, včetně zvýšení počtu oddílů. Seznam konfigurací najdete v tématu Konfigurace Apache Kafka pro službu Event Hubs.

Klienti odesílatele/producenta

Producenti vždy určují, že odesílání požadavků obsahuje cíl oddílu pro každou sadu vytvořených záznamů. Takže veškeré vytváření oddílů se provádí na straně klienta se zobrazením metadat zprostředkovatele producenta. Jakmile se nové oddíly přidají do zobrazení metadat producenta, budou dostupné pro žádosti producenta.

Klienti příjemce/příjemce

Když člen skupiny příjemců provede aktualizaci metadat a vybere nově vytvořené oddíly, zahájí tento člen rovnováhu skupiny. Metadata příjemce se pak aktualizují pro všechny členy skupiny a nové oddíly budou přiřazeny přiřazené přiřazené vodicí znakové sadě.

Doporučení

  • Pokud použijete klíč oddílu s aplikacemi producenta a závisí na hashování klíčů, abyste zajistili řazení v oddílu, nedoporučuje se dynamické přidávání oddílů.

    Důležité

    I když stávající data zachová pořadí, bude u zpráv hashovaných po změně počtu oddílů kvůli přidání oddílů přerušeno zatřiďování hodnot hash oddílů.

  • Přidání oddílu do existující instance tématu nebo centra událostí se doporučuje v následujících případech:

    • Při použití výchozí metody odesílání událostí
    • Výchozí strategie dělení Kafka, příklad – strategie Sticky Assignor

Další kroky

Další informace o oddílech najdete v tématu Oddíly.