Apache Flink je open-sourcový Framework pro zpracování streamingu, který vyvinula Apache Software Foundation. Jádrem Apache Flink je engine na distribuované streamování datového toku, který je psaný v Javě a Scale. Flink spouští programy datového toku v datově paralelním pipelinovém modelu. Pipelinový runtime systém použitý ve Flinku umožňuje spuštění bulk nebo batch služeb a streamovací zpracování programů. Navíc má Flink nativní podporu iterativních algoritmů.

Flink je streamovací engine s vysokou propustností a nízkou latencí. Dokáže nabídnout podporu pro zpracování času události a správu stavů. Flink aplikace jsou tolerantní k výpadkům v případě výpadku stroje a podporují sémantiku ve stylu „právě jednou“. Programy lze psát v Javě, Scale, Pythonu a SQL a jsou automaticky kompilovány a optimalizovány do programů datových toků, které jsou spouštěny na klustru nebo cloudovém prostředí.

Flink nemá vlastní systém ukládání dat a umožňuje tak napojení na datové zdroje jako je Amazon Kinesis, Apache Kafka, HDFS, Apache Cassandra nebo ElasticSearch.

Přehled vlastností

Apache Flink je založený na programovacím modelu datového toku a nabízí zpracování konečných i nekonečných datových sad. Na základní úrovni se Flink skládá ze streamů a transformací. Konceptuálně se jedná o tok datových záznamů a transformace je operací, která bere jeden nebo více těchto toků jako vstup a produkuje jeden nebo více streamů jako výstup.

Apache Flink obsahuje dvě hlavní API: DataStream API pro omezené a neomezené streamy dat a DataSet API pro omezené datové sady. Flink zároveň nabízí Table API, které je založené na jazyce podobném SQL pro relační streamy a batch procesy, které mohou být jednoduše vnořené do DataStreamu nebo DataSetu.

Programovací model a distribuovaný runtime

Při spuštění jsou Flink programy mapovány na streamující datové toky. Každý datový tok Flinku začíná jedním nebo více zdroji a končí jedním nebo více datovými výstupy. Na streamu může být proveden libovolný počet transformací. Tyto streamy lze uspořádat přímo do acyklického grafu, což umožňuje větvit a spojovat datové toky.

Flink má vestavěné napojení na datové zdroje a uložení výstupů na Apache Kafka, Amazon Kinesis, HDFS, Apache Cassandra i další.

Stavy: Checkpointy, body uložení a tolerance k výpadkům

Apache Flink zahrnuje mechanismus tolerance k výpadkům na základě distribuovaných checkpointů. Checkpoint je automatický asynchronní snaphot stavu aplikace a pozice v rámci zdrojového streamu. V případě výpadku program využívající Flink při obnovení převezme stav z posledního uloženého checkpointu, což vede k tomu, že si Flink zachová sémantiku přesně jednoho stavu v rámci aplikace. Checkpointovací mechanismus může zahrnovat i externí systémy.

Zároveň existuje možnost nastavit body uložení, které jsou manuálně spuštěným ekvivalentem checkpointů.

Výhody použití Apache Flink

  • Redukuje komplexitu. Oproti jiným frameworkům určeným na zpracování distribuovaných dat Flink redukuje komplexitu. Toho dosahuje využitím integrované optimalizace dotazů, konceptů inspirovaných datovými systémy a efektivními algoritmy v paměti a mimo jádro.
  • Správa paměti. Explicitní správa paměti umožňuje lepší využití paměti nežli Apache Spark.
  • Rychlost. Iterativní procesy na stejném uzlu umožňují maximální rychlost zpracování. Dalšího zlepšení výkonu lze dosáhnout za pomoci zpracování pouze relevantní části dat.
  • Minimum konfigurace.

Nevýhody použití Apache Flink

  • Sdílení dat v paměti. Apache Spark je lepším řešením pro sdílení dat v paměti, což z něj dělá ideální volbu pro iterativní, interaktivní a na událostech založené zpracování streamu.
  • Komunita. Apache Flink nemá tak širokou komunitu jako jeho konkurent Apache Spark.