Streamy Kafka pro Azure Event Hubs
Tento článek obsahuje podrobné informace o tom, jak používat klientskou knihovnu Kafka Streams ve službě Azure Event Hubs.
Poznámka:
Funkce služby Kafka Streams je dostupná jenom ve verzi Public Preview pro úrovně Event Hubs Premium a Dedicated.
Přehled
Apache Kafka Streams je pouze klientská knihovna Java, která poskytuje architekturu pro zpracování streamovaných dat a vytváření aplikací v reálném čase proti datům uloženým v tématech Kafka. Veškeré zpracování je vymezeno na klienta, zatímco témata Kafka fungují jako úložiště dat pro zprostředkující data před zápisem výstupu do cílového tématu.
Event Hubs poskytuje koncový bod Kafka, který se bude používat s vašimi stávajícími klientskými aplikacemi Kafka jako alternativu ke spuštění vlastního clusteru Kafka. Event Hubs funguje s mnoha vašimi existujícími aplikacemi Kafka. Další informace najdete v tématu Event Hubs pro Apache Kafka.
Použití streamů Kafka se službou Azure Event Hubs
Azure Event Hubs nativně podporuje protokol AMQP i Kafka. Aby se ale zajistilo kompatibilní chování streamů Kafka, musí se některé výchozí parametry konfigurace aktualizovat pro klienty Kafka.
Vlastnost | Výchozí chování služby Event Hubs | Změněné chování datových proudů Kafka | Vysvětlení |
---|---|---|---|
messageTimestampType |
nastavit na AppendTime |
by mělo být nastaveno na CreateTime |
Streamy Kafka místo časového razítka připojování využívá časové razítko vytváření. |
message.timestamp.difference.max.ms |
Maximální povolená hodnota je 90 dnů | Vlastnost slouží pouze k řízení minulých časových razítek. Budoucí čas je nastavený na 1 hodinu a nedá se změnit. | To je v souladu se specifikací protokolu Kafka. |
min.compaction.lag.ms |
Maximální povolená hodnota je dva dny | ||
Nekonečná témata uchovávání informací | Zkrácení na základě velikosti 250 GB pro každý oddíl tématu | ||
Odstranění rozhraní API pro záznam pro nekonečná témata uchovávání informací | Není implementováno. Jako alternativní řešení je možné toto téma aktualizovat a nastavit konečný čas uchovávání informací. | To se provede v ga. |
Ostatní úvahy
Tady jsou některé další aspekty, které je potřeba vzít v úvahu.
- Klientské aplikace streamů Kafka musí mít udělená oprávnění ke správě, čtení a zápisu pro celé obory názvů, aby bylo možné vytvářet dočasná témata pro zpracování datových proudů.
- Dočasná témata a oddíly se započítávají do kvóty pro daný obor názvů. Při zřizování oboru názvů nebo clusteru je potřeba je brát v úvahu.
- Nekonečná doba uchovávání pro úložiště posunu je omezená maximální dobou uchovávání zpráv skladové položky. Zkontrolujte kvóty služby Event Hubs pro tyto hodnoty specifické pro danou úroveň.
Patří sem aktualizace konfigurace tématu tak messageTimestampType
, aby používala CreateTime
(to znamená čas vytvoření události) místo AppendTime
času připojení (to znamená čas připojení protokolu).
Pokud chcete přepsat výchozí chování (povinné), musí být v Azure Resource Manageru (ARM) nastavené následující nastavení.
Poznámka:
Zobrazí se pouze konkrétní části šablony ARM, které zvýrazní konfiguraci, kterou je potřeba aktualizovat.
{
"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
}
}
}
}
}
Koncepty služby Kafka Streams
Streamy Kafka poskytují jednoduchou abstrakci nad rozhraními Kafka Producer and Consumer API, která vývojářům pomáhají rychleji začít se scénáři streamování v reálném čase. Lehká knihovna závisí na zprostředkovateli kompatibilním s Apache Kafka (jako je Azure Event Hubs) pro interní vrstvu zasílání zpráv a spravuje místní úložiště stavu odolné proti chybám. S transakčním rozhraním API podporuje knihovna datových proudů Kafka bohaté funkce zpracování, jako je právě jedno zpracování a zpracování jednoho záznamu.
U záznamů přicházejících mimo objednávku můžete využít operace časových intervalů založených na událostech.
Poznámka:
Doporučujeme seznámit se s dokumentací ke službě Kafka Streams a základními koncepty streamů Kafka.
Streamy
Stream je abstraktní reprezentace tématu Kafka. Skládá se z nevázané, nepřetržitě aktualizovat datovou sadu neměnných datových záznamů, kde každý datový záznam je pár klíč-hodnota.
Topologie zpracování datových proudů
Aplikace datových proudů Kafka definuje výpočetní logiku prostřednictvím daG (řízeného acyklického grafu) reprezentované topologií procesoru. Topologie procesoru se skládá z procesorů datových proudů (uzlů v topologii), které představují krok zpracování propojený datovými proudy (hrany v topologii).
Procesory datových proudů je možné zřetězenými k upstreamovým procesorům nebo podřízeným procesorům s výjimkou určitých zvláštních případů:
- Zdrojové procesory – Tyto procesory nemají žádné upstreamové procesory a čtou se přímo z jednoho nebo více datových proudů. Poté je možné je zřetězit s podřízenými procesory.
- Procesory jímky – Tyto procesory nemají žádné podřízené procesory a musí zapisovat přímo do datového proudu.
Topologii zpracování datových proudů je možné definovat buď pomocí streamů Kafka DSL, nebo pomocí rozhraní API procesoru nižší úrovně.
Duální funkce Stream a Table
Streamy a tabulky jsou 2 různé, ale užitečné abstrakce poskytované platformou Kafka Streams DSL, modelování časových řad i relačních datových formátů, které musí existovat společně pro případy použití zpracování datových proudů.
Kafka to dále rozšiřuje a zavádí dualitu mezi datovými proudy a tabulkami, kde
- Datový proud lze považovat za protokol změn tabulky a
- Tabulku je možné považovat za snímek nejnovější hodnoty každého klíče ve streamu.
Tato dualita umožňuje, aby se tabulky a datové proudy používaly zaměnitelně, jak to vyžaduje případ použití.
Například
- Připojení statických zákaznických dat (modelovaných jako tabulky) s dynamickými transakcemi (modelovaným jako datový proud) a
- Připojování ke změnám pozic portfolia v portfoliu denních obchodníků (modelované jako datový proud) s nejnovějšími datovými kanály trhu (modelovaným jako datový proud).
Čas
Služba Kafka Streams umožňuje funkce pro vytváření oken a odkladu, které umožňují ingestování datových záznamů mimo pořadí a jsou stále zahrnuté do zpracování. Aby bylo zajištěno, že toto chování je deterministické, existují další pojmy času ve streamech Kafka. Tady jsou některé z nich:
- Čas vytvoření (označovaný také jako Čas události) – jedná se o čas, kdy došlo k události a byl vytvořen datový záznam.
- Doba zpracování – jedná se o čas, kdy je záznam dat zpracován aplikací pro zpracování datových proudů (nebo když je spotřebován).
- Čas připojení (označovaný také jako Čas vytvoření) – jedná se o čas, kdy jsou data uložena a potvrzena do úložiště zprostředkovatele Kafka. To se liší od času vytvoření kvůli časovému rozdílu mezi vytvořením události a skutečným příjmem dat zprostředkovatelem.
Stavové operace
Správa stavu umožňuje sofistikované aplikace pro zpracování datových proudů, jako je připojování a agregace dat z různých datových proudů. Toho se dosahuje pomocí úložišť stavů poskytovaných streamy Kafka a přístupných pomocí stavových operátorů ve streamech Kafka DSL.
Stavové transformace v DSL zahrnují:
- Seskupování
- Pouto
- Vytváření oken (jako součást agregací a spojení)
- Použití vlastních procesorů a transformátorů, které můžou být stavové, pro integraci rozhraní API procesoru
Okno a odkladu
Operace s okny ve streamech Kafka DSL umožňují vývojářům řídit, jak se záznamy seskupují pro daný klíč pro stavové operace, jako jsou agregace a spojení.
Operace s okny také umožňují specifikaci období odkladu, aby poskytovala určitou flexibilitu pro záznamy mimo pořadí pro dané okno. Záznam, který je určený pro dané okno a dorazí po daném okně, ale během období odkladu je přijat. Záznamy přicházející po uplynutí období odkladu se zahodí.
Aplikace musí používat ovládací prvky období oken a odkladu ke zlepšení odolnosti proti chybám u záznamů mimo pořadí. Odpovídající hodnoty se liší v závislosti na úloze a musí být identifikovány empiricky.
Záruky zpracování
Podnikoví a technickí uživatelé se snaží extrahovat klíčové obchodní přehledy z výstupu úloh zpracování datových proudů, které překládají na požadavky vysoké transakční záruky. Streamy Kafka spolupracují s transakcemi Kafka, aby zajistily záruky transakčního zpracování integrací se základním systémem úložiště kompatibilních se systémem Kafka (například Azure Event Hubs), aby se zajistilo, že se posun potvrzení a aktualizace úložiště stavů zapisují atomicky.
Aby se zajistilo záruky transakčního zpracování, processing.guarantee
musí být nastavení v konfiguracích streamů Kafka aktualizováno z výchozí hodnoty at_least_once
na exactly_once_v2
(pro verze klienta v nebo za Apache Kafka 2.5) nebo exactly_once
(pro verze klienta před Apache Kafka 2.5.x).
Další kroky
Tento článek obsahuje úvod do služby Event Hubs pro Kafka. Další informace najdete v příručce pro vývojáře Apache Kafka pro Azure Event Hubs.
Kurz s podrobnými pokyny k vytvoření centra událostí a přístupu k němu pomocí SAS nebo OAuth najdete v rychlém startu: Streamování dat se službou Event Hubs pomocí protokolu Kafka.
Projděte si také ukázky OAuth na GitHubu.