Řešení potíží s výkonem služby Azure Event Hubs
Tento článek obsahuje řešení běžných problémů s výkonem, se kterými se můžete setkat při použití knihovny Event Hubs v sadě Azure SDK pro Javu. Pokud hledáte řešení jiných běžných problémů, se kterými se můžete setkat při používání služby Event Hubs, přečtěte si téma Řešení potíží se službou Azure Event Hubs.
Použití processEvent nebo processEventBatch
Když použijete processEvent
zpětné volání, každá EventData
instance přijala volání kódu. Tento proces funguje dobře s nízkým nebo středním provozem v centru událostí.
Pokud má centrum událostí vysoký provoz a očekává se vysoká propustnost, agregované náklady na průběžné volání zpětného volání brání výkonu EventProcessorClient
. V tomto případě byste měli použít processEventBatch
.
Pro každý oddíl se zpětné volání vyvolá po jednom. Vysoká doba zpracování v zpětném volání brání výkonu, protože EventProcessorClient
nesdílí více událostí do podřízeného stavu ani nevyžaduje více EventData
instancí ze služby Event Hubs.
Náklady na kontrolní body
Pokud jako úložiště kontrolních bodů používáte Azure Blob Storage, stojí za kontrolní body síť, protože vytváří požadavek HTTP a čeká na odpověď. Tento proces může trvat až několik sekund kvůli latenci sítě, výkonu služby Azure Blob Storage, umístění prostředků atd.
Vytváření kontrolních bodů po zpracování každé EventData
instance brání výkonu kvůli nákladům na provedení těchto požadavků HTTP. Pokud zpětné volání nezpracovalo žádné události, neměli byste kontrolní bod kontrolovat ani po zpracování některých událostí.
Použití LoadBalancingStrategy.BALANCE nebo LoadBalancingStrategy.GREEDY
Při použití LoadBalancingStrategy.BALANCED
EventProcessorClient
deklarace identity jeden oddíl pro každý cyklus vyrovnávání zatížení. Pokud je v centru událostí 32 oddílů, k deklaraci všech oddílů trvá 32 iterací vyrovnávání zatížení. Pokud uživatelé vědí, že je spuštěný nastavený počet EventProcessorClient
instancí, můžou použít LoadBalancingStrategy.GREEDY
k deklaraci podílu oddílů v jednom cyklu vyrovnávání zatížení.
Další informace o jednotlivých strategiích najdete v tématu LoadBalancingStrategy.java v úložišti azure-sdk-for-java.
Konfigurace prefetchCount
Výchozí hodnota předběžného načtení je 500. Když se otevře odkaz pro příjem AMQP, umístí na něj 500 kreditů. Za předpokladu, že každá EventData
instance je jeden kredit propojení, EventProcessorClient
předem načte 500 EventData
instancí. Když se spotřebují všechny události, klient procesoru přidá na odkaz 500 kreditů, aby dostával další zprávy. Tento tok se opakuje, EventProcessorClient
zatímco stále má vlastnictví oddílu.
Konfigurace prefetchCount
může mít vliv na výkon, pokud je číslo příliš nízké. Pokaždé, když AMQP obdrží kredity odkazu, vzdálená služba odešle ACK. U scénářů s vysokou propustností může režijní náklady na vytváření tisíců požadavků klientů a sad ACL služeb bránit výkonu.
Konfigurace prefetchCount
může mít vliv na výkon, pokud je číslo příliš vysoké. Když se na řádek umístí kredit x , služba Event Hubs ví, že může odesílat maximálně x zpráv. Při přijetí každé EventData
instance se umístí do fronty v paměti, která čeká na zpracování. Velký počet EventData
instancí ve frontě může vést k velmi vysokému využití paměti.
Další kroky
Pokud pokyny k řešení potíží v tomto článku nepomáhají vyřešit problémy při použití sady Azure SDK pro klientské knihovny Java, doporučujeme vám založit problém v úložišti Azure SDK pro Javu na GitHubu.