محمد جواد شکاریان
محمد جواد شکاریان
خواندن ۹ دقیقه·۱ ماه پیش

آپاچی نای فای (apache nifi) قسمت 2

قسمت قبلی:

در قسمت قبلی کلیات نای فای و بررسی کردیم و در آخر یک مثال زدم که تو اون اطلاعات یک تیبل رو به تیبل دیگه انتقال دادم


توضیحات کلی:

تو این قسمت می خوام processor های بیشتری رو بررسی کنیم و کاربرد اونها رو به شما توضیح بدم.

نکته ی بسیار مهم درباره ی نای فای اینه که یادگیری نای فای فقط به یادگیری کارکرد processor ها بستگی داره و میشه گفت اگه کار با تعداد خاصی از پراسسور ها رو بلد باشیم، می تونیم با نای فای پروژه های بزرگی انجام بدیم.

نای فای تعداد زیادی پراسسور داره (بیشتر از 300 پراسسور) که نیازی نیست همه ی اونها رو بلد باشیم و بسته به نیازمون سراغ پراسسوری میریم که باهاش میشه اون نیاز خاص رو برطرف کرد اما یادگیری بعضی از این پراسسور ها بسیار مهمه و به عنوان یک نای فای کار یا به عنوان کسی که می خواد microservice رو سطح بالا کار کنه باید این پراسسور ها رو حتما بلد باشیم، پس وسواس به خرج ندین که باید همه ی پراسسور ها رو یاد بگیرم چون همچین چیزی ممکن نیست! چون بعضی از این پراسسور ها برای ++c کارها هستش و بهضی از اونها (مثل ExecuteScript ) فقط مخصوص جاوا کارها و پایتون کارها هستش پس نمیشه و یا حتی نیازی نیست همه پراسسور ها رو یاد بگیریم. من تو این مقاله و مقاله های بعدی تلاش می کنم تموم پراسسور های مهم و به شما آموزش بدم.

مراحل نصب آپاچی نای فای و لاگین در نای فای:
1. قبل از هر چیزی باید جاوا رو رو کامپیوتر خودتون نصب کنید

2. روی این لینک کلیک کنید و apache nifi رو دانلود کنید

3. فایل و از حالت فشرده خارج کنید

4. بعد از خارج کردن فایل از حالت فشرده، دایرکتوری نای فای رو باز کنید و در همون دایرکتوری ترمینال رو باز کنید

  • برای ویندوز shift رو نگه دارید و راست کلیک کنید، بعدش روی open terminal here کلیک کنید (البته دقیقا یادم نیست همینه یا نه چون خیلی وقته دارم با لینوکس کار می کنم!!!)
  • برای لینوکس تو همون دایرکتوری راست کلیک کنید و روی Open Terminal کلیک کنید

5. این دستور و توی ترمینال اجرا کنید (بجای username یوزرنیمی که می خواین و قرار بدین و بجای password هم یک پسورد انتخاب کنید و بجای password قرار بدین)

bin/nifi set-single-user-credentials &quotusername&quot &quotpassword&quot

6. مرورگرتونو باز کنید و این یو ار ال و باز کنید:

https://localhost:8443/nifi

  • دقت کنید که قبل از localhost باید https قرار بدین نه http

7. تو این صفحه یوزرنیم و پسوردی که توی دستور ترمینال قرار داده بودین رو اینجا قرار بدین و لاگین کنید


معرفی پراسسور ها:

نکته ی مهم: من برای هر پراسسور مهم ترین پراپرتی ها و پراپرتی هایی که حتما باید پر بشن و توضیح میدم و با پر کردن این اینپوت ها میشه پراسسور و اجرا کرد. اگه میخواین تموم اینپوت ها رو مطالعه کنین (که البته من توصیه نمیکنم چون وقتتون تلف میشه و با این وقت میشه کار های بهتری انجام داد) میتونین به داکیومنت نای فای مراجعه کنید یا اگه انگلیسیتون خوبه کنار هر اینپوت یک (؟) قرار داره که اگه روی اون هاور کنید به صورت خلاصه (والبته خیلی خیلی مفید) اون اینپوت رو معرفی میکنه

1. پراسسور GetFile: با این پراسسور میشه یک فایل خاص رو باز کرد و نوشته های اون فایل و به عنوان فلو (flow یا همون جریان داده) به پراسسور های بعدی پاس داد.

پراپرتی ها:

پراپرتی Input Directory: تو این قسمت باید مسیر فایلی که می خوایم بخونیم و قرار بدیم. علاوه بر مسیر فایل میشه دایرکتوری هم قرار داد. اگر دایرکتوری قرار بدیم تموم فایل های اون دایرکتوری ها خونده میشه

پراپرتی File Filter: اگر توی اون مسیری که در قسمت بالا توضیح دادم چندین فایل قرار داشته باشه، با الگویی که در این قسمت تعریف میکنیم میشه بعضی از فایل های خاص رو انتخاب کرد مثلا اگه ( * ) قرار بدیم تموم فایل ها خونده میشه

پراپرتی Path Filter: اگه بخوایم بجای مسیر فایل، مسیر دایرکتوری قرار تعریف کنیم در این صورت با الگویی که در این قسمت تعریف می کنیم، میشه دایرکتوری ها رو فیلتر کرد و فقط فایل های بعضی از دایرکتوری ها خونده میشه

2. پراسسور PutFile: با این پراسسور میتونیم flow رو به صورت فایل ذخیره کنیم. مثلا می تونیم با GetFile یک فایل رو بخونیم و با PutFile این فایل رو تو یک مسیر دیگه قرار بدیم

پراپرتی ها:
پراپرتی Directory: تو این قسمت مسیری که می خوایم flow در اونجا ذخیره بشه قرار میگیره

3. پراسسور ExecuteScript: با این پراسسور میشه یک کد خاص رو اجرا کرد

پراپرتی ها:

پراپرتی Script Engine: تو این قسمت باید تعیین کنیم کد ما به چه زبونی هست. این زبون ها می تونن پایتون، groovy یا ... باشن

پراپرتی Script File: اگه کدهای ما در قالب یک فایل نوشته شده باشن، در این قسمت مسیر اون فایل قرار میگیره

پراپرتی Script Body: اگه بخوایم بجای فایل مستقیما کدهامونو قرار بدیم میشه از این قسمت استفاده کرد

پراپرتی Module Directory: اگر توی کدهامون از یکسری ماژول خاص استفاده کرده باشیم باید مسیر اون ماژول ها رو در این قسمت قرار بدیم

4. پراسسور ExecuteGroovyScrip: با این پراسسور میشه کدهای groovy رو اجرا کرد. این پراسسور هم مثل پراسسور بالا چند تا قسمت داره که مهم ترین اونها Script Body و Script File هستن که کاربردشون مثل Script Body و Script File تو پراسسور قبلیه

5. پراسسور ExecuteSql: با این پراسسور میشه یک کد sql رو روی دیتابیس sql (مثل mysql یا postgresql) اجرا کرد.

پراپرتی ها:

پراپرتی Database Connection Pooling Service: در این قسمت باید سرویسی که برای ارتباط با دیتابیس ساختیم قرار میگیره

پراپرتی SQL select query: در این قسمت کد sql قرار میگیره مثلا select * from "user" where id = 2

6. پراسسور GenerateFlowFile: با این پراسسور میشه یک فلو خاص رو ایجاد کرد مثلا میشه یک جیسون ایجاد کرد و اونو به پراسسور های بعدی پاس داد یا حتی میشه کدهای باینری مربوط به یک عکس رو به صورت عکس ذخیره کرد

پراپرتی ها:

پراپرتی Custom Text: در این قسمت flow یی که می خوایم به پراسسور های بعدی پاس بدیم و قرار میگیره مثلا یک جیسون یا یک تکست معمولی قرار میدیم

پراپرتی Mime Type: در این قسمت mime type مربوط به flow رو قرار میگیره مثلا برای جیسون application/json یا برای تکست text/plain قرار میگیره

نکته ی بسیار مهم: اگه بخواین یک پراپرتی تو قسمت attribute نای فای تعریف کنید در تب properties، در قسمت بالا سمت راست روی + کلیک کنید، بعدش یک یک popup ظاهر میشه که باید کلید (مثلا username) و در این قسمت قرار بدین، بعدش روی OK کلیک کنید حالا میتونین در قسمت username مقدار اونو قرار بدین (مثلا javad)


7. پراسسور InvokeHTTP: با این پراسسور میشه برای یک یو ار ال خاص یک api فرستاد و ریسپانس و دریافت کرد و به به پراسسور های بعدی پاس داد

پراپرتی ها:

پراپرتی HTTP Method: در این قسمت نوع متد api را قرار میگیره این موارد می تونن get, post, put و ... باشن

پراپرتی HTTP URL: در این قسمت url ی که می خوایم به اون api بفرستیم قرار میگیره

نکته ی بسیار مهم:
سوال مهمی که اینجا به وجود میاد اینه که اگه بخوایم header بفرستیم چی؟ مثلا اگه بخوایم توی هدر توکن قرار بدیم باید چکار کنیم؟ برای این کار در تب properties، در قسمت بالا سمت راست روی + کلیک کنید، بعدش یک یک popup ظاهر میشه که باید کلید هدر و قرار بدیم مثلا مینویسیم Authorization، بعدش روی OK کلیک کنید حالا میتونین در قسمت Authorization توکن خودتونو قرار بدین (مثلا Bearer token)

8. پراسسور PutSql: با این پراسسور میشه یک فلو خاص رو توی دیتابیس ذخیره کرد

پراپرتی ها:

پراپرتی JDBC Connection Pool: تو این قسمت سرویس مربوط به کانکشن دیتابیس قرار میگیره

پراپرتی SQL Statement: تو این قسمت کوئری خاصی که می خوایم تو دیتابیس اجرا بشه قرار میگیره

9. پراسسور QueryDatabaseTable: با این پراسسور میشه یک سری اطلاعات خاص رو از دیتابیس کوئری گرفت و نتیجه رو به پراسسور های بعدی پاس داد

پراپرتی ها:

پراپرتی Database Connection Pooling Service: تو این قسمت سرویس مربوط به کانکشن دیتابیس قرار میگیره

پراپرتی Table Name: تو این قسمت اسم تیبلی که می خوایم اطلاعاتش و کوئری بگیریم و قرار میدیم

پراپرتی Columns to Return: تو این قسمت ستون هایی که میخوایم تو کوئری وجود داشته باشه رو قرار میدیم مثل id,username,email و ...

پراپرتی Additional WHERE clause: اگر یک شرط خاص داشته باشیم در این قسمت مینویسیم

پراپرتی Custom Query: در این قسمت sql ای که می خوایم توی دیتابیس اجرا بشه قرار میگیره

پراپرتی Maximum-value Columns: این پراپرتی بسیار بسیار مهمه! در این قسمت اسم ستونی را مینویسیم که اطلاعات آن صعودی است مثل updated_at یا created_at یا اگر id به صورت int و صعودی تعریف شود id را قرار میدیم. این کار باعث میشه در هر بار کوئری گرفتن تنها دیتاهایی وجود داشته باشه که در اونها مقدار این ستونی که در این قسمت تعیین کرده ایم بیشتر از بیشترین مقداری باشد که در کوئری قبلی وجود داشته است!! میدونم یکم پیچیده شد!!!

بزار با یک مثال توضیح بدم: فرض کنید توی این قسمت id قرار دادم و می خوام از تیبل user (که ستون ها اون id, username و email هست) کوئری بگیرم. فرض کنید توی این تیبل 20 تا دیتا دارم و مقدار id توی این دیتاها از 1 تا 20 هست. زمانی که من این پراسسور و روشن می کنم این پراسسور با دیتابیس heart beat داره یعنی بعد از یک بازه ی زمانی خاص دوباره از دیتابیس کوئری میگیره. مثلا هر یک ثانیه یک بار از دیتابیس کوئری میگیره (اصلاحا میگن heart beat). بار اول که این پراسسور از دیتابیس کوئری میگیره هر بیست و دیتا برمیداره میاره و بیشرین id رو (که در اینجا 20 هست) ذخیره میکنه. بعد از مدتی دوباره میره از دیتابیس کوئری میگیره ولی فقط دیتاهایی رو میاره که مقدار id اونها بیشتر از 20 باشه یعنی اگر دیتای جدیدی وارد دیتابیس بشه فقط هون دیتاها (که طبیعتا id اونها بیشتر از 20 هست) تو نتیجه ی برگشتی وجود داره و دوباره بیشترین id و ذخیره میکنه. فرق مهم این پراسسو با پراسسوری مثل ExecuteSql اینه که ExecuteSql هر بار تموم دیتاها رو از کوئری میگیره ولی QueryDatabaseTable تو هر بار کوئری فقط دیتاهای جدید رو کوئری میگیره

10. پراسسور ConvertAvroToJson: این پراسسور فرمت Avro رو به json تبدیل میکنه. این پراسسور پراپرتی خاصی نداره و نیازی نیست پراپرتی خاصی براش ست بشه

خلاصه:

تو این قسمت ده تا از مهم ترین پراسسور های نای فای و بررسی کردیم و فقط چندتا پراسسور دیگه مونده که باید یاد بگیریم. در قسمت یاد گرفتیم که چطوری می تونیم با دیتابیس ارتباط برقرار کنیم و یک کوئری خاص رو توی دیتابیس اجرا کنیم. در قسمت بعدی چند تا دیگه از پراسسور های مهم و به صورت کامل بررسی می کنیم و به شما توضیح میدم که چطوری میشه از تموم پراسسور های نای فای استفاده کرد
تا قسمت بعدی خدا نگهدار!!!

نای فایدیتافلو
سلام من جوادم، پنج ساله دارم کدنویسی می کنم و تخصصم NodeJs و ReactJs هست. با ابزار های زیادی هم کار کردم که تلاش می کنم اینجا اونها رو به شما معرفی کنم!
شاید از این پست‌ها خوشتان بیاید