Apache NiFi

***Apache NiFi*** ir atvērtā pirmkoda programmatūra, ko izstrādā *Apache Software Foundation* un kas paredzēta datu plūsmu automatizēšanai starp dažādām sistēmām. Tā balstās uz plūsmu programmēšanas modeli un nodrošina vizuālu tīmekļa saskarni datu maršrutēšanas, transformēšanas un pārvaldības procesu projektēšanai. *NiFi* sākotnēji izstrādāja ASV Nacionālā drošības aģentūra (NSA) ar nosaukumu *NiagaraFiles*, un 2014. gadā to publiskoja kā atvērtā pirmkoda projektu.

## Vēsture

### Izstrāde NSA

*NiagaraFiles* izstrādi Nacionālā Drošības aģentūrā (NSA) sāka . Programmatūru izveidoja, lai risinātu aģentūras problēmas liela apjoma neviendabīgu datu savākšanā un apstrādē reāllaikā — tā ļāva automatizēt datu saņemšanu no dažādiem avotiem bez nepieciešamības rakstīt pielāgotu kodu katrai integrācijai. Trīs līdz četru gadu laikā *NiagaraFiles* ieguva plašu lietojumu ASV izlūkošanas kopienā.

### Publiskošana

2014. gada novembrī NSA programmatūru nodeva *Apache* inkubatoram kā daļu no aģentūras tehnoloģiju pārneses programmas. Nosaukums *NiFi* ir saīsinājums no *NiagaraFiles*. 2015. gada jūlijā *Apache NiFi* kļuva par augstākā līmeņa *Apache Software Foundation* projektu. Kopš publiskošanas projektam pievienojušies vairāk nekā 150 izstrādātāji.

### NiFi 2.0

 iznāca *Apache NiFi* 2.0.0 — pirmā jaunās paaudzes stabilā versija. Tika ieviesti vairāki būtiski uzlabojumi: iebūvētu atbalstu *[[Python (programmēšanas valoda)|Python]]* procesoriem, pilnīgi pārbūvētu tīmekļa saskarni, vienkāršotu klasterizāciju ar *Kubernetes*, kā arī plūsmu versiju pārvaldību, izmantojot *[[GitHub]]* un *GitLab* repozitorijus. Tehnoloģisko bāzi modernizēja, pārejot uz *Java 21*, *Spring Framework 6*, *Jetty 12* un *Angular 18*. Izlaišanas procesā atrisināja vairāk nekā 2000 problēmu.

## Arhitektūra

*Apache NiFi* arhitektūra balstās uz plūsmu programmēšanas () modeli, kurā lietojumprogrammu veido kā savstarpēji savienotu apstrādes mezglu tīklu. Katrs mezgls veic noteiktu datu apstrādes funkciju, un dati starp tiem pārvietojas kā atsevišķas informācijas paketes.

*NiFi* ir *[[Java (programmēšanas valoda)|Java]]* programma, kas darbojas serverī. Tās galvenie komponenti ir šādi:

* **FlowFile** — datu pakete, kas satur atribūtus (atslēgas-vērtību pārus) un saturu (baitu plūsmu). Katrs *FlowFile* atspoguļo vienu datu objektu, kas pārvietojas pa sistēmu.
* **Procesors** (*Processor*) — komponents, kas veic datu maršrutēšanu, transformēšanu vai starpniecību ar ārējām sistēmām. *NiFi* piedāvā vairāk nekā 300 iebūvētu procesoru.
* **Savienojums** (*Connection*) — rinda starp diviem procesoriem, kas nodrošina asinhronu datu pārsūtīšanu. Savienojumiem var iestatīt pretspiedienu (*back pressure*) mehānismus un prioritāšu kārtošanu.
* **Plūsmu pārvaldītājs** (*Flow Controller*) — centrālais koordinators, kas pārvalda procesoru izpildi un piešķir resursus.
* **Procesu grupa** (*Process Group*) — loģiski apvienotu procesoru kopa ar ievades un izvades portiem, kas ļauj veidot hierarhiskas datu plūsmas.

*NiFi* glabā datus trīs repozitorijos: *FlowFile* repozitorijā (aktīvo plūsmu statuss), satura repozitorijā (datu saturs tranzītā) un izcelsmes repozitorijā (datu apstrādes vēsture).

## Galvenās iespējas

### Vizuālā saskarne

*NiFi* piedāvā tīmekļa lietotāja saskarni, kurā datu plūsmas var projektēt, modificēt un uzraudzīt reāllaikā. Izmaiņas stājas spēkā nekavējoties, bez nepieciešamības pārstartēt sistēmu.

### Drošība

Sistēma nodrošina šifrētu datu pārraidi, izmantojot TLS protokolu gan starp *NiFi* mezgliem, gan starp *NiFi* un lietotājiem. Tā atbalsta daudzlīmeņu autorizāciju ar dažādām piekļuves tiesībām (lasīšana, pārvaldība, administrēšana) un sensitīvu rekvizītu šifrēšanu servera pusē.

### Klasterizācija

Kopš 1.0 versijas *NiFi* izmanto bezlīderu klasterizācijas modeli, kurā katrs klasterī iekļautais mezgls veic vienādas darbības ar dažādām datu apakškopām. *Apache ZooKeeper* nodrošina klastera koordinatora un primārā mezgla izvēli ar automātisku pārslēgšanos kļūmes gadījumā. Kopš 2.0 versijas ir pieejama arī *Kubernetes* integrācija, kas ļauj atteikties no *ZooKeeper*.

### Datu izcelsmes izsekošana

*NiFi* automātiski reģistrē un indeksē katru datu apstrādes notikumu — saņemšanu, sadalīšanu, apvienošanu, modificēšanu un nosūtīšanu. Šī izcelsmes (*provenance*) izsekošana ir būtiska atbilstības nodrošināšanai, kļūdu diagnosticēšanai un sistēmas optimizēšanai.

### Paplašināmība

Lietotāji var izveidot pielāgotus procesorus, kontrolieru pakalpojumus un atskaišu uzdevumus. Kopš 2.0 versijas procesorus var rakstīt arī *Python* valodā. Katrs paplašinājums darbojas izolētā klases ielādētājā, novēršot atkarību konfliktus.

## Pielietojums

*Apache NiFi* izmanto dažādu nozaru uzņēmumi datu plūsmu pārvaldībai. *Macquarie Technology Group* to lieto miljardiem ikdienas notikumu drošai pārsūtīšanai starp datu centriem. *Micron* ar *NiFi* palīdzību apkopo ražošanas datus no visas pasaules un ievada tos globālajās datu noliktavās. *NTT DATA* izmanto *NiFi* reāllaika IoT un laika rindu datu analīzei naftas, gāzes, ražošanas un mazumtirdzniecības nozarēs.

*Hortonworks*, kas  apvienojās ar *Cloudera*, izveidoja *Hortonworks DataFlow* (HDF) platformu, kuras pamatā bija *NiFi*. *Cloudera* turpina piedāvāt *Cloudera Flow Management* — uzņēmumu līmeņa datu pārvaldības risinājumu, kas balstīts uz *Apache NiFi*.

Izplatītākie *NiFi* lietojuma scenāriji ir:
* datu savākšana un apkopošana no dažādiem avotiem (žurnālfaili, sensori, lietojumprogrammu saskarnes);
* reāllaika datu straumēšana un transformēšana;
* IoT ierīču datu ievākšana un apstrāde;
* datu kvalitātes nodrošināšana un bagātināšana (laika zīmogu, ģeolokācijas datu pievienošana).

## Skatīt arī
* *[[Node-RED]]*

## Atsauces

## Ārējās saites

*