Lösningar som använder Azure Event Hubs tillsammans med Azure Functions drar nytta av en serverlös arkitektur som är skalbar, kostnadseffektiv och kan bearbeta stora mängder data nästan i realtid. Så mycket som dessa tjänster fungerar sömlöst tillsammans finns det många funktioner, inställningar och invecklat som gör relationen mer komplex. Den här artikeln innehåller vägledning om hur du effektivt kan dra nytta av den här integreringen genom att fokusera på viktiga överväganden och tekniker för prestanda, återhämtning, säkerhet, observerbarhet och skalning.
Event Hubs viktiga begrepp
Azure Event Hubs är en mycket skalbar tjänst för händelsebearbetning som kan ta emot miljontals händelser per sekund. Innan du går in på mönster och metodtips Azure Functions integrering är det bäst att förstå de grundläggande komponenterna i Event Hubs.
Följande diagram visar arkitekturen Event Hubs för dataströmbearbetning:
Händelser
En händelse är ett meddelande eller en tillståndsändring som representeras som ett faktum som har inträffat tidigare. Händelser är oföränderliga och bevaras ien händelsehubb , vilket även kallas ett ämne i Kafka. En händelsehubb består av en eller flera partitioner.
Partitioner
När en partition inte anges av avsändaren distribueras mottagna händelser över partitioner i händelsehubben. Varje händelse skrivs i exakt en partition och är inte multi-cast över partitioner. Varje partition fungerar som en logg där poster skrivs i ett mönster med endast tillägg. Liknelseloggen används ofta för att beskriva hur händelser läggs till i slutet av en sekvens i en partition.
När fler än en partition används kan parallella loggar användas inifrån samma händelsehubb. Det här beteendet ger flera grader av parallellitet och förbättrar dataflödet för konsumenter.
Konsumenter och konsumentgrupper
En partition kan användas av mer än en konsument, där varje konsument läser från och hanterar sina egna offset.
Event Hubs har begreppet konsumentgrupper,vilket gör att flera konsumerande program till var och en har en separat vy av händelseströmmen och läser dataströmmen oberoende av varandra i sin egen takt och med sina egna offsets.
Mer information finns i Djupdykning i Event Hubs och funktioner.
Använda händelser med Azure Functions
Azure Functions stöder utlösar-och utdatabindningar för Event Hubs. Det här avsnittet beskriver Azure Functions svarar på händelser som skickas till en händelseström i en händelsehubb med utlösare.
Varje instans av en Event Hubs utlöst funktion backas upp av en enda EventProcessorHost-instans. Utlösaren (drivs av Event Hubs) säkerställer att endast en EventProcessorHost-instans kan få ett lån på en viss partition.
Tänk dig till exempel en händelsehubb med följande egenskaper:
- 10 partitioner.
- 1 000 händelser fördelas jämnt på alla partitioner, med ett varierande antal meddelanden i varje partition.
När funktionen först aktiveras finns det bara en instans av funktionen. Nu ska vi anropa den första funktionsinstansen Function_1 . Function_1 har en enda instans av Function_1 som har ett lån på alla 10 partitioner. Den här instansen läser händelser från partitionerna 1–10. Från och med nu händer något av följande:
Nya funktionsinstanser behövs inte: kan bearbeta alla 1 000 händelser innan functionsskalningslogiken börjar gälla. I det här fallet bearbetas alla 1 000 meddelanden av
Function_1.Ytterligare en funktionsinstansläggs till: händelsebaserad skalning eller annan automatiserad eller manuell logik kan fastställa att har fler meddelanden än den kan bearbeta och skapar sedan en ny instans av funktionsappen (
Function_2). Den här nya funktionen har också en associerad instans av EventProcessorHost. När den underliggande händelsehubben upptäcker att en ny värdinstans försöker läsa meddelanden belastningsutjämnas partitionerna mellan värdinstanserna. Till exempel kan partitioner 1–5 tilldelas tillFunction_1och partitionerna 6–10 tillFunction_2.Fler funktionsinstanserläggs till: händelsebaserad skalning eller annan automatiserad eller manuell logik avgör att både och har fler meddelanden än de kan
Function_2bearbeta, nya Function_N-funktionsappinstanser skapas. Instanser skapas till den punkt där N är lika med eller större än antalet händelsehubbpartitioner. I vårt exempel Event Hubs belastningsutjämna partitionerna, i det här fallet överFunction_1instanserna ...Function_10.
När skalningen sker kan N-instanser vara ett tal större än antalet händelsehubbpartitioner. Den här situationen kan inträffa när händelsedriven skalning stabiliserar antalet instanser eller på grund av att annan automatiserad eller manuell logik har skapat fler instanser än partitioner. I det här fallet hämtar EventProcessorHost-instanser endast lås på partitioner när de blir tillgängliga från andra instanser, eftersom endast en funktionsinstans från samma konsumentgrupp kan komma åt/läsa från de partitioner som den har lås på.
När all funktionskörning har slutförts (med eller utan fel) läggs kontrollpunkter till i det associerade lagringskontot. När kontroll pekaren lyckas hämtas aldrig alla 1 000 meddelanden igen.
Dynamisk, händelsebaserad skalning är möjlig med förbrukning och Premium Azure-planer. Kubernetes-värdindelade funktionsappar kan också dra nytta av KEDA-skalningsappen för Event Hubs. Händelsebaserad skalning är för närvarande inte möjligt när funktionsappen finns i en dedikerad plan (App Service), vilket kräver att du fastställer rätt antal instanser baserat på din arbetsbelastning.
Mer information finns i Azure Event Hubs bindningar för Azure Functionsoch Azure Event Hubs utlösare för Azure Functions.
Nästa steg
Relaterade resurser
- Övervakning av serverlös händelsebearbetning ger vägledning om övervakning av serverlösa händelsedrivna arkitekturer.
- Serverlös händelsebearbetning är en referensarkitektur som beskriver en typisk arkitektur av den här typen, med kodexempel och diskussion om viktiga överväganden.
- Avbatchning och filtrering i serverlös händelsebearbetning med Event Hubs beskriver i detalj hur dessa delar av referensarkitekturen fungerar.