Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln innehåller information om hur du använder Kafka Streams-klientbiblioteket med Azure Event Hubs.
Kommentar
Kafka Streams-funktioner är endast tillgängliga i offentlig förhandsversion för Event Hubs Premium- och Dedikerade nivåer.
Översikt
Apache Kafka Streams är ett java-klientbibliotek som tillhandahåller ett ramverk för bearbetning av strömmande data och skapa realtidsprogram mot data som lagras i Kafka-ämnen. All bearbetningen är begränsad till klienten, medan Kafka-ämnen fungerar som datalager för mellanliggande data innan utdata skrivs till destinationsemnet.
Event Hubs tillhandahåller en Kafka-slutpunkt som ska användas med dina befintliga Kafka-klientprogram som ett alternativ till att köra ditt eget Kafka-kluster. Event Hubs fungerar med många av dina befintliga Kafka-program. Mer information finns i Event Hubs för Apache Kafka.
Använda Kafka Streams med Azure Event Hubs
Azure Event Hubs har inbyggt stöd för både AMQP- och Kafka-protokollet. Men för att säkerställa kompatibelt Kafka Streams-beteende måste vissa av standardkonfigurationsparametrarna uppdateras för Kafka-klienter.
| Egendom | Standardbeteende för Event Hubs | Ändrat beteende för Kafka-strömmar | Förklaring |
|---|---|---|---|
messageTimestampType |
inställd på AppendTime |
ska ställas in på CreateTime |
Kafka Streams förlitar sig på tidsstämpel för skapande i stället för att lägga till tidsstämpel |
message.timestamp.difference.max.ms |
högsta tillåtna värde är 90 dagar | Egenskapen används endast för att styra tidigare tidsstämplar. Framtida tid är inställd på 1 timme och kan inte ändras. | Det är i linje med Kafka-protokollspecifikationen |
min.compaction.lag.ms |
högsta tillåtna värde är två dagar | ||
| Ämnen om oändlig kvarhållning | storleksbaserad trunkering på 250 GB för varje ämnespartition | ||
| Radera register-API för ämnen med oändlig lagringstid | Inte implementerad. Som en lösning kan ämnet uppdateras och en begränsad kvarhållningstid kan anges. | Den här funktionen kommer att stödjas i GA |
Övriga beaktanden
Här följer några av de andra övervägandena att tänka på.
- Kafka streams-klientprogram måste beviljas hanterings-, läs- och skrivbehörigheter för hela namnrymderna för att kunna skapa tillfälliga ämnen för dataströmbearbetning.
- Tillfälliga ämnen och partitioner räknas mot kvoten för det angivna namnområdet. De bör beaktas när du etablerar namnområdet eller klustret.
- Oändlig kvarhållningstid för "Offset" Store begränsas av maximal kvarhållningstid för meddelanden för lagerhållningsenheten (SKU). Kontrollera Event Hubs-kvoter för dessa nivåspecifika värden.
Det innefattar att uppdatera ämneskonfigurationen i messageTimestampType för att använda CreateTime (det vill säga händelsens skapandetid) istället för AppendTime (det vill säga loggens tidsstämpel).
Om du vill åsidosätta standardbeteendet (krävs) måste nedanstående inställning anges i Azure Resource Manager (ARM).
Kommentar
Endast de specifika delarna i ARM-mallen visas för att markera konfigurationen som behöver uppdateras.
{
"parameters": {
"namespaceName": "contoso-test-namespace",
"resourceGroupName": "contoso-resource-group",
"eventHubName": "contoso-event-hub-kafka-streams-test",
...
"parameters": {
"properties": {
...
"messageTimestampType": "CreateTime",
"retentionDescription": {
"cleanupPolicy": "Delete",
"retentionTimeInHours": -1,
"tombstoneRetentionTimeInHours": 1
}
}
}
}
}
Kafka Streams-begrepp
Kafka-strömmar ger ett enkelt abstraktionslager över Kafka-producent- och konsument-API:er för att hjälpa utvecklare att komma igång med realtidsströmningsscenarier snabbare. Det lättviktsbiblioteket beror på en Apache Kafka-kompatibel mäklare (till exempel Azure Event Hubs) för det interna meddelandelager och hanterar ett feltolerant lokalt tillståndsarkiv. Med transaktions-API:et stöder Kafka Streams-biblioteket omfattande bearbetningsfunktioner, till exempel exakt en gång bearbetning och en post i taget.
Poster som kommer i fel ordning drar nytta av fönsteråtgärder baserade på händelsetid.
Kommentar
Vi rekommenderar att du bekantar dig med Kafka Streams-dokumentationen och Kafka Streams kärnbegrepp.
Strömmar
En ström är en abstrakt representation av ett Kafka-ämne. Den består av en obundet, kontinuerligt uppdaterad datauppsättning med oföränderliga dataposter, där varje datapost är ett nyckel/värde-par.
Topologi för dataströmbearbetning
Ett Kafka-streams-program definierar beräkningslogik via en DAG (riktad acyklisk graf) som representeras av en processortopologi. Processortopologin består av dataströmprocessorer (noder i topologin) som representerar ett bearbetningssteg som är anslutet med strömmar (kanter i topologin).
Stream-processorer kan länkas till överordnade processorer eller underordnade processorer, förutom för vissa särskilda fall:
- Källprocessorer – Dessa processorer har inga överordnade processorer och läser direkt från en eller flera strömmar. De kan sedan kopplas till underordnade processorer.
- Slutprocessorer – Dessa processorer har inga nedströmsprocessorer och måste skriva direkt till en dataström.
Topologi för dataströmbearbetning kan definieras antingen med Kafka Streams DSL eller med processor-API:et på lägre nivå.
Ström- och tabelldualitet
Strömmar och tabeller är två olika men användbara abstraktioner som tillhandahålls av Kafka Streams DSL, som modellerar både tidsserie- och relationsdataformat som måste samexistera för användningsfall för dataströmbearbetning.
Kafka utökar den ytterligare och introducerar en dubbelhet mellan strömmar och tabeller, där en
- En dataström kan betraktas som en ändringslogg för en tabell och
- En tabell kan betraktas som en ögonblicksbild av det senaste värdet för varje nyckel i en dataström.
Med den här dualiteten kan tabeller och strömmar användas omväxlande enligt användningsfallet.
Till exempel
- Koppla statiska kunddata (modellerade som en tabell) med dynamiska transaktioner (modellerade som en dataström) och
- Sammanfoga föränderliga portföljpositioner i en daytraders portfölj (modellerat som en ström) med det senaste marknadsdataflödet (modellerat som en ström).
Tid
Kafka Streams tillåter att fönster- och respitfunktioner gör att dataposter i oordning kan matas in och fortfarande inkluderas i bearbetningen. För att säkerställa att det här beteendet är deterministiskt finns det fler tidsbegrepp i Kafka-strömmar. De omfattar:
- Skapandetid (även kallat "händelsetid") – Det är den tid då händelsen inträffade och dataposten skapades.
- Bearbetningstid – Det är den tid då dataposten bearbetas av dataströmbearbetningsprogrammet (eller när den förbrukas).
- Tilläggstid (kallas även "Skapandetid") – Det är tiden då data lagras och bekräftas i lagringen hos Kafka-brokern. Den skiljer sig från tiden för skapandet på grund av tidsskillnaden mellan skapandet av händelsen och den faktiska bearbetningen av mäklaren.
Tillståndskänsliga operationer
Tillståndshantering möjliggör avancerad dataströmbearbetning som att ansluta och aggregera data från olika strömmar. Detta uppnås med tillståndslager som tillhandahålls av Kafka Streams och används med tillståndskänsliga operatorer i Kafka Streams DSL.
Tillståndskänsliga transformeringar i DSL:
- Aggregering
- Ansluter sig till
- Fönster (som en del av sammansättningar och kopplingar)
- Tillämpa anpassade processorer och transformatorer, som kan vara tillståndskänsliga, för processor-API-integrering
Fönster och nåd
Fönsterhantering i Kafka Streams DSL gör det möjligt för utvecklare att styra hur records grupperas för en given nyckel vid tillståndsberoende åtgärder som aggregeringar och kopplingar.
Fönsteråtgärder tillåter också att ange en tidsfrist för att ge viss flexibilitet för oregelbundna poster för ett visst fönster. En post som är avsedd för ett visst fönster accepteras om den tas emot efter att detta fönster har avslutats men fortfarande inom respitperioden. Poster som anländer efter att respitperioden har gått ut kastas bort.
Program måste använda kontrollerna för fönster och respitperiod för att förbättra feltoleransen för poster som inte är i ordning. Lämpliga värden varierar beroende på arbetsbelastningen och måste identifieras empiriskt.
Bearbetningsgarantier
Affärsanvändare och tekniska användare försöker extrahera viktiga affärsinsikter från utdata från dataströmbearbetningsarbetsbelastningar, vilket innebär höga krav på transaktionsgarantier. Kafka-strömmar fungerar tillsammans med Kafka-transaktioner för att säkerställa transaktionsbearbetningsgarantier genom att integrera med kafka-kompatibla mäklares (till exempel Azure Event Hubs) underliggande lagringssystem för att säkerställa att offset-incheckningar och tillståndslageruppdateringar skrivs atomiskt.
För att säkerställa garantier processing.guarantee för transaktionsbearbetning måste inställningen i Kafka Streams-konfigurationerna uppdateras från standardvärdet at_least_once för till exactly_once_v2 (för klientversioner på eller efter Apache Kafka 2.5) eller exactly_once (för klientversioner före Apache Kafka 2.5.x).
Nästa steg
Den här artikeln gav en introduktion till Event Hubs för Kafka. Mer information finns i Apache Kafka-utvecklarguiden för Azure Event Hubs.
En självstudiekurs med stegvisa instruktioner för att skapa en händelsehubb och komma åt den med hjälp av SAS eller OAuth finns i Snabbstart: Dataströmning med Event Hubs med hjälp av Kafka-protokollet.
Se även OAuth-exemplen på GitHub.