Apache NiFiలో ఫ్లో డెలివరీ ఆటోమేషన్

హలో అందరికీ!

Apache NiFiలో ఫ్లో డెలివరీ ఆటోమేషన్

పని క్రింది విధంగా ఉంది - పై చిత్రంలో ప్రదర్శించబడిన ఒక ప్రవాహం ఉంది, దీనితో N సర్వర్‌లకు వెళ్లాలి అపాచీ నిఫై. ఫ్లో పరీక్ష - ఒక ఫైల్ ఉత్పత్తి చేయబడుతోంది మరియు మరొక NiFi ఉదాహరణకి పంపబడుతోంది. NiFi సైట్ నుండి సైట్ ప్రోటోకాల్‌ను ఉపయోగించి డేటా బదిలీ జరుగుతుంది.

NiFi సైట్ నుండి సైట్ (S2S) అనేది NiFi ఉదాహరణల మధ్య డేటాను బదిలీ చేయడానికి సురక్షితమైన, సులభంగా కాన్ఫిగర్ చేయగల మార్గం. S2S ఎలా పని చేస్తుంది, చూడండి డాక్యుమెంటేషన్ మరియు S2Sని అనుమతించడానికి NiFi ఉదాహరణను కాన్ఫిగర్ చేయడం మర్చిపోకుండా ఉండటం ముఖ్యం, చూడండి ఇక్కడ.

మేము S2S ఉపయోగించి డేటా బదిలీ గురించి మాట్లాడుతున్న సందర్భాల్లో, ఒక ఉదాహరణను క్లయింట్ అంటారు, రెండవ సర్వర్. క్లయింట్ డేటాను పంపుతుంది, సర్వర్ అందుకుంటుంది. వాటి మధ్య డేటా బదిలీని కాన్ఫిగర్ చేయడానికి రెండు మార్గాలు:

  1. పుష్. క్లయింట్ ఉదాహరణ నుండి, రిమోట్ ప్రాసెస్ గ్రూప్ (RPG) ఉపయోగించి డేటా పంపబడుతుంది. సర్వర్ ఉదాహరణలో, ఇన్‌పుట్ పోర్ట్ ఉపయోగించి డేటా స్వీకరించబడుతుంది
  2. పుల్. సర్వర్ RPGని ఉపయోగించి డేటాను అందుకుంటుంది, క్లయింట్ అవుట్‌పుట్ పోర్ట్‌ని ఉపయోగించి పంపుతుంది.


రోలింగ్ అవుట్ కోసం ఫ్లో అపాచీ రిజిస్ట్రీలో నిల్వ చేయబడుతుంది.

Apache NiFi రిజిస్ట్రీ అనేది Apache NiFi యొక్క ఉపప్రాజెక్ట్, ఇది ఫ్లో నిల్వ మరియు సంస్కరణ నియంత్రణ కోసం ఒక సాధనాన్ని అందిస్తుంది. ఒక విధమైన GIT. ఇన్‌స్టాల్ చేయడం, కాన్ఫిగర్ చేయడం మరియు రిజిస్ట్రీతో పని చేయడం గురించి సమాచారాన్ని కనుగొనవచ్చు అధికారిక డాక్యుమెంటేషన్. నిల్వ కోసం ఫ్లో ప్రక్రియ సమూహంగా మిళితం చేయబడుతుంది మరియు రిజిస్ట్రీలో ఈ రూపంలో నిల్వ చేయబడుతుంది. మేము దీని తరువాత వ్యాసంలో తిరిగి వస్తాము.

ప్రారంభంలో, N చిన్న సంఖ్య అయినప్పుడు, ఫ్లో డెలివరీ చేయబడుతుంది మరియు ఆమోదయోగ్యమైన సమయంలో మాన్యువల్‌గా అప్‌డేట్ చేయబడుతుంది.

కానీ N పెరుగుతున్న కొద్దీ, సమస్యలు చాలా ఎక్కువ అవుతాయి:

  1. ప్రవాహాన్ని నవీకరించడానికి ఎక్కువ సమయం పడుతుంది. మీరు అన్ని సర్వర్‌లలోకి లాగిన్ అవ్వాలి
  2. టెంప్లేట్ నవీకరణ లోపాలు ఏర్పడతాయి. ఇక్కడ వారు దానిని నవీకరించారు, కానీ ఇక్కడ వారు మర్చిపోయారు
  3. పెద్ద సంఖ్యలో ఇలాంటి ఆపరేషన్లు చేస్తున్నప్పుడు మానవ లోపాలు

ఇవన్నీ మనం ప్రక్రియను ఆటోమేట్ చేయాల్సిన అవసరం ఉన్నాయనే వాస్తవాన్ని మాకు తెస్తుంది. ఈ సమస్యను పరిష్కరించడానికి నేను ఈ క్రింది మార్గాలను ప్రయత్నించాను:

  1. NiFiకి బదులుగా MiNiFiని ఉపయోగించండి
  2. NiFi CLI
  3. NiPyAPI

MiNiFiని ఉపయోగిస్తోంది

అపాచీ మినిఫై - Apache NiFi యొక్క ఉపప్రాజెక్ట్. MiNiFy అనేది NiFi వలె అదే ప్రాసెసర్‌లను ఉపయోగించే ఒక కాంపాక్ట్ ఏజెంట్, ఇది NiFiలో ఉన్న అదే ప్రవాహాలను సృష్టించడానికి మిమ్మల్ని అనుమతిస్తుంది. MiNiFyకి ఫ్లో కాన్ఫిగరేషన్ కోసం గ్రాఫికల్ ఇంటర్‌ఫేస్ లేనందున ఏజెంట్ యొక్క తేలికపాటి స్వభావం ఇతర విషయాలతోపాటు సాధించబడుతుంది. మినిఫైలో గ్రాఫికల్ ఇంటర్‌ఫేస్ లేకపోవడం అంటే మినిఫైకి ప్రవాహాన్ని పంపిణీ చేసే సమస్యను పరిష్కరించడం అవసరం. IOTలో MiNiFy చురుగ్గా ఉపయోగించబడుతున్నందున, అనేక భాగాలు ఉన్నాయి మరియు చివరి minifi ఉదంతాలకు ప్రవాహాన్ని అందించే ప్రక్రియను ఆటోమేట్ చేయాలి. తెలిసిన పని, సరియైనదా?

ఈ సమస్యను పరిష్కరించడానికి మరొక ఉపప్రాజెక్ట్ సహాయం చేస్తుంది - MiNiFi C2 సర్వర్. ఈ ఉత్పత్తి కాన్ఫిగరేషన్ రోల్‌అవుట్ ఆర్కిటెక్చర్‌లో కేంద్ర బిందువుగా ఉద్దేశించబడింది. పర్యావరణాన్ని ఎలా కాన్ఫిగర్ చేయాలి - లో వివరించబడింది ఈ వ్యాసం సమస్యను పరిష్కరించడానికి హబ్రేలో తగినంత సమాచారం ఉంది. MiNiFi, C2 సర్వర్‌తో కలిసి, దాని కాన్ఫిగరేషన్‌ను స్వయంచాలకంగా నవీకరిస్తుంది. ఈ విధానం యొక్క ఏకైక లోపం ఏమిటంటే మీరు C2 సర్వర్‌లో టెంప్లేట్‌లను సృష్టించాలి; రిజిస్ట్రీకి సాధారణ నిబద్ధత సరిపోదు.

పై కథనంలో వివరించిన ఎంపిక పని చేస్తోంది మరియు అమలు చేయడం కష్టం కాదు, కానీ మనం ఈ క్రింది వాటిని మర్చిపోకూడదు:

  1. Minifiలో nifi నుండి అన్ని ప్రాసెసర్‌లు లేవు
  2. మినీఫై ప్రాసెసర్ వెర్షన్‌లు నిఫై ప్రాసెసర్ వెర్షన్‌ల కంటే వెనుకబడి ఉన్నాయి.

వ్రాసే సమయంలో, NiFi యొక్క తాజా వెర్షన్ 1.9.2. తాజా MiNiFi ప్రాసెసర్ వెర్షన్ 1.7.0. ప్రాసెసర్‌లను MiNiFiకి జోడించవచ్చు, కానీ NiFi మరియు MiNiFi ప్రాసెసర్‌ల మధ్య సంస్కరణ వ్యత్యాసాల కారణంగా, ఇది పని చేయకపోవచ్చు.

NiFi CLI

ద్వారా తీర్పు వివరణ అధికారిక వెబ్‌సైట్‌లోని సాధనం, ఇది ఫ్లో డెలివరీ లేదా ప్రాసెస్ మేనేజ్‌మెంట్ రంగంలో NiFI మరియు NiFi రిజిస్ట్రీ మధ్య పరస్పర చర్యను ఆటోమేట్ చేయడానికి ఒక సాధనం. ప్రారంభించడానికి, మీరు ఈ సాధనాన్ని డౌన్‌లోడ్ చేసుకోవాలి. ఇక్కడ నుండి.

యుటిలిటీని ప్రారంభించండి

./bin/cli.sh
           _     ___  _
 Apache   (_)  .' ..](_)   ,
 _ .--.   __  _| |_  __    )
[ `.-. | [  |'-| |-'[  |  /  
|  | | |  | |  | |   | | '    '
[___||__][___][___] [___]',  ,'
                           `'
          CLI v1.9.2

Type 'help' to see a list of available commands, use tab to auto-complete.

మేము రిజిస్ట్రీ నుండి అవసరమైన ప్రవాహాన్ని లోడ్ చేయడానికి, మేము బకెట్ (బకెట్ ఐడెంటిఫైయర్) మరియు ప్రవాహం (ఫ్లో ఐడెంటిఫైయర్) యొక్క ఐడెంటిఫైయర్లను తెలుసుకోవాలి. ఈ డేటాను cli ద్వారా లేదా NiFi రిజిస్ట్రీ వెబ్ ఇంటర్‌ఫేస్‌లో పొందవచ్చు. వెబ్ ఇంటర్‌ఫేస్‌లో ఇది ఇలా కనిపిస్తుంది:

Apache NiFiలో ఫ్లో డెలివరీ ఆటోమేషన్

CLIని ఉపయోగించి ఇది జరుగుతుంది:

#> registry list-buckets -u http://nifi-registry:18080

#   Name             Id                                     Description
-   --------------   ------------------------------------   -----------
1   test_bucket   709d387a-9ce9-4535-8546-3621efe38e96   (empty)

#> registry list-flows -b 709d387a-9ce9-4535-8546-3621efe38e96 -u http://nifi-registry:18080

#   Name           Id                                     Description
-   ------------   ------------------------------------   -----------
1   test_flow   d27af00a-5b47-4910-89cd-9c664cd91e85

మేము రిజిస్ట్రీ నుండి ప్రక్రియ సమూహాన్ని దిగుమతి చేయడాన్ని ప్రారంభిస్తాము:

#> nifi pg-import -b 709d387a-9ce9-4535-8546-3621efe38e96 -f d27af00a-5b47-4910-89cd-9c664cd91e85 -fv 1 -u http://nifi:8080

7f522a13-016e-1000-e504-d5b15587f2f3

ఒక ముఖ్యమైన విషయం ఏమిటంటే, ఏదైనా nifi ఉదాహరణ మనం ప్రాసెస్ సమూహాన్ని రోల్ చేసే హోస్ట్‌గా పేర్కొనవచ్చు.

ఆపివేసిన ప్రాసెసర్‌లతో ప్రాసెస్ సమూహం జోడించబడింది, వాటిని ప్రారంభించాలి

#> nifi pg-start -pgid 7f522a13-016e-1000-e504-d5b15587f2f3 -u http://nifi:8080

బాగుంది, ప్రాసెసర్‌లు ప్రారంభమయ్యాయి. అయితే, టాస్క్ నిబంధనల ప్రకారం, ఇతర సందర్భాల్లో డేటాను పంపడానికి మాకు NiFi ఉదంతాలు అవసరం. మీరు సర్వర్‌కు డేటాను బదిలీ చేయడానికి పుష్ పద్ధతిని ఎంచుకున్నారని అనుకుందాం. డేటా బదిలీని నిర్వహించడానికి, మీరు ఇప్పటికే మా ఫ్లోలో చేర్చబడిన జోడించిన రిమోట్ ప్రాసెస్ గ్రూప్ (RPG)లో డేటా బదిలీని ప్రారంభించాలి.

Apache NiFiలో ఫ్లో డెలివరీ ఆటోమేషన్

CLI మరియు ఇతర మూలాధారాల్లోని డాక్యుమెంటేషన్‌లో, నేను డేటా బదిలీని ప్రారంభించే మార్గాన్ని కనుగొనలేదు. దీన్ని ఎలా చేయాలో మీకు తెలిస్తే, దయచేసి వ్యాఖ్యలలో వ్రాయండి.

మాకు బాష్ ఉంది మరియు మేము చివరికి వెళ్ళడానికి సిద్ధంగా ఉన్నాము కాబట్టి, మేము ఒక మార్గాన్ని కనుగొంటాము! ఈ సమస్యను పరిష్కరించడానికి మీరు NiFi APIని ఉపయోగించవచ్చు. కింది పద్ధతిని ఉపయోగిస్తాము, పై ఉదాహరణల నుండి IDని తీసుకోండి (మా విషయంలో ఇది 7f522a13-016e-1000-e504-d5b15587f2f3). NiFi API పద్ధతుల వివరణ ఇక్కడ.

Apache NiFiలో ఫ్లో డెలివరీ ఆటోమేషన్
శరీరంలో మీరు ఇలా JSON పాస్ చేయాలి:

{
    "revision": {
	    "clientId": "value",
	    "version": 0,
	    "lastModifier": "value"
	},
    "state": "value",
    "disconnectedNodeAcknowledged": true
}

ఇది పని చేయడానికి పూరించవలసిన పారామితులు:
రాష్ట్ర - డేటా బదిలీ స్థితి. అందుబాటులో ఉంది: డేటా బదిలీని ప్రారంభించడానికి ట్రాన్స్‌మిటింగ్, నిలిపివేయడానికి ఆపివేయబడింది
వెర్షన్ - ప్రాసెసర్ వెర్షన్

సృష్టించినప్పుడు సంస్కరణ డిఫాల్ట్‌గా 0 అవుతుంది, అయితే ఈ పారామితులను పద్ధతిని ఉపయోగించి పొందవచ్చు

Apache NiFiలో ఫ్లో డెలివరీ ఆటోమేషన్

బాష్ స్క్రిప్ట్‌ల అభిమానులకు, ఈ పద్ధతి తగినదిగా అనిపించవచ్చు, కానీ ఇది నాకు కొంచెం కష్టంగా ఉంది - బాష్ స్క్రిప్ట్‌లు నాకు ఇష్టమైనవి కావు. తదుపరి పద్ధతి నా అభిప్రాయం ప్రకారం మరింత ఆసక్తికరంగా మరియు సౌకర్యవంతంగా ఉంటుంది.

NiPyAPI

NiPyAPI అనేది NiFi ఉదంతాలతో పరస్పర చర్య చేయడానికి పైథాన్ లైబ్రరీ. డాక్యుమెంటేషన్ పేజీ లైబ్రరీతో పని చేయడానికి అవసరమైన సమాచారాన్ని కలిగి ఉంటుంది. త్వరిత ప్రారంభం లో వివరించబడింది చిత్తుప్రతి గితుబ్‌లో.

కాన్ఫిగరేషన్‌ను రోల్ అవుట్ చేయడానికి మా స్క్రిప్ట్ పైథాన్‌లోని ప్రోగ్రామ్. కోడింగ్‌కి వెళ్దాం.
తదుపరి పని కోసం మేము కాన్ఫిగరేషన్లను సెటప్ చేసాము. మాకు ఈ క్రింది పారామితులు అవసరం:

nipyapi.config.nifi_config.host = 'http://nifi:8080/nifi-api' #путь до nifi-api инстанса, на котором разворачиваем process group
nipyapi.config.registry_config.host = 'http://nifi-registry:18080/nifi-registry-api' #путь до nifi-registry-api registry
nipyapi.config.registry_name = 'MyBeutifulRegistry' #название registry, как будет называться в инстансе nifi
nipyapi.config.bucket_name = 'BucketName' #название bucket, из которого подтягиваем flow
nipyapi.config.flow_name = 'FlowName' #название flow, которое подтягиваем

తరువాత నేను వివరించిన ఈ లైబ్రరీ యొక్క పద్ధతుల పేర్లను చొప్పిస్తాను ఇక్కడ.

ఉపయోగించి nifi ఉదాహరణకి రిజిస్ట్రీని కనెక్ట్ చేయండి

nipyapi.versioning.create_registry_client

ఈ దశలో, రిజిస్ట్రీ ఇప్పటికే ఉదాహరణకి జోడించబడిందని మీరు తనిఖీని కూడా జోడించవచ్చు; దీని కోసం మీరు పద్ధతిని ఉపయోగించవచ్చు

nipyapi.versioning.list_registry_clients

బుట్టలో ప్రవాహం కోసం మరింత శోధన కోసం మేము బకెట్‌ను కనుగొంటాము

nipyapi.versioning.get_registry_bucket

దొరికిన బకెట్ ఉపయోగించి, మేము ప్రవాహం కోసం చూస్తాము

nipyapi.versioning.get_flow_in_bucket

తరువాత, ఈ ప్రక్రియ సమూహం ఇప్పటికే జోడించబడిందో లేదో అర్థం చేసుకోవడం ముఖ్యం. ప్రాసెస్ సమూహం కోఆర్డినేట్‌ల ప్రకారం ఉంచబడుతుంది మరియు ఒకదానిపై రెండవ భాగం సూపర్మోస్ చేయబడినప్పుడు పరిస్థితి తలెత్తవచ్చు. నేను తనిఖీ చేసాను, ఇది జరగవచ్చు :) అన్ని జోడించిన ప్రక్రియ సమూహాలను పొందడానికి మేము పద్ధతిని ఉపయోగిస్తాము

nipyapi.canvas.list_all_process_groups

మేము మరింత శోధించవచ్చు, ఉదాహరణకు, పేరు ద్వారా.

నేను టెంప్లేట్‌ను నవీకరించే ప్రక్రియను వివరించను, టెంప్లేట్ యొక్క కొత్త వెర్షన్‌లో ప్రాసెసర్‌లు జోడించబడితే, క్యూలలో సందేశాల ఉనికితో సమస్యలు ఉండవని మాత్రమే నేను చెబుతాను. కానీ ప్రాసెసర్లు తీసివేయబడితే, సమస్యలు తలెత్తవచ్చు (ప్రాసెసర్ ముందు సందేశ క్యూ పేరుకుపోయినట్లయితే దాన్ని తీసివేయడానికి nifi మిమ్మల్ని అనుమతించదు). నేను ఈ సమస్యను ఎలా పరిష్కరించానో మీకు ఆసక్తి ఉంటే, దయచేసి నాకు వ్రాయండి మరియు మేము ఈ సమస్యను చర్చిస్తాము. వ్యాసం చివరిలో పరిచయాలు. ప్రక్రియ సమూహాన్ని జోడించే దశకు వెళ్దాం.

స్క్రిప్ట్‌ను డీబగ్ చేస్తున్నప్పుడు, తాజా వెర్షన్ ప్రవాహం ఎల్లప్పుడూ పైకి లేవబడదని నేను గుర్తించాను, కాబట్టి ముందుగా ఈ సంస్కరణను తనిఖీ చేయమని నేను సిఫార్సు చేస్తున్నాను:

nipyapi.versioning.get_latest_flow_ver

ప్రక్రియ సమూహాన్ని అమలు చేయండి:

nipyapi.versioning.deploy_flow_version

మేము ప్రాసెసర్లను ప్రారంభిస్తాము:

nipyapi.canvas.schedule_process_group

CLI గురించిన బ్లాక్‌లో రిమోట్ ప్రాసెస్ సమూహంలో డేటా బదిలీ స్వయంచాలకంగా ప్రారంభించబడలేదని వ్రాయబడింది? స్క్రిప్ట్‌ని అమలు చేస్తున్నప్పుడు, నేను కూడా ఈ సమస్యను ఎదుర్కొన్నాను. ఆ సమయంలో, నేను APIని ఉపయోగించి డేటా బదిలీని ప్రారంభించలేకపోయాను మరియు నేను NiPyAPI లైబ్రరీ డెవలపర్‌కి వ్రాసి సలహా/సహాయం కోసం అడగాలని నిర్ణయించుకున్నాను. డెవలపర్ నాకు ప్రతిస్పందించారు, మేము సమస్యను చర్చించాము మరియు అతను "ఏదో తనిఖీ" చేయడానికి సమయం అవసరమని వ్రాశాడు. ఆపై, కొన్ని రోజుల తరువాత, నా ప్రయోగ సమస్యను పరిష్కరించే ఒక ఫంక్షన్ పైథాన్‌లో వ్రాయబడిన ఒక లేఖ వస్తుంది !!! ఆ సమయంలో, NiPyAPI వెర్షన్ 0.13.3 మరియు, వాస్తవానికి, అలాంటిదేమీ లేదు. కానీ ఇటీవల విడుదలైన సంస్కరణ 0.14.0లో, ఈ ఫంక్షన్ ఇప్పటికే లైబ్రరీలో చేర్చబడింది. కలుసుకోవడం,

nipyapi.canvas.set_remote_process_group_transmission

కాబట్టి, NiPyAPI లైబ్రరీని ఉపయోగించి, మేము రిజిస్ట్రీని కనెక్ట్ చేసాము, ఫ్లో అవుట్ చేసాము మరియు ప్రాసెసర్లు మరియు డేటా బదిలీని కూడా ప్రారంభించాము. అప్పుడు మీరు కోడ్‌ను దువ్వెన చేయవచ్చు, అన్ని రకాల తనిఖీలను జోడించవచ్చు, లాగింగ్ చేయవచ్చు మరియు అంతే. కానీ అది పూర్తిగా భిన్నమైన కథ.

నేను పరిగణించిన ఆటోమేషన్ ఎంపికలలో, చివరిది నాకు అత్యంత సమర్థవంతమైనదిగా అనిపించింది. ముందుగా, ఇది ఇప్పటికీ పైథాన్ కోడ్, దీనిలో మీరు సహాయక ప్రోగ్రామ్ కోడ్‌ను పొందుపరచవచ్చు మరియు ప్రోగ్రామింగ్ భాష యొక్క అన్ని ప్రయోజనాలను పొందవచ్చు. రెండవది, NiPyAPI ప్రాజెక్ట్ చురుకుగా అభివృద్ధి చెందుతోంది మరియు సమస్యల విషయంలో మీరు డెవలపర్‌కు వ్రాయవచ్చు. మూడవదిగా, సంక్లిష్ట సమస్యలను పరిష్కరించడంలో NiFiతో పరస్పర చర్య చేయడానికి NiPyAPI ఇప్పటికీ మరింత సౌకర్యవంతమైన సాధనం. ఉదాహరణకు, మెసేజ్ క్యూలు ఇప్పుడు ఫ్లోలో ఖాళీగా ఉన్నాయా మరియు ప్రాసెస్ గ్రూప్‌ని అప్‌డేట్ చేయవచ్చో లేదో నిర్ణయించడంలో.

అంతే. నేను NiFiలో ఫ్లో డెలివరీని ఆటోమేట్ చేయడానికి 3 విధానాలను వివరించాను, డెవలపర్ ఎదుర్కొనే ఆపదలు మరియు డెలివరీని ఆటోమేట్ చేయడానికి వర్కింగ్ కోడ్‌ని అందించాను. మీకు ఈ అంశం పట్ల నాలాగా ఆసక్తి ఉంటే - వ్రాయడానికి!

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి