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] .
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] .
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.
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] .
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'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 performerApache 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'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.
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 .
I sociale netværk | |
---|---|
Tematiske steder |
Apache Software Foundation | |||||||
---|---|---|---|---|---|---|---|
Projekter på topniveau |
| ||||||
Delprojekter |
| ||||||
Apache Web |
| ||||||
Andre projekter | |||||||
Udvikling af projekter ( inkubator ) |
| ||||||
Nedlagte projekter ( loftsrum ) | |||||||
|