Apache Flink

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 12 oktober 2020; kontroller kräver 13 redigeringar .
Apache Flink
Utvecklaren Apache Software Foundation
Skrivet i Java [2] [1] och Scala [1]
Första upplagan 6 januari 2015 [1]
Hårdvaruplattform Java Virtual Machine
senaste versionen
Licens Apache-licens 2.0
Hemsida flink.apache.org
 Mediafiler på Wikimedia Commons

Apache Flink  är ett ramverk för strömbehandling med öppen källkod utvecklat av Apache Software Foundation .

Ramverket är baserat på en processbearbetningsmotor skriven i Java och Scala [4] [5] . Flink stöder dataflödesprogrammering både i parallellläge och i pipelineläge (pipeline) [6] . I pipeline-läge (pipeline) låter Flink dig implementera en sekvens av jobb (batch) och en ström av jobb (ström) [7] [8] . Flink stöder också iterativa algoritmer naturligt [9] .

Flink har hög genomströmning och låg latens [10] , trådar kan triggas av händelser och bibehålla status. Uppgifter i Flink-systemet är feltoleranta och använder strikt samma semantik [11] . Program för ramverket kan skrivas i Java , Scala [12] , Python [13] och SQL [14] , jobb kompileras och optimeras automatiskt [15] och fungerar både i kluster och i en molnserver [16] .

Flink har inget eget lagringssystem utan använder datakällor och kontakter som Amazon Kinesis , Apache Kafka , Alluxio , HDFS , Apache Cassandra och ElasticSearch [17] .

Utveckling

Apache Flink utvecklades under Apache 2.0 -licensen [18] av Apache Flink-gemenskapen inom Apache Software Foundation . Projektet leddes av 25 kärnutvecklare och över 340 medverkande programmerare.

De ursprungliga utvecklarna av Apache Flink grundade Data Artisans, ett företag med 12 kärnutvecklare [19] [20] .

Översikt

Dataflödesprogrammering i Apache Flink är beroende av händelsehantering för både tidsbegränsade datamängder och kontinuerliga strömmar utan tidsgränser. På bottennivån är program i Flink-systemet uppdelade i strömmar (ström) och transformationer (transformation). En ström är begreppsmässigt en kö av poster som kanske aldrig tar slut. En transformation är en operation som tar emot en eller flera strömmar som input, och sedan omvandlar data också till en eller flera strömmar [21] .

Apache Flink använder två huvudsakliga API:er: DataStream API för begränsade eller obegränsade strömmar och DataSet API för begränsade datauppsättningar. Flink stöder också Table API för tabeller, med ett språk som SQL för både strömmar och jobb. På den högsta nivån stöder Flink SQL-språket, som är semantiskt nära Table API och frågor via SQL.

Programmeringsmodell och distribuerad utförande av uppgifter

Vid körning mappas Flink-program till streaming [21] . Varje tråd tar input från en eller flera källor (t.ex. input, kö eller fil) och avslutas genom att skicka data till en eller flera utströmmar (meddelandekö, filer, databas). Strömmen genomgår en godtycklig mängd omvandling. Trådar bildar en slingfri graf, vilket gör att en applikation kan förgrena sig i många trådar och slå samman trådar.

Flink föreslår att man kopplar in- och utströmmar till Alluxio , Apache Kafka , Amazon Kinesis, HDFS , Apache Cassandra , etc. [17] lagringar .

I distribuerade system kan Flink-program köras i kluster eller vara oberoende, även använda YARN, Mesos eller Docker för att konfigurera och allokera resurser [22] .

Status: checkpoints, savepoints, failover

Apache Flink inkluderar en lätt failover-mekanism som använder distribuerade kontrollpunkter [11] . En kontrollpunkt är en automatisk asynkron lagring (ögonblicksbild) av applikationstillståndet i den ursprungliga tråden. I händelse av ett misslyckande kommer ett program i en Flink-miljö med brytpunktsalternativet att återställa processen från den senaste lagringen, förutsatt att Flink arbetar med endast en applikationsstatussemantik. Kontrollpunktsmekanismen använder krokar i applikationskoden så att externa system kan möjliggöra tillståndssparande i kontrollpunkter (liknande transaktioner när man arbetar med databaser).

Flink inkluderar även en mekanism för "räddningspunkter", som aktiveras manuellt [23] . Användaren kan skapa en räddningspunkt, stoppa programmet i Flink-miljön och sedan starta om det från samma position. Savepoints låter dig också göra ändringar i programmet utan att förlora programmets status. Från och med versionen av Flink 1.2 låter savepoints dig starta om applikationen i en dataparallell bearbetningssituation

DataStream API

DataStream API i Flink-systemet utför transformationer - såsom filtrering, aggregering, sampling - på begränsade eller obegränsade dataströmmar. DataStream API innehåller över 20 olika typer av transformationer som kan användas i Java och Scala [24] .

Här är ett exempel på en enkel strömbehandling för en ordräkning i en kontinuerlig ingångsström över fem sekunders tidsintervall:

import org . apache . flink . streaming . api . scala . _ import org . apache . flink . streaming . api . fönster . tid . Tid fallklass WordCount ( ord : String , count : Int ) _ object WindowWordCount { def main ( args : Array [ String ]) { val env = StreamExecutionEnvironment . getExecutionEnvironment val text = env . socketTextStream ( "localhost" , 9999 ) val counts = text . flatMap { _ . toLowerCase . split ( "\\W+" ) filter { _ . nonEmpty } } . karta { WordCount ( _ , 1 ) } . keyBy ( "ord" ) . timeWindow ( Tid . sekunder ( 5 )) . summa ( "räkna" ) räknas . skriva ut env . kör ( "Window Stream WordCount" ) } }

I denna ström delas inmatningstexten in i ord med hjälp av flatMap-operationen, varje ord omvandlas till en WordCount-struktur med en räknare lika med ett, strömmen av WordCount-objekt grupperas efter ord och tidsintervall på 5 sekunder och sammanfattas sedan av räknare, så att den slutliga strömmen innehåller ordräknare i femsekundersintervaller.

Apache Beam - Flink artist

Apache Beam erbjuder en enhetlig programmeringsmodell som gör det möjligt för utvecklaren att skapa jobb i pipeline- och streamingläge, och sedan exekvera de skapade jobben i Flink-miljön [25] . Den Apache Beam-baserade Flink Executor innehåller en rik uppsättning funktioner [26] .

Flink-exekutorn utvecklas av Data Artisans [27] .

DataSet API

DataSet API i Flink-systemet stöder datatransformationsoperationer (som filtrering, gruppering, kartläggning, sammanfogning) med tidsbegränsade datauppsättningar. DataSet API erbjuder cirka 20 typer av transformationer [28] . Detta API stöds för Java och Scala, och det finns också ett experimentellt API för Python. Konceptet för DataSet API liknar det för DataStream API.

Tabell API och SQL

Table API är ett uttrycksspråk av SQL-typ för hantering av relationsströmmar och jobb, Table API är en del av DataSet och DataStream API:er för Java och Scala. Tabell-API:et och motsvarande SQL-gränssnitt fungerar med en abstrakt representation av relationstabeller. Abstrakta tabeller kan skapas från externa data, eller från befintliga dataströmmar och datauppsättningar. Tabell-API stöder relationsoperationer - urval, aggregering, anslutning.

Tabeller kan också sökas med standardspråket SQL. Tabell-API och SQL erbjuder samma funktionalitet och kan blandas i samma program. Tabeller kan konverteras tillbaka till datauppsättningar eller dataströmmar, logiska operationer optimeras med Apache Calcite och konverteras till DataSet eller DataStream [29] gränssnittsprogram .

Anteckningar

  1. 1 2 3 https://projects.apache.org/json/projects/flink.json
  2. The flink Open Source Project på Open Hub: Languages-sidan - 2006.
  3. https://flink.apache.org/news/2022/10/28/1.16-announcement.html
  4. Apache Flink: Skalbar batch- och strömdatabearbetning . apache.org . Hämtad 7 februari 2020. Arkiverad från originalet 26 december 2018.
  5. apache/flink . GitHub . Hämtad 7 februari 2020. Arkiverad från originalet 28 januari 2019.
  6. Alexander Alexandrov, Rico Bergmann, Stephan Ewen, Johann-Christoph Freytag, Fabian Hueske, Arvid Heise, Odej Kao, Marcus Leich, Ulf Leser, Volker Markl, Felix Naumann, Mathias Peters, Astrid Rheinländer, Matthias J. Sax, Sebastian Schelter, Mareike Höger, Kostas Tzoumas och Daniel Warneke. 2014. Stratosfärens plattform för big data-analys . The VLDB Journal 23, 6 (december 2014), 939-964. DOI
  7. Ian Pointer. Apache Flink: Ny Hadoop-utmanare kvitterar mot Spark . InfoWorld (7 maj 2015). Hämtad 7 februari 2020. Arkiverad från originalet 23 oktober 2018.
  8. Apache Flink. Intervju med Volker Markl. . odbms.org . Hämtad 7 februari 2020. Arkiverad från originalet 23 oktober 2018.
  9. Stephan Ewen, Kostas Tzoumas, Moritz Kaufmann och Volker Markl. 2012. Snurrande snabba iterativa dataflöden . Proc. VLDB Endow. 5, 11 (juli 2012), 1268-1279. DOI
  10. Benchmarking av strömmande beräkningsmotorer på Yahoo! . Arkiverad från originalet den 1 maj 2017. Hämtad 7 februari 2020.
  11. ↑ 1 2 Carbone, Paris; Fora, Gyula; Ewen, Stephan; Haridi, Seif & Tzoumas, Kostas (2015-06-29), Lightweight Asynchronous Snapshots for Distributed Dataflows, arΧiv : 1506.08603 [cs.DC]. 
  12. ↑ Apache Flink 1.2.0-dokumentation : Flink DataStream API-programmeringsguide  . ci.apache.org . Hämtad 23 februari 2017. Arkiverad från originalet 21 januari 2019.
  13. Apache Flink 1.2.0-dokumentation: Python-  programmeringsguide . ci.apache.org . Hämtad 23 februari 2017. Arkiverad från originalet 21 februari 2017.
  14. Apache Flink 1.2.0 Dokumentation: Tabell och  SQL . ci.apache.org . Hämtad 23 februari 2017. Arkiverad från originalet 18 maj 2019.
  15. Fabian Hueske, Mathias Peters, Matthias J. Sax, Astrid Rheinländer, Rico Bergmann, Aljoscha Krettek och Kostas Tzoumas. 2012. Öppna de svarta rutorna i dataflödesoptimering . Proc. VLDB Endow. 5, 11 (juli 2012), 1256-1267. DOI
  16. Daniel Warneke och Odej Kao. 2009. Nephele: effektiv parallell databehandling i molnet . I Proceedings of the 2nd Workshop on Many-Task Computing on Grids and Supercomputers (MTAGS '09). ACM, New York, NY, USA, Artikel 8, 10 sidor. DOI
  17. ↑ 1 2 Apache Flink 1.2.0 Dokumentation: Strömmande  kontakter . ci.apache.org . Hämtad 23 februari 2017. Arkiverad från originalet 21 februari 2017.
  18. ASF Git Repos - flink.git/blob - LICENS (nedlänk ) . apache.org . Hämtad 12 april 2015. Arkiverad från originalet 23 oktober 2017. 
  19. Team - data Artisans  (engelska)  (otillgänglig länk) . data-artisans.com . Hämtad 23 februari 2017. Arkiverad från originalet 23 februari 2017.
  20. Apache Flink: Gemenskap och  projektinformation . flink.apache.org . Hämtad 23 februari 2017. Arkiverad från originalet 21 februari 2017.
  21. ↑ 1 2 Apache Flink 1.2.0 Dokumentation : Dataflödesprogrammeringsmodell  . ci.apache.org . Hämtad 23 februari 2017. Arkiverad från originalet 21 februari 2017.
  22. ↑ Apache Flink 1.2.0 Dokumentation : Distributed Runtime Environment  . ci.apache.org . Datum för åtkomst: 24 februari 2017. Arkiverad från originalet 21 februari 2017.
  23. Apache Flink 1.2.0-dokumentation: Distributed Runtime Environment -  Savepoints . ci.apache.org . Datum för åtkomst: 24 februari 2017. Arkiverad från originalet 21 februari 2017.
  24. ↑ Apache Flink 1.2.0-dokumentation : Flink DataStream API-programmeringsguide  . ci.apache.org . Hämtad 24 februari 2017. Arkiverad från originalet 21 januari 2019.
  25. Apache  Beam . beam.apache.org . Datum för åtkomst: 24 februari 2017. Arkiverad från originalet 25 februari 2017.
  26. ↑ Apache strålar kapacitetsmatris  . beam.apache.org . Datum för åtkomst: 24 februari 2017. Arkiverad från originalet 25 februari 2017.
  27. Varför Apache Beam? Ett Google-perspektiv | Google Cloud Big Data och maskininlärningsblogg | Google Cloud  Platform . Google Cloud Platform . Datum för åtkomst: 24 februari 2017. Arkiverad från originalet 25 februari 2017.
  28. ↑ Apache Flink 1.2.0-dokumentation : Programmeringsguide för Flink DataSet API  . ci.apache.org . Hämtad 24 februari 2017. Arkiverad från originalet 21 januari 2019.
  29. Strömbehandling för alla med SQL och Apache  Flink . flink.apache.org . Hämtad 8 januari 2020. Arkiverad från originalet 3 juli 2019.

Länkar