Apache Flink

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 12. oktober 2020; checks kræver 13 redigeringer .
Apache Flink
Udvikler Apache Software Foundation
Skrevet i Java [2] [1] og Scala [1]
Første udgave 6. januar 2015 [1]
Hardware platform Java virtuel maskine
nyeste version
Licens Apache-licens 2.0
Internet side flink.apache.org
 Mediefiler på Wikimedia Commons

Apache Flink  er en open source -streambehandlingsramme udviklet af Apache Software Foundation .

Rammen er baseret på en procesbehandlingsmotor skrevet i Java og Scala [4] [5] . Flink understøtter dataflow - programmering både i parallel mode og i pipeline mode (pipeline) [6] . I pipeline-tilstand (pipeline) giver Flink dig mulighed for at implementere en sekvens af job (batch) og en stream af job (stream) [7] [8] . Flink understøtter naturligvis også iterative algoritmer [9] .

Flink har høj gennemløb og lav latency [10] , tråde kan udløses af hændelser og opretholde status. Opgaver i Flink-systemet er fejltolerante og bruger strengt taget samme semantik [11] . Programmer til frameworket kan skrives i Java , Scala [12] , Python [13] og SQL [14] , job kompileres og optimeres automatisk [15] og fungerer både i klynger og i en cloud-server [16] .

Flink har ikke sit eget lagringssystem, men bruger datakilder og stik som Amazon Kinesis , Apache Kafka , Alluxio , HDFS , Apache Cassandra og ElasticSearch [17] .

Udvikling

Apache Flink blev udviklet under Apache 2.0 -licensen [18] af Apache Flink-fællesskabet inden for Apache Software Foundation . Projektet blev ledet af 25 kerneudviklere og over 340 bidragydere programmører.

De oprindelige udviklere af Apache Flink grundlagde Data Artisans, et firma med 12 kerneudviklere [19] [20] .

Oversigt

Dataflow-programmering i Apache Flink er afhængig af hændelseshåndtering for både tidsbegrænsede datasæt og kontinuerlige streams uden tidsbegrænsninger. På bundniveau er programmerne i Flink-systemet opdelt i streams (stream) og transformationer (transformation). En strøm er konceptuelt en kø af poster, der måske aldrig slutter. En transformation er en operation, der modtager en eller flere strømme som input, og derefter transformerer dataene også til en eller flere strømme [21] .

Apache Flink bruger to hoved-API'er: DataStream API til begrænsede eller ubegrænsede streams og DataSet API til begrænsede datasæt. Flink understøtter også Table API til tabeller ved at bruge et sprog som SQL til både streams og job. På højeste niveau understøtter Flink SQL-sproget, som er semantisk tæt på Table API og forespørgsler gennem SQL.

Programmeringsmodel og distribueret udførelse af opgaver

Ved kørsel er Flink-programmer knyttet til streaming [21] . Hver tråd tager input fra en eller flere kilder (f.eks. input, kø eller fil) og afsluttes ved at sende data til en eller flere outputstrømme (meddelelseskø, filer, database). Strømmen gennemgår en vilkårlig mængde transformation. Tråde danner en løkkefri graf, der tillader en applikation at forgrene sig i mange tråde og flette tråde sammen.

Flink foreslår at forbinde input- og output-streams til Alluxio , Apache Kafka , Amazon Kinesis, HDFS , Apache Cassandra , etc. [17] lagerpladser .

I distribuerede systemer kan Flink-programmer køre i klynger eller være uafhængige, også ved at bruge YARN, Mesos eller Docker til at konfigurere og allokere ressourcer [22] .

Statusser: checkpoints, savepoints, failover

Apache Flink inkluderer en letvægts failover-mekanisme, der bruger distribuerede kontrolpunkter [11] . Et kontrolpunkt er en automatisk asynkron lagring (snapshot) af applikationstilstanden i den originale tråd. I tilfælde af en fejl vil et program i et Flink-miljø med breakpoint-indstillingen genoprette processen fra den sidste lagring, forudsat at Flink kun opererer med én applikationsstatussemantik. Checkpoint-mekanismen bruger hooks i applikationskoden, så eksterne systemer kan aktivere tilstandslagring i checkpoints (svarende til transaktioner, når man arbejder med databaser).

Flink indeholder også en mekanisme til "sparepunkter", som aktiveres manuelt [23] . Brugeren kan oprette et lagringspunkt, stoppe programmet i Flink-miljøet og derefter genstarte det fra samme position. Savepoints giver dig også mulighed for at foretage ændringer i programmet uden at miste status for applikationen. Fra versionen af ​​Flink 1.2 giver savepoints dig mulighed for at genstarte applikationen i en dataparallel behandlingssituation

DataStream API

DataStream API'en i Flink-systemet udfører transformationer - såsom filtrering, aggregering, sampling - på begrænsede eller ubegrænsede datastrømme. DataStream API inkluderer over 20 forskellige typer transformationer, der kan bruges i Java og Scala [24] .

Her er et eksempel på en simpel strømbehandling for et ordtal i en kontinuerlig inputstrøm over fem sekunders tidsintervaller:

import org . apache . flink . streaming . api . scala . _ import org . apache . flink . streaming . api . vinduesåbning . tid . Tid kasusklasse WordCount ( ord : Streng , antal : Int ) _ object WindowWordCount { def main ( args : Array [ String ]) { val env = StreamExecutionEnvironment . getExecutionEnvironment val text = env . socketTextStream ( "localhost" , 9999 ) val tæller = tekst . flatMap { _ . til LowerCase . split ( "\\W+" ) filter { _ . nonEmpty } } . kort { WordCount ( _ , 1 ) } . keyBy ( "ord" ) . timeWindow ( Tid . sekunder ( 5 ) ) . sum ( "tælle" ) tæller . Print env . execute ( "Window Stream WordCount" ) } }

I denne strøm opdeles inputteksten i ord ved hjælp af flatMap-operationen, hvert ord konverteres til en WordCount-struktur med en tæller lig med én, strømmen af ​​WordCount-objekter grupperes efter ord og tidsintervaller på 5 sekunder og opsummeres derefter ved tællere, så den endelige strøm indeholder ordtællere i fem sekunders intervaller.

Apache Beam - Flink performer

Apache Beam tilbyder en samlet programmeringsmodel, der gør det muligt for udvikleren at oprette jobs i pipeline- og streaming-tilstand og derefter udføre de oprettede job i Flink-miljøet [25] . Den Apache Beam-baserede Flink Executor indeholder et rigt sæt funktioner [26] .

Flink-eksekutoren udvikles af Data Artisans [27] .

DataSet API

DataSet API'et i Flink-systemet understøtter datatransformationsoperationer (såsom filtrering, gruppering, kortlægning, sammenføjning) med tidsbegrænsede datasæt. DataSet API tilbyder omkring 20 typer transformationer [28] . Denne API er understøttet til Java og Scala, og der er også en eksperimentel API til Python. Konceptet for DataSet API ligner det for DataStream API.

Tabel API og SQL

Table API er et SQL-type udtrykssprog til håndtering af relationelle streams og job, Table API er en del af DataSet og DataStream API'erne til Java og Scala. Table API og den tilsvarende SQL-grænseflade arbejder med en abstrakt repræsentation af relationelle tabeller. Abstrakte tabeller kan oprettes ud fra eksterne data eller fra eksisterende datastrømme og datasæt. Tabel API understøtter relationelle operationer - udvælgelse, aggregering, forbindelse.

Tabeller kan også forespørges ved hjælp af standard SQL-sprog. Table API og SQL tilbyder samme funktionalitet og kan blandes i det samme program. Tabeller kan konverteres tilbage til datasæt eller datastrømme, logiske operationer optimeres ved hjælp af Apache Calcite og konverteres til DataSet eller DataStream [29] grænsefladeprogrammer .

Noter

  1. 1 2 3 https://projects.apache.org/json/projects/flink.json
  2. The flink Open Source Project på Open Hub: Languages-side - 2006.
  3. https://flink.apache.org/news/2022/10/28/1.16-announcement.html
  4. Apache Flink: Skalerbar batch- og streamdatabehandling . apache.org . Hentet 7. februar 2020. Arkiveret fra originalen 26. december 2018.
  5. apache/flink . GitHub . Hentet 7. februar 2020. Arkiveret fra originalen 28. januar 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 og Daniel Warneke. 2014. Stratosfærens platform for big data-analyse . VLDB Journal 23, 6 (december 2014), 939-964. DOI
  7. Ian Pointer. Apache Flink: Ny Hadoop-udfordrer kæmper mod Spark . InfoWorld (7. maj 2015). Hentet 7. februar 2020. Arkiveret fra originalen 23. oktober 2018.
  8. Apache Flink. Interview med Volker Markl. . odbms.org . Hentet 7. februar 2020. Arkiveret fra originalen 23. oktober 2018.
  9. Stephan Ewen, Kostas Tzoumas, Moritz Kaufmann og Volker Markl. 2012. Snurrende hurtige iterative datastrømme . Proc. VLDB Begavelse. 5, 11 (juli 2012), 1268-1279. DOI
  10. Benchmarking af streamingberegningsmotorer hos Yahoo! . Arkiveret fra originalen den 1. maj 2017. Hentet 7. februar 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-programmeringsvejledning  . ci.apache.org . Hentet 23. februar 2017. Arkiveret fra originalen 21. januar 2019.
  13. ↑ Apache Flink 1.2.0 -dokumentation: Python-programmeringsvejledning  . ci.apache.org . Hentet 23. februar 2017. Arkiveret fra originalen 21. februar 2017.
  14. Apache Flink 1.2.0 Dokumentation: Tabel og  SQL . ci.apache.org . Hentet 23. februar 2017. Arkiveret fra originalen 18. maj 2019.
  15. Fabian Hueske, Mathias Peters, Matthias J. Sax, Astrid Rheinländer, Rico Bergmann, Aljoscha Krettek og Kostas Tzoumas. 2012. Åbning af de sorte bokse i dataflowoptimering . Proc. VLDB Begavelse. 5, 11 (juli 2012), 1256-1267. DOI
  16. Daniel Warneke og Odej Kao. 2009. Nephele: effektiv parallel databehandling i skyen . I Proceedings of the 2nd Workshop on Many-Task Computing on Grids and Supercomputers (MTAGS '09). ACM, New York, NY, USA, artikel 8, 10 sider. DOI
  17. ↑ 1 2 Apache Flink 1.2.0 Dokumentation:  Streamingkonnektorer . ci.apache.org . Hentet 23. februar 2017. Arkiveret fra originalen 21. februar 2017.
  18. ASF Git Repos - flink.git/blob - LICENS (downlink ) . apache.org . Hentet 12. april 2015. Arkiveret fra originalen 23. oktober 2017. 
  19. Team - data Artisans  (engelsk)  (utilgængeligt link) . data-artisans.com . Hentet 23. februar 2017. Arkiveret fra originalen 23. februar 2017.
  20. Apache Flink: Community & Project  Info . flink.apache.org . Hentet 23. februar 2017. Arkiveret fra originalen 21. februar 2017.
  21. ↑ 1 2 Apache Flink 1.2.0 Dokumentation : Dataflow-programmeringsmodel  . ci.apache.org . Hentet 23. februar 2017. Arkiveret fra originalen 21. februar 2017.
  22. ↑ Apache Flink 1.2.0 Dokumentation : Distributed Runtime Environment  . ci.apache.org . Dato for adgang: 24. februar 2017. Arkiveret fra originalen 21. februar 2017.
  23. Apache Flink 1.2.0 Dokumentation: Distributed Runtime Environment -  Savepoints . ci.apache.org . Dato for adgang: 24. februar 2017. Arkiveret fra originalen 21. februar 2017.
  24. ↑ Apache Flink 1.2.0-dokumentation : Flink DataStream API-programmeringsvejledning  . ci.apache.org . Hentet 24. februar 2017. Arkiveret fra originalen 21. januar 2019.
  25. Apache  Beam . beam.apache.org . Dato for adgang: 24. februar 2017. Arkiveret fra originalen 25. februar 2017.
  26. ↑ Apache Beam Capability Matrix  . beam.apache.org . Dato for adgang: 24. februar 2017. Arkiveret fra originalen 25. februar 2017.
  27. Hvorfor Apache Beam? Et Google-perspektiv | Google Cloud Big Data og Machine Learning Blog | Google Cloud  Platform . Google Cloud Platform . Dato for adgang: 24. februar 2017. Arkiveret fra originalen 25. februar 2017.
  28. ↑ Apache Flink 1.2.0-dokumentation : Flink DataSet API-programmeringsvejledning  . ci.apache.org . Hentet 24. februar 2017. Arkiveret fra originalen 21. januar 2019.
  29. Streambehandling for alle med SQL og Apache  Flink . flink.apache.org . Hentet 8. januar 2020. Arkiveret fra originalen 3. juli 2019.

Links