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] .
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] .
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.
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] .
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 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 artistApache 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 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.
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 .
I sociala nätverk | |
---|---|
Tematiska platser |
Apache Software Foundation | |||||||
---|---|---|---|---|---|---|---|
Toppnivåprojekt |
| ||||||
Delprojekt |
| ||||||
Apache |
| ||||||
Andra projekt | |||||||
Utveckla projekt ( inkubator ) |
| ||||||
Avvecklade projekt ( Attic ) | |||||||
|