Apache Flink | |
---|---|
Kehittäjä | Apache Software Foundation |
Sisään kirjoitettu | Java [2] [1] ja Scala [1] |
Ensimmäinen painos | 6. tammikuuta 2015 [1] |
Laitteistoalusta | Java-virtuaalikone |
uusin versio |
|
Lisenssi | Apache-lisenssi 2.0 |
Verkkosivusto | flink.apache.org |
Mediatiedostot Wikimedia Commonsissa |
Apache Flink on Apache Software Foundationin kehittämä avoimen lähdekoodin tietovirrankäsittelykehys .
Kehys perustuu Java- ja Scala -kielellä kirjoitettuun prosessinkäsittelymoottoriin [4] [5] . Flink tukee tietovirran ohjelmointia sekä rinnakkaistilassa että liukuhihnatilassa (pipeline) [6] . Liukuhihnatilassa (pipeline) Flink mahdollistaa töiden sarjan (erä) ja työvirran (stream) toteuttamisen [7] [8] . Flink tukee myös iteratiivisia algoritmeja luonnollisesti [9] .
Flinkillä on korkea suorituskyky ja alhainen latenssi [10] , tapahtumat voivat laukaista säikeet ja ylläpitää tilaa. Flink-järjestelmän tehtävät ovat vikasietoisia ja käyttävät täysin samaa semantiikkaa [11] . Ohjelmat puitteisiin voidaan kirjoittaa Javalla , Scalalla [12] , Pythonilla [13] ja SQL :llä [14] , työt käännetään ja optimoidaan automaattisesti [15] , jotka toimivat sekä klustereissa että pilvipalvelimessa [16] .
Flinkillä ei ole omaa tallennusjärjestelmää, mutta se käyttää tietolähteitä ja liittimiä, kuten Amazon Kinesis , Apache Kafka , Alluxio , HDFS , Apache Cassandra ja ElasticSearch [17] .
Apache Flink -yhteisö kehitti Apache 2.0 -lisenssillä [18] Apache Software Foundationissa . Projektia johti 25 ydinkehittäjää ja yli 340 ohjelmoijaa.
Apache Flinkin alkuperäiset kehittäjät perustivat Data Artisansin, 12 ydinkehittäjäyrityksen [19] [20] .
Tietovirran ohjelmointi Apache Flinkissä perustuu tapahtumien käsittelyyn sekä aikarajoitetuille tietojoukoille että jatkuville virroille ilman aikarajoituksia. Alimmalla tasolla Flink-järjestelmän ohjelmat on jaettu virtoihin (stream) ja muunnoksiin (transformaatio). Virta on käsitteellisesti tietueiden jono, joka ei ehkä koskaan lopu. Muunnos on toiminto, joka vastaanottaa yhden tai useamman virran syötteenä ja muuntaa sitten tiedot myös yhdeksi tai useammaksi virraksi [21] .
Apache Flink käyttää kahta pääsovellusliittymää: DataStream API:ta rajoitetuille tai rajoittamattomille streameille ja DataSet API:ta rajoitetuille tietojoukoille. Flink tukee myös Table API:ta taulukoille käyttämällä SQL:n kaltaista kieltä sekä virroille että töille. Korkeimmalla tasolla Flink tukee SQL-kieltä, joka on semanttisesti lähellä Table API:ta ja kyselyitä SQL:n kautta.
Ajon aikana Flink-ohjelmat on yhdistetty suoratoistoon [21] . Jokainen säie ottaa syötteen yhdestä tai useammasta lähteestä (esim. syötteestä, jonosta tai tiedostosta) ja päättyy lähettämällä tietoja yhteen tai useampaan lähtövirtaan (viestijono, tiedostot, tietokanta). Virta käy läpi mielivaltaisen määrän muutosta. Säikeet muodostavat silmukattoman graafin, jolloin sovellus voi haarautua useiksi säikeiksi ja yhdistää säikeitä yhteen.
Flink ehdottaa tulo- ja lähtövirtojen yhdistämistä Alluxio- , Apache Kafka- , Amazon Kinesis-, HDFS- , Apache Cassandra- jne. [17] -tallennustiloihin .
Hajautetuissa järjestelmissä Flink-ohjelmat voivat toimia klustereina tai olla itsenäisiä, ja ne voivat myös käyttää YARN:ia, Mesosta tai Dockeria resurssien määrittämiseen ja allokoimiseen [22] .
Apache Flink sisältää kevyen vikasietomekanismin, joka käyttää hajautettuja tarkistuspisteitä [11] . Tarkistuspiste on automaattinen asynkroninen tallennus (snapshot) sovelluksen tilasta alkuperäisessä säikeessä. Vian sattuessa Flink-ympäristössä oleva ohjelma, jossa on keskeytyskohta, palauttaa prosessin viimeisestä tallennuksesta olettaen, että Flink toimii vain yhdellä sovelluksen tilasemantiikalla. Tarkistuspistemekanismi käyttää koukkuja sovelluskoodissa, jotta ulkoiset järjestelmät voivat mahdollistaa tilan tallennuksen tarkistuspisteissä (samalla tavalla kuin tapahtumat tietokantojen kanssa työskennellessä).
Flink sisältää myös mekanismin "tallennuspisteille", jotka aktivoidaan manuaalisesti [23] . Käyttäjä voi luoda tallennuspisteen, pysäyttää ohjelman Flink-ympäristössä ja käynnistää sen sitten uudelleen samasta paikasta. Tallennuspisteiden avulla voit myös tehdä muutoksia ohjelmaan menettämättä sovelluksen tilaa. Flink 1.2 -versiosta alkaen tallennuspisteiden avulla voit käynnistää sovelluksen uudelleen tietojen rinnakkaiskäsittelytilanteessa
DataStream API Flink-järjestelmässä suorittaa muunnoksia - kuten suodatuksen, yhdistämisen, näytteenoton - rajoitetuissa tai rajoittamattomissa tietovirroissa. DataStream API sisältää yli 20 erilaista muunnostyyppiä, joita voidaan käyttää Javassa ja Scalassa [24] .
Tässä on esimerkki yksinkertaisesta virrankäsittelystä sanamäärää varten jatkuvassa syöttövirrassa viiden sekunnin aikavälein:
tuonti org . apache . flinkkiä . suoratoisto . api . scala . _ tuontiorganisaatio . _ apache . flinkkiä . suoratoisto . api . ikkunointi . aika . Aika tapausluokka WordCount ( sana : merkkijono , määrä : Int ) _ object WindowWordCount { def main ( args : Array [ String ]) { val env = StreamExecutionEnvironment . getExecutionEnvironment val text = env . socketTextStream ( "localhost" , 9999 ) val counts = teksti . flatMap { _ . pienet kirjaimet . split ( "\\W+" ) suodatin { _ . eiTyhjä } } . kartta { WordCount ( _ , 1 ) } . keyBy ( "sana" ) . timeWindow ( Aika . sekuntia ( 5 )) . summa ( "count" ) laskee . Tulosta env . suorita ( "Window Stream WordCount" ) } }Tässä virrassa syöttöteksti jaetaan sanoiksi flatMap-toiminnolla, jokainen sana muunnetaan WordCount-rakenteeksi, jonka laskuri on yhtä suuri, WordCount-objektien virta ryhmitellään sanojen ja 5 sekunnin välein ja sitten tehdään yhteenveto. laskureilla, niin että lopullinen virta sisältää sanalaskurit viiden sekunnin välein.
Apache Beam - Flink esiintyjäApache Beam tarjoaa yhtenäisen ohjelmointimallin, jonka avulla kehittäjä voi luoda töitä liukuhihna- ja suoratoistotilassa ja suorittaa sitten luodut työt Flink-ympäristössä [25] . Apache Beam -pohjainen Flink Executor sisältää runsaasti ominaisuuksia [26] .
Data Artisans kehittää Flink-toteutusohjelmaa [27] .
Flink-järjestelmän DataSet API tukee datan muunnostoimintoja (kuten suodatusta, ryhmittelyä, kartoitusta, yhdistämistä) aikarajoitetuilla tietojoukoilla. DataSet API tarjoaa noin 20 muunnostyyppiä [28] . Tämä API on tuettu Javalle ja Scalalle, ja Pythonille on myös kokeellinen API. DataSet API:n käsite on samanlainen kuin DataStream API:n.
Table API on SQL-tyyppinen lausekekieli relaatiovirtojen ja töiden käsittelyyn, Table API on osa Java- ja Scala-sovellusliittymiä DataSet- ja DataStream. Taulukkosovellusliittymä ja vastaava SQL-käyttöliittymä toimivat relaatiotaulukoiden abstraktin esityksen kanssa. Abstrakteja taulukoita voidaan luoda ulkoisista tiedoista tai olemassa olevista tietovirroista ja tietojoukoista. Taulukon API tukee relaatiotoimintoja - valintaa, yhdistämistä, yhteyttä.
Taulukoista voi myös tehdä kyselyjä käyttämällä standardia SQL-kieltä. Table API ja SQL tarjoavat samat toiminnot ja ne voidaan sekoittaa samassa ohjelmassa. Taulukot voidaan muuntaa takaisin tietojoukoiksi tai tietovirroiksi, loogiset toiminnot optimoidaan Apache Calciten avulla ja muunnetaan DataSet- tai DataStream [29] -rajapintaohjelmiksi .
![]() | |
---|---|
Temaattiset sivustot |
Apache Software Foundation | |||||||
---|---|---|---|---|---|---|---|
Huipputason projektit |
| ||||||
Osaprojektit |
| ||||||
Apache Web |
| ||||||
Muut projektit | |||||||
Kehitysprojektit ( hautomo ) |
| ||||||
Käytöstä poistetut projektit ( ullakko ) | |||||||
|