Apache Flink
Utvecklare | Apache Software Foundation |
---|---|
Initial release | maj 2011 |
Stabil frisättning | |
Förvar | |
Skrivet i | Java och Scala |
Operativ system | Cross-plattform |
Typ |
|
Licens | Apache-licens 2.0 |
Hemsida |
|
Apache Flink är ett ramverk för öppen källkod för strömbearbetning och batchbearbetning utvecklat av Apache Software Foundation . Kärnan i Apache Flink är en distribuerad strömmande dataflödesmotor skriven i Java och Scala . Flink exekverar godtyckliga dataflödesprogram på ett dataparallellt och pipelinerat (därav uppgift parallellt ) sätt. Flinks pipelined runtime-system möjliggör exekvering av bulk-/batch- och strömbehandlingsprogram. Dessutom stöder Flinks körtid exekvering av iterativa algoritmer inbyggt.
Flink tillhandahåller en streamingmotor med hög genomströmning och låg latens samt stöd för bearbetning av händelser och tillståndshantering. Flink-applikationer är feltoleranta i händelse av maskinfel och stöder exakt-en gång semantik. Program kan skrivas i Java , Scala , Python och SQL och kompileras automatiskt och optimeras till dataflödesprogram som körs i en kluster- eller molnmiljö.
Flink tillhandahåller inte sitt eget datalagringssystem, men tillhandahåller datakällor och sänkanslutningar till system som Amazon Kinesis , Apache Kafka , HDFS , Apache Cassandra och ElasticSearch .
Utveckling
Apache Flink är utvecklad under Apache License 2.0 av Apache Flink Community inom Apache Software Foundation . Projektet drivs av över 25 engagerade och över 340 bidragsgivare.
Översikt
Apache Flinks dataflödesprogrammeringsmodell tillhandahåller bearbetning av händelser i taget på både ändliga och oändliga datamängder. På en grundläggande nivå består Flink-program av strömmar och transformationer. "Begreppsmässigt är en ström ett (potentiellt oändligt) flöde av dataposter, och en transformation är en operation som tar en eller flera strömmar som input och producerar en eller flera utströmmar som ett resultat."
Apache Flink innehåller två kärn-API:er: ett DataStream API för gränsade eller ogränsade dataströmmar och ett DataSet API för gränsade datamängder. Flink erbjuder också ett Table API, som är ett SQL-liknande uttrycksspråk för relationsström och batchbearbetning som enkelt kan bäddas in i Flinks DataStream och DataSet API:er. Det högsta språket som stöds av Flink är SQL, som är semantiskt likt Table API och representerar program som SQL-frågeuttryck.
Programmeringsmodell och distribuerad körtid
Vid körning mappas Flink-program till strömmande dataflöden . Varje Flink-dataflöde börjar med en eller flera källor (en dataingång, t.ex. en meddelandekö eller ett filsystem) och slutar med en eller flera sänkor (en datautgång, t.ex. en meddelandekö, filsystem eller databas). Ett godtyckligt antal transformationer kan utföras på strömmen. Dessa strömmar kan ordnas som en riktad, acyklisk dataflödesgraf, vilket gör att en applikation kan förgrena och slå samman dataflöden.
Flink erbjuder färdigbyggda käll- och diskkontakter med Apache Kafka , Amazon Kinesis, HDFS , Apache Cassandra och mer.
Flink-program körs som ett distribuerat system inom ett kluster och kan distribueras i ett fristående läge såväl som på YARN, Mesos, Docker-baserade inställningar tillsammans med andra ramverk för resurshantering.
Status: Kontrollpunkter, räddningspunkter och feltolerans
Apache Flink inkluderar en lätt feltoleransmekanism baserad på distribuerade kontrollpunkter. En kontrollpunkt är en automatisk, asynkron ögonblicksbild av tillståndet för en applikation och positionen i en källström. I fallet med ett misslyckande kommer ett Flink-program med kontrollpunkt aktiverad, vid återställning, att återuppta bearbetningen från den senast avslutade kontrollpunkten, vilket säkerställer att Flink upprätthåller semantik för exakt engångstillstånd i en applikation. Kontrollpunktsmekanismen exponerar krokar för applikationskod för att även inkludera externa system i kontrollmekanismen (som att öppna och utföra transaktioner med ett databassystem).
Flink inkluderar också en mekanism som kallas räddningspunkter, som är manuellt utlösta kontrollpunkter. En användare kan generera en räddningspunkt, stoppa ett körande Flink-program och sedan återuppta programmet från samma applikationstillstånd och position i strömmen. Savepoints möjliggör uppdateringar av ett Flink-program eller ett Flink-kluster utan att förlora programmets tillstånd . Från och med Flink 1.2 tillåter savepoints också att starta om en applikation med en annan parallellitet – vilket gör det möjligt för användare att anpassa sig till ändrade arbetsbelastningar.
DataStream API
Flinks DataStream API möjliggör transformationer (t.ex. filter, aggregationer, fönsterfunktioner) på avgränsade eller obegränsade dataströmmar. DataStream API innehåller mer än 20 olika typer av transformationer och är tillgängligt i Java och Scala.
Ett enkelt exempel på ett program för tillståndsbearbetning av strömmar är ett program som sänder ut ett ordantal från en kontinuerlig ingångsström och grupperar data i 5-sekundersfönster:
import org . apache . flink . streaming . api . scala . _ import org . apache . flink . streaming . api . fönster . tid . Time case class WordCount ( ord : String , count : Int ) objekt 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 . skriv ut env . exekvera ( "Window Stream WordCount" ) } }
Apache Beam - Flink Runner
Apache Beam "tillhandahåller en avancerad enhetlig programmeringsmodell, som tillåter (en utvecklare) att implementera batch- och strömmande databearbetningsjobb som kan köras på vilken exekveringsmotor som helst." Apache Flink-on-Beam löparen är den mest funktionsrika enligt en kapacitetsmatris som underhålls av Beam-gemenskapen.
data Artisans, i samarbete med Apache Flink-communityt, arbetade nära med Beam-communityt för att utveckla en Flink-runner.
DataSet API
Flinks DataSet API möjliggör transformationer (t.ex. filter, mappning, sammanfogning, gruppering) på avgränsade datamängder. DataSet API innehåller mer än 20 olika typer av transformationer. API:t är tillgängligt i Java, Scala och ett experimentellt Python API. Flinks DataSet API liknar konceptuellt DataStream API.
Tabell API och SQL
Flinks Table API är ett SQL-liknande uttrycksspråk för relationsström och batchbearbetning som kan bäddas in i Flinks Java och Scala DataSet och DataStream API:er. Tabell-API- och SQL-gränssnittet fungerar på en relationell tabellabstraktion. Tabeller kan skapas från externa datakällor eller från befintliga DataStreams och DataSets. Tabell-API:et stöder relationsoperatorer som urval, aggregering och kopplingar till tabeller.
Tabeller kan också frågas med vanlig SQL. Tabell-API och SQL erbjuder motsvarande funktionalitet och kan blandas i samma program. När en tabell konverteras tillbaka till en DataSet eller DataStream, optimeras den logiska planen, som definierades av relationsoperatorer och SQL-frågor, med Apache Calcite och omvandlas till ett DataSet eller DataStream-program.
Bläddra framåt
Flink Forward är en årlig konferens om Apache Flink. Den första upplagan av Flink Forward ägde rum 2015 i Berlin. Den två dagar långa konferensen hade över 250 deltagare från 16 länder. Sessionerna organiserades i två spår med över 30 tekniska presentationer från Flink-utvecklare och ytterligare ett spår med praktisk Flink-träning.
Under 2016 anslöt 350 deltagare till konferensen och över 40 talare presenterade tekniska föredrag i 3 parallella spår. På den tredje dagen bjöds deltagarna in att delta i praktiska träningspass.
Under 2017 expanderar evenemanget till San Francisco också. Konferensdagen ägnas åt tekniska samtal om hur Flink används i företaget, Flink-systems interna delar, ekosystemintegrationer med Flink och plattformens framtid. Den innehåller keynotes, föredrag från Flink-användare inom industri och akademi, och praktiska träningssessioner om Apache Flink.
År 2020, efter covid-19-pandemin, avbröts Flink Forwards vårupplaga som var tänkt att vara värd i San Francisco. Istället hölls konferensen virtuellt, med start den 22 april och avslutas den 24 april, med live keynotes, Flink-användningsfall, Apache Flink-interna material och andra ämnen om strömbearbetning och realtidsanalys.
Historia
startades forskningsprojektet "Stratosphere: Information Management on the Cloud" ledd av Volker Markl (finansierat av German Research Foundation (DFG) ) som ett samarbete mellan Technical University Berlin , Humboldt-Universität zu Berlin och Hasso-Plattner -Institut Potsdam. Flink startade från en gaffel av Stratospheres distribuerade exekveringsmotor och det blev ett Apache Incubator- projekt i mars 2014. I december 2014 accepterades Flink som ett Apache-projekt på toppnivå.
Version | Original releasedatum | Senaste versionen | Utgivningsdatum | |
---|---|---|---|---|
0.9 | 2015-06-24 | 0.9.1 | 2015-09-01 | |
0.10 | 2015-11-16 | 0.10.2 | 2016-02-11 | |
1.0 | 2016-03-08 | 1.0.3 | 2016-05-11 | |
1.1 | 2016-08-08 | 1.1.5 | 2017-03-22 | |
1.2 | 2017-02-06 | 1.2.1 | 2017-04-26 | |
1.3 | 2017-06-01 | 1.3.3 | 2018-03-15 | |
1.4 | 2017-12-12 | 1.4.2 | 2018-03-08 | |
1.5 | 2018-05-25 | 1.5.6 | 2018-12-26 | |
1.6 | 2018-08-08 | 1.6.3 | 2018-12-22 | |
1.7 | 2018-11-30 | 1.7.2 | 2019-02-15 | |
1.8 | 2019-04-09 | 1.8.3 | 2019-12-11 | |
1.9 | 2019-08-22 | 1.9.2 | 2020-01-30 | |
1.10 | 2020-02-11 | 1.10.3 | 2021-01-29 | |
1.11 | 2020-07-06 | 1.11.6 | 2021-12-16 | |
1.12 | 2020-12-10 | 1.12.7 | 2021-12-16 | |
1.13 | 2021-05-03 | 1.13.6 | 2022-02-18 | |
1.14 | 2021-09-29 | 1.14.6 | 2022-09-28 | |
1.15 | 2022-05-05 | 1.15.2 | 2022-08-25 | |
1.16 | 2022-10-28 | 1.16.0 | 2022-10-28 | |
Legend:
Gammal version
Äldre version, fortfarande underhållen
Senaste versionen
|
Lanseringsdatum
- 10/2022: Apache Flink 1.16
- 05/2022: Apache Flink 1.15 (07/2022: v1.15.1; 08/2022: v1.15.2)
- 09/2021: Apache Flink 1.14 (12/2021: v1.14.2; 01/2022: v1.14.3; 03/2022: v1.14.4; 06/2022: v1.14.5; 09/2022: v.61).
- 05/2021: Apache Flink 1.13 (05/2021: v1.13.1; 08/2021: v1.13.2; 10/2021: v1.13.3; 12/2021: v1.13.5; 02/2022: v.61)
- 12/2020: Apache Flink 1.12 (01/2021: v1.12.1; 03/2021: v1.12.2; 04/2021: v1.12.3; 05/2021: v1.12.4; 08/2021: v1.2.51; 2021: v1.12.7)
- 07/2020: Apache Flink 1.11 (07/2020: v1.11.1; 09/2020: v1.11.2; 12/2020: v1.11.3; 08/2021: v1.11.4; 12/2021: v.61)
- 02/2020: Apache Flink 1.10 (05/2020: v1.10.1; 08/2020: v1.10.2; 01/2021: v1.10.3)
- 08/2019: Apache Flink 1.9 (10/2019: v1.9.1; 01/2020: v1.9.2)
- 04/2019: Apache Flink 1.8 (07/2019: v1.8.1; 09/2019: v1.8.2; 12/2019: v1.8.3)
- 11/2018: Apache Flink 1.7 (12/2018: v1.7.1; 2019/02: v1.7.2)
- 08/2018: Apache Flink 1.6 (09/2018: v1.6.1; 10/2018: v1.6.2; 12/2018: v1.6.3; 02/2019: v1.6.4)
- 05/2018: Apache Flink 1.5 (07/2018: v1.5.1; 07/2018: v1.5.2; 08/2018: v1.5.3; 09/2018: v1.5.4; 10/2018: v1.2/5; 2018: v1.5.6)
- 12/2017: Apache Flink 1.4 (02/2018: v1.4.1; 03/2018: v1.4.2)
- 06/2017: Apache Flink 1.3 (06/2017: v1.3.1; 08/2017: v1.3.2; 03/2018: v1.3.3)
- 02/2017: Apache Flink 1.2 (04/2017: v1.2.1)
- 08/2016: Apache Flink 1.1 (08/2016: v1.1.1; 09/2016: v1.1.2; 10/2016: v1.1.3; 12/2016: v1.1.4; 03/2017: v1.1.5)
- 03/2016: Apache Flink 1.0 (04/2016: v1.0.1; 04/2016: v1.0.2; 05/2016: v1.0.3)
- 11/2015: Apache Flink 0.10 (11/2015: v0.10.1; 02/2016: v0.10.2)
- 06/2015: Apache Flink 0.9 (09/2015: v0.9.1)
- 04/2015: Apache Flink 0.9-milstolpe-1
Apache Incubator Releasedatum
- 01/2015: Apache Flink 0.8-inkubering
- 11/2014: Apache Flink 0.7-inkubering
- 08/2014: Apache Flink 0.6-inkubering (09/2014: v0.6.1-inkubering)
- 05/2014: Stratosphere 0.5 (06/2014: v0.5.1; 07/2014: v0.5.2)
Pre-Apache Stratosphere Releasedatum
- 01/2014: Stratosphere 0.4 (version 0.3 hoppades över)
- 08/2012: Stratosfären 0.2
- 05/2011: Stratosphere 0.1 (08/2011: v0.1.1)
Utgåvorna 1.14.1, 1.13.4, 1.12.6, 1.11.5, som endast skulle innehålla en Log4j- uppgradering till 2.15.0, hoppades över eftersom CVE- 2021-45046 upptäcktes under utgivningspubliceringen.