دسترسی کامل به استفاده از Flume و 60K+ عناوین دیگر ، با آزمایش رایگان 10 روزه O'Reilly.
همچنین رویدادهای آنلاین زنده ، محتوای تعاملی ، مواد آماده سازی صدور گواهینامه و موارد دیگر وجود دارد.
فصل 4. کانال ها
کانال ها بافر هستند که بین منابع و سینک ها قرار می گیرند. به همین ترتیب ، کانال ها به منابع و سینک ها اجازه می دهند تا با نرخ های مختلف کار کنند. کانال ها برای ضمانت های Flume از دست دادن داده ها مهم هستند (البته ، در صورت تنظیم صحیح). منابع داده را به یک یا چند کانال می نویسند که توسط یک یا چند سینک خوانده می شوند. یک سینک فقط از یک کانال می تواند بخواند ، در حالی که چندین سینک می توانند برای عملکرد بهتر از همان کانال بخوانند. کانال ها دارای معنایی معامله ای هستند که به Flume اجازه می دهد تا در مورد داده های نوشته شده در یک کانال ، ضمانت های صریح ارائه دهد.
داشتن کانال به عنوان یک بافر بین منابع و سینک ها مزایای مختلفی دارد. این کانال به منابعی که در همان کانال کار می کنند اجازه می دهد تا مدل های نخ مخصوص خود را داشته باشند بدون اینکه نگران خواندن سینک ها از کانال باشند و بالعکس. داشتن یک بافر بین منابع و سینک ها همچنین به آنها امکان می دهد با نرخ های مختلف کار کنند ، زیرا نوشتن ها در دم بافر اتفاق می افتد و خوانده شده از سر اتفاق می افتد. این امر همچنین به عوامل Flume اجازه می دهد تا بارهای "ساعت اوج" را از منابع کنترل کنند ، حتی اگر سینک ها نتوانند بلافاصله کانال ها را تخلیه کنند.
کانال ها به چندین منبع و سینک اجازه می دهند تا روی آنها کار کنند. کانال ها از نظر ماهیت معامله هستند. هر یک از آنها به یک کانال می نویسند و هر یک از آنها از یک کانال خوانده می شوند در چارچوب معامله اتفاق می افتد. فقط یک بار معامله نوشتن مرتکب می شود ، وقایع حاصل از آن معامله توسط هر سینک قابل خواندن است. همچنین ، اگر یک سینک با موفقیت یک رویداد را انجام داده باشد ، این رویداد برای سایر سینک ها در دسترس نیست تا زمانی که و مگر اینکه سینک معامله را به عقب برگرداند.
سنبله های بار موقت در اکثر برنامه های زمان واقعی رایج است و Flume برای رسیدگی به این موارد طراحی شده است. این رویدادها در کانال بافر می شوند تا زمانی که سینک ها آنها را از بین ببرند ، به عامل اجازه می دهد تا تغییرات بار ورودی را تحمل کند. چه مقدار داده های اضافی هر عامل می تواند به ظرفیت کانال بستگی داشته باشد. ظرفیت کانال باید بر اساس حداکثر بار اوج ترکیبی مورد انتظار کلیه منابع که به کانال می نویسند و میزان ترکیبی از تخلیه همه سینک ها اختصاص یابد. این طرح همچنین به منابع و سینک ها اجازه می دهد تا منطق آزمایش مجدد در مورد شکست داشته باشند. در صورت عدم موفقیت ، منابع می توانند دوباره نوشتن را به کانال بازگردانند و سینک ها می توانند دوباره خوانده شوند.
گردش کار معامله
همانطور که در "معاملات در کانال های Flume" بحث شد ، کانال های Flume معامله ای هستند. معاملات اساساً دسته ای از وقایع است که به صورت اتمی در یک کانال نوشته شده است. یا همه یا هیچ یک از وقایع موجود در گروه در کانال وجود ندارد. معاملات برای ارائه ضمانت های دقیقاً در هنگام نوشتن یک رویداد یا حذف از کانال مهم است. به عنوان مثال ، یک سینک می تواند یک رویداد را از کانال بگیرد و سعی کند آن را به HDF ها بنویسد و شکست بخورد. در این حالت ، این رویداد باید به کانال برگردد و برای این سینک یا یکی دیگر در دسترس باشد تا به HDF ها بپردازد و بنویسد.
اطمینان از اینكه باعث می شود حوادث فقط در تعهد معامله حذف شوند ، تضمین می كنند كه رویدادها از بین نرفته اند حتی اگر نوشتن یك بار از بین نرود ، در این مرحله سینك فقط می تواند این معامله را پس بگیرد. معاملات می توانند یک رویداد یا بسیاری از رویدادها داشته باشند ، اما به دلایل عملکرد همیشه توصیه می شود تعداد معقول و منطقی از رویدادها در هر معامله داشته باشید.
این مهم است که دسته ای از کانال ها ، به ویژه کانال های بادوام ، به کانال ها می نویسد. کانال های بادوام حتی در صورت راه اندازی مجدد عامل یا دستگاه ، هیچ از دست دادن داده ها را تضمین نمی کنند ، بنابراین آنها مجبور هستند در طی یک تعهد معامله ، همه داده های رویداد بافر را به دیسک بپردازند و همگام سازی کنند ، که یک بار در هر دسته اتفاق می افتد. همگام سازی با دیسک یک عمل گران و وقت گیر است و فقط باید در صورت نوشتن یک قطعه از داده های بزرگ و معقول به حافظه نهان انجام شود. همچنین ، زمان لازم برای همگام سازی با دیسک شامل هزینه غیرمستقیم برقراری تماس سیستم قبل از همگام سازی واقعی است که با گذشت زمان اضافه می شود. هر دسته از این دسته نیز توسط یک معامله نشان داده می شود و معاملات را برای عملکرد و همچنین قابلیت اطمینان مهم می کند.
هر کانال می تواند چندین منبع و سینک داشته باشد ، به ترتیب نوشتن و خواندن از کانال. منابع و سینک ها با توجه به معاملات به روش های کمی متفاوت عمل می کنند. منابع به طور مستقیم با معاملات کار نمی کنند. در عوض ، پردازنده کانال یک منبع معاملات را از طرف خود انجام می دهد. نحوه کار پردازنده کانال با معاملات تقریباً با روشی که سینک ها انجام می دهند یکسان است (به جز اینکه غرق شدن از کانال ها می گیرد ، در حالی که پردازنده های کانال داده ها را در کانال ها قرار می دهند).
سینک با فراخوانی روش GetTransaction کانال ، که نمونه ای از معامله را برمی گرداند ، معامله را با کانال آغاز می کند. سپس تماس های سینک بر روی شیء معامله آغاز می شود ، که به کانال اجازه می دهد هر حالت داخلی مورد نیاز برای معامله را تنظیم کند. معمولاً این شامل ایجاد صف برای برگزاری موقت رویدادها تا زمان تکمیل معامله است.
پس از شروع معامله ، تماس های سینک (در مورد پردازنده های کانال) در کانال انجام می شود ، تا زمانی که سینک آماده انجام معامله شود. هنگامی که یک سینک یک رویداد را انجام می دهد ، برای همان سینک یک سینک دیگر در دسترس نخواهد بود مگر اینکه معامله به عقب برگردد.
سینک ها (و پردازنده های کانال) معمولاً به دلایل عملکرد چندین رویداد را در یک معامله قرار می دهند. پس از اتمام سینک ، تماس های سینک در معامله انجام می شود. هنگامی که یک معامله سمت سینک (معامله ای با فقط Take S) انجام شود ، وقایع در آن معامله به صورت حذف شده توسط کانال مشخص می شوند و دوباره در دسترس هیچ سینک قرار نمی گیرند. هنگامی که یک معامله سمت منبع (متعلق به پردازنده کانال) انجام شود ، رویدادها با خیال راحت در کانال قرار می گیرند. این بدان معناست که این رویدادها فقط در شرایطی که یک سینک حوادث را انجام می دهد و مرتکب می شود ، از کانال حذف می شوند.
توجه داشته باشید که اگر سینک یک رویداد را انجام داده باشد ، آن رویداد دیگر در دسترس هیچ سینک نیست ، مگر اینکه و تا زمانی که این سینک معامله را به عقب برگرداند ، باعث می شود که وقایع موجود در آن دوباره در دسترس باشد. این به طور خاص برای جلوگیری از تکثیر در هنگام کار چندین سینک در همان کانال طراحی شده است. هر رویدادی در کانال می تواند دقیقاً یک بار انجام شود و مرتکب شود ، پس از آن این رویداد از کانال حذف می شود.
بسته به کانال خاص مورد استفاده ، حتی اگر دستگاه یا JVM دوباره راه اندازی شود ، ممکن است در کانال موجود باشد. همچنین به احتمال زیاد سینک ممکن است نتوانسته است تمام وقایع را به هر کجا که قرار بود بنویسد و از این رو مجبور به امتحان مجدد باشد. در این حالت ، سینک کل معامله را با استفاده از روش بازگشت در معامله باز می گرداند. هنگامی که یک معامله در سمت سینک چرخانده شد ، کانال رویدادها را به کانال بازیابی می کند و باعث می شود که آنها را برای سینک ها در دسترس قرار دهند. در مورد بازپرداخت معامله سمت منبع ، به نظر می رسد که معامله هرگز اتفاق نیفتاده است و رویدادهای نوشته شده در طی آن معامله در کانال نوشته نمی شوند. Rollbacks به طور بالقوه می تواند باعث ایجاد نسخه های تکراری شود که در اثر زمان بندی یا سایر خرابی ها ایجاد شود که ممکن است وقایع به کانال هاپ بعدی انجام شود.
پس از انجام معامله یا بازگشت به عقب ، با فراخوانی روش نزدیک برای پاک کردن منابع مورد استفاده در معامله ، بسته می شود. شکل 4-1 گردش کار برای یک معامله را نشان می دهد.

شکل 4-1. گردش کار معامله
یک معامله واحد نمی تواند رویدادها را انجام دهد و انجام دهد. این تضمین می کند که منابع فقط می توانند وقایع را در کانال قرار دهند و غرق شدن فقط می تواند رویدادهایی را از کانال بگیرد.
کانال هایی که با Flume همراه بودند
Flume با دو کانال همراه است: کانال حافظه و کانال پرونده. هر دو کانال بر روی همان اصول اساسی که در اینجا توضیح داده شده کار می کنند. هر دو کانال کاملاً دارای امنیت هستند و می توانند با چندین منبع و سینک کار کنند. همانطور که از نام ها دلالت دارد ، کانال حافظه در حالی که کانال فایل رویدادها را روی پرونده های دیسک می نویسد ، رویدادهای خود را در حافظه اصلی انجام می دهد. در این بخش ، ما در مورد هر دو کانال و عوامل مختلفی که باید هنگام انتخاب بین این دو مورد بررسی قرار دهیم ، بحث خواهیم کرد.
کانال حافظه
کانال حافظه یک کانال حافظه است که رویدادهایی را که روی آن نوشته شده است ، ذخیره می کند. برای همه اهداف عملی ، کانال حافظه یک صف در حافظه است-این منابع به دم آن می نویسند و غرق می شوند و سر خود را می خوانند. کانال حافظه از توان بسیار بالایی پشتیبانی می کند ، زیرا تمام داده ها را در حافظه نگه می دارد. همانطور که قبلاً ذکر شد ، این کانال از امنیت موضوعی است و می تواند از چندین منبع به آنها بپردازد و همزمان از چندین سینک بخواند. از کانال حافظه باید استفاده شود که از بین رفتن داده ها نگران کننده نباشد ، زیرا کانال داده ها را به دیسک ادامه نمی دهد. اگر از دست دادن داده ها نگرانی داشته باشد ، نباید از کانال حافظه استفاده شود ، زیرا مرگ فرآیند یا خرابی دستگاه یا راه اندازی مجدد می تواند باعث از بین رفتن داده ها شود.
کانال حافظه از مدل معامله ای Flume پشتیبانی می کند و صف های جداگانه ای را برای هر معامله در حال انجام است. پس از انجام معامله سمت منبع ، رویدادهای موجود در صف برای آن معامله به صف اصلی کانال به صورت اتمی منتقل می شوند. اگر تعهد با موفقیت تکمیل شود ، وقایع در معامله برای انجام سینک ها در دسترس خواهد بود. در صورت عدم موفقیت ، معامله باید توسط منبع بازگردد و وقایع دور ریخته می شوند. برای معاملات سمت سینک ، هر بار که سینک انجام می شود ، این رویدادها به صف معامله منتقل می شوند. این تضمین می کند که دقیقاً یک سینک یک رویداد را "می کند". هنگامی که سینک مرتکب معامله می شود ، صف معامله دور ریخته می شود و وقایع در نظر گرفته می شوند تا زباله جمع شوند. بنابراین ، اجرای سینک باید مراقب انجام معامله باشد اگر و فقط اگر رویدادها با موفقیت در مقصد نوشته شده باشند.
در صورت عدم موفقیت معامله ، این رویدادها به ترتیب معکوس در رأس کانال مجدداً مورد استفاده قرار می گیرند ، بنابراین وقایع در دسترس هستند که دوباره به همان ترتیب درج شده اند که در ابتدا درج شده اند. به این ترتیب ، اگرچه Flume سفارش سفارش را تضمین نمی کند ، کانال حافظه باعث می شود تا رویدادها را برای سفارشاتی که نوشته شده است در دسترس قرار دهد. با این حال ، هنگامی که معاملات خاص به عقب برگردانده می شود ، ممکن است که رویدادهایی که پس از وقایع در آن معاملات نوشته شده اند به مقصد خود ارسال شوند (از آنجامعاملات نورد برگشت).
کانال حافظه می تواند بدون تلاش زیادی پیکربندی شود و یکی از ساده ترین اجزای Flume برای پیکربندی است. جدول 4-1 پارامترهای پیکربندی کانال را لیست می کند.
نوع
نام مستعار کانال حافظه حافظه است. FQCN org. apache. flume. channel. memorychannel (حساس به مورد) است.
حداکثر تعداد رویدادهای متعهد که کانال می تواند برگزار کند.
حداکثر تعداد رویدادهایی که می توانند در یک معامله واحد قرار دهند یا انجام شوند.
80 ٪ از کل فضای پشته در دسترس این فرآیند
حداکثر مقدار فضای پشته (در بایت) این کانال مجاز به استفاده است.
درصد بایت از ظرفیت برای در نظر گرفتن نگه داشتن به عنوان یک بافر بین ظرفیت بایت کانال و اندازه کل اجساد تمام رویدادهای موجود در کانال.
حداکثر مدت زمان (در ثانیه) هر یک از آنها باید منتظر تکمیل باشند.
کانال حافظه تمام وقایع را در حافظه نگه می دارد - بنابراین ، ظرفیت کانال محدود است و توسط پارامتر ظرفیت تعریف می شود. این پارامتر تعداد کل رویدادهای متعهد را که کانال می تواند در هر زمان معین برگزار کند ، تعریف می کند. تفاوت بین تعداد کل حوادث مرتکب شده در کانال و تعداد وقایع خارج از کانال (و متعهد) در هر زمان باید کمتر یا مساوی با ظرفیت کانال باشد. اگر کانال در ظرفیت باشد ، تلاش های بیشتری برای وارد کردن رویدادها در کانال با یک کانال اکسپیسم شکست می خورد تا حداقل تعداد معادل رویدادها از کانال گرفته شود.
حداکثر تعداد رویدادهایی که می توانند در یک معامله قرار دهند یا گرفته شوند ، توسط پارامتر TransactionCapacity کنترل می شود. این پارامتر همچنین دفاع خوبی در برابر مشتریان سرکش است که تعداد زیادی از رویدادها را به یک منبع سوق می دهد و باعث می شود نماینده از حافظه خارج شود. این پارامترها دسته ای را به اندازه محدود و در نتیجه تعداد وقایع در هر تماس RPC محدود می کند و یک دفاع ساده در برابر حملات تکذیب خدمات (DOS) است.
مقدار کل حافظه ای که وقایع موجود در کانال استفاده می کند می تواند توسط پارامتر Bytecapacity محدود شود. پارامتر bytecapacitybufferpercentage درصد از ظرفیت بایت را که برای هدرهای رویداد محفوظ است ، نشان می دهد. هنگامی که یک رویداد به کانال متعهد می شود ، این رویداد در کانال وارد می شود اگر و فقط اگر اندازه ترکیبی از اجسام همه وقایع موجود در کانال به علاوه اندازه بدنه رویداد فعلی کمتر از یا مساوی باشد. به میزان حافظه موجود که برای هدرهای رویداد محفوظ نیست.
هنگامی که یک رویداد قرار است در کانال وارد شود ، ممکن است که کانال در آن زمان پر شود. در این حالت ، نخ درج وقایع ، حداکثر ثانیه های نگهدارنده قبل از عدم موفقیت منتظر خواهد ماند. رویدادهای مورد نظر از کانال نیز منتظر ثانیه های نگهدارنده برای یک رویداد در کانال خواهد بود. در بیشتر موارد ، نیازی به تنظیم این پارامتر نیست. این یک دریچه ایمنی برای گاز گرفتن نرخ نوشتن یا خواندن است. هنگامی که نرخ گرفتن بسیار سریعتر از نرخ قرار داده شده یا برعکس باشد ، سرعت گرفتن نرخ مفید است.
پیکربندی زیر یک کانال حافظه پیکربندی شده برای نگه داشتن 100000 رویداد را نشان می دهد که هر معامله قادر به نگه داشتن 1000 رویداد است. کل حافظه اشغال شده توسط تمام وقایع موجود در کانال می تواند حداکثر 5 گیگابایت فضا باشد. از این 5 گیگابایت ، کانال 10 ٪ را برای هدرهای رویداد (همانطور که توسط پارامتر bytecapacitybufferpercentage تعریف شده است) محفوظ است ، و 4. 5 گیگابایت را برای اجسام رویداد در دسترس قرار می دهد:
کانال
کانال پرونده کانال مداوم Flume است. این همه رویدادها را به دیسک می نویسد و بنابراین داده های مربوط به خاموش کردن فرآیند یا دستگاه را از دست نمی دهد. کانال فایل تضمین می کند که هرگونه وقایع متعهد به کانال فقط در صورتی که یک سینک حوادث را انجام داده و معامله را مرتکب می شود ، حتی اگر دستگاه یا عامل خراب شود و مجدداً راه اندازی شود ، از کانال خارج می شود. این طراحی شده است تا همزمان همزمان باشد و به طور همزمان با چندین منبع و سینک اداره شود. طراحی کانال پرونده تقریباً بر اساس مقاله مربوط به سیستم های فایل ساختار یافته توسط Rosenblum و OusterHout [LFS-Paper] است. طراحی بعداً در این بخش با جزئیات بیشتری مورد بحث قرار می گیرد.
کانال پرونده به گونه ای طراحی شده است که در شرایطی که دوام داده مورد نیاز است استفاده می شود و از دست دادن داده ها قابل تحمل نیست. از آنجا که کانال داده ها را به دیسک می نویسد ، داده های مربوط به خرابی یا خرابی را از دست نمی دهد. یک جایزه اضافی به دلیل این که داده ها را به دیسک می نویسد این است که کانال می تواند ظرفیت بسیار بزرگی داشته باشد ، به خصوص در مقایسه با کانال حافظه.
تا زمانی که فضای دیسک در دسترس باشد ، کانال پرونده می تواند ظرفیت بسیار بزرگی داشته باشد ، تا ده ها یا صدها میلیون رویداد. این امر به ویژه هنگامی مفید است که انتظار می رود سینک های دریافت شده از کانال نتوانند با یک دوره اوج محدود ادامه دهند و یک اتفاق بزرگ از وقایع امکان پذیر است. در نتیجه کانال پرونده همچنین می تواند در صورت پیکربندی صحیح ، نقص های پایین دست طولانی مدت را کنترل کند. از آنجا که کانال پس از انجام آنها وقایع را در حافظه نگه نمی دارد ، فضای بسیار کمتری نسبت به کانال حافظه با ظرفیت معادل دارد.
کانال فایل تضمین می کند که هر رویدادی که برای آن نوشته شده است از طریق خرابی عامل و دستگاه یا راه اندازی مجدد در دسترس خواهد بود. این کار را با نوشتن هر رویدادی که در کانال به دیسک قرار می گیرد ، انجام می دهد. پس از انجام معامله ، رویدادهای موجود در آن معامله در دسترس هستند. این رویدادها از دیسک خوانده می شوند و هنگامی که از کانال گرفته می شوند ، به سینک منتقل می شوند و پس از انجام معامله ، کاملاً مناسب و واجد شرایط برای حذف هستند. جزئیات بیشتر در مورد اجرای بعداً در این بخش مورد بحث قرار خواهد گرفت.
کانال فایل به کاربر اجازه می دهد تا با نصب آنها در نقاط مختلف مختلف ، استفاده از دیسک های مختلف را پیکربندی کند. هنگامی که برای استفاده از دیسک های مختلف تنظیم شده است ، رابین های دور کانال بین دیسک ها ، بنابراین به کانال این امکان را می دهد تا در صورت در دسترس بودن دیسک های بیشتر ، عملکرد بهتری داشته باشد. توصیه می شود (هرچند که لازم نیست) برای استفاده از دیسک جداگانه برای ایست بازرسی کانال پرونده استفاده کنید. ایست بازرسی وضعیت دقیق کانال را در لحظه ای که پاسگاه نوشته شده است منعکس می کند. کانال فایل از پاسگاه برای راه اندازی مجدد سریع بدون نیاز به خواندن همه پرونده های داده استفاده می کند. در حالی که در حال کار است ، ایست بازرسی را به صورت دوره ای به دیسک می نویسد. در هنگام راه اندازی مجدد ، کانال آخرین بازرسی را که نوشته شده است بارگذاری می کند و فقط قرار می دهد و بعد از این ایست بازرسی اتفاق می افتد و به کانال اجازه می دهد تا به سرعت راه اندازی شود و برای عملکرد عادی آماده باشد. فاصله بین دو پاسگاه متوالی به طور پیش فرض به 30 ثانیه تنظیم می شود ، اگرچه قابل تنظیم است.
کانال فایل به کاربران امکان می دهد در چندین پارامتر پیکربندی عبور کنند و به آنها امکان می دهد عملکرد کانال را بر اساس سخت افزار تنظیم کنند. پارامترهای پیکربندی برای کانال پرونده در جدول 4-2 شرح داده شده است.
نوع
نام مستعار برای کانال پرونده پرونده است. FQCN org. apache. flume. channel. file. filechannel (حساس به مورد) است.
حداکثر تعداد رویدادهای متعهد که کانال می تواند برگزار کند.
حداکثر تعداد رویدادهایی که می توانند در یک معامله واحد قرار دهند یا انجام شوند.
دایرکتوری که کانال باید در آن ایست بازرسی بنویسد.
لیستی از دایرکتوری های جدا از کاما برای استفاده برای نوشتن رویدادها. پیکربندی چندین دایرکتوری ، که هر یک از دیسک های مختلف را نصب می کند ، می تواند با نوشتن به صورت موازی به طور چشمگیری عملکرد را بهبود بخشد.
به کانال می گوید که آیا پس از نوشتن کامل ، از پاسگاه پشتیبان تهیه کنید. این باید درست یا نادرست باشد. اگر این تنظیم شده باشد ، باید BackupCheckPointDir تنظیم شود.
دایرکتوری برای پشتیبان گیری از ایست بازرسی. اگر نقطه بازرسی اولیه خراب یا ناقص باشد، کانال می تواند از پشتیبان گیری بازیابی شود، بنابراین از پخش مجدد کامل فایل های داده جلوگیری می کند. این پارامتر باید به دایرکتوری متفاوت با checkpointDir اشاره کند.
بازه زمانی (بر حسب ثانیه) بین پست های بازرسی متوالی.
حداکثر اندازه (بر حسب بایت) هر فایل داده. هنگامی که فایل به این اندازه رسید (یا زمانی که رویداد بعدی روی آن نوشته شد به آن می رسد)، فایل رول می شود و یک فایل داده جدید در آن دایرکتوری ایجاد می شود. اگر این مقدار روی بالاتر از مقدار پیش فرض تنظیم شود، کانال همچنان از مقدار پیش فرض به عنوان حداکثر مقدار استفاده می کند.
حداقل فضای مورد نیاز (بر حسب بایت) در هر حجم برای ادامه عملکرد کانال. اگر هر یک از جلدهایی که دایرکتوری های داده روی آن نصب شده اند، تنها این مقدار فضای باقی مانده باشد، کانال برای جلوگیری از خرابی و جلوگیری از نوشتن اطلاعات ناقص، کار را متوقف می کند. حداقل مقدار ممکن برای این پارامتر 1048576 (1 مگابایت) است.
حداکثر مدت زمان (در ثانیه) هر یک از آنها باید منتظر تکمیل باشند.
کانال فایل، که کانال اصلی ثابت فلوم است، اغلب عملکرد عامل را به عنوان یک کل دیکته می کند. تنظیم دقیق چندین جنبه از کانال از طریق پیکربندی امکان پذیر است. کانال فایل دارای پارامترهای ظرفیت و ظرفیت تراکنش است که دقیقاً مشابه پارامترهای کانال حافظه است، اگرچه به ترتیب مقادیر بالاتر 1000000 و 1000 را پیش فرض می کنند.
همانطور که قبلاً بحث شد، کانال فایل می تواند داده ها را روی چندین دیسک بنویسد، اگرچه کانال مستقیماً از این موضوع آگاه نیست. دیسک های مختلف را می توان در نقاط مختلف نصب کرد و کانال را می توان طوری پیکربندی کرد که داده ها را به صورت گرد در این فهرست ها بنویسد. کانال همیشه دقیقاً به یک فایل در هر فهرست داده اضافه می شود، اگرچه در صورت لزوم از همه فایل ها خوانده می شود. از آنجایی که چندین منبع می توانند در کانال بنویسند (و هر منبع می تواند از چندین رشته بنویسد)، کانال به طور موازی از رشته های مختلف در فهرست های مختلف داده می نویسد (هر منبع و سینک حداقل یک رشته را اجرا می کند، و در بسیاری از موارد، مانندAvro Source، آنها ممکن است بیش از یک رشته را اجرا کنند، بنابراین استفاده از دیسک را موازی می کنند و در نتیجه عملکرد بهتری دارند. بنابراین، اگر دیسک های بیشتری را به File Channel بدهید تا با آن کار کند، احتمالاً عملکرد کانال بهبود می یابد.
کانال فایل لیستی از دایرکتوری های داده جدا از کاما را به عنوان مقدار پارامتر DataDirs می گیرد. مقدار پیش فرض فقط باید برای آزمایش استفاده شود و برای استفاده از تولید توصیه نمی شود. حتی برای یک دیسک منفرد یا تعداد محدودی از دیسک ها ، می توان از دایرکتوری های مختلف داده برای عملکرد بهتر در هر دیسک استفاده کرد ، اگرچه تعداد دایرکتوری هایی که می توانند مورد استفاده قرار گیرند به گونه ای که عملکرد بهبود می یابد با توجه به دیسک متفاوت است.
کانال پرونده به طور دوره ای یک پاسگاه را می نویسد تا سریعتر راه اندازی مجدد یا بازیابی شود. ایست بازرسی به دایرکتوری که به عنوان مقدار پارامتر CheckpointDir مشخص شده است نوشته شده است. اگر کانال در حین ایست بازرسی متوقف شود ، بازرسی ممکن است ناقص یا فاسد باشد. یک ایست بازرسی فاسد یا ناقص می تواند مجدداً راه اندازی مجدد کانال را بسیار کند کند ، زیرا کانال نیاز به خواندن و پخش مجدد کلیه پرونده های داده دارد.
برای جلوگیری از این مشکل ، توصیه می شود که پارامتر MeiedualCheckPoints روی True تنظیم شود و BackupCheckPointDir تنظیم شود. توصیه می شود که این فهرست در دیسک متفاوت از نمونه ای که ایست بازرسی اصلی در آن ذخیره شده است باشد. هنگامی که این پارامترها تنظیم شد ، Flume به محض اتمام ، از ایست بازرسی به BackupCheckPointDir پشتیبان می گیرد. این تضمین می کند که به محض اینکه کانال برای مدت کوتاهی در حال کار باشد (زمان کافی برای اولین بار برای نوشتن و پشتیبان گیری) ، قادر خواهد بود از یک پاسگاه مجدداً راه اندازی شود ، حتی اگر جدیدترین آن فاسد باشد یاناقص ، کاهش زمان شروع مجدد را به طرز چشمگیری کاهش می دهد. دوره زمانی بین پاسگاه های متوالی توسط پارامتر checkpointinterval کنترل می شود.
پارامترهای باقیمانده به منظور تنظیم دقیق عملکرد کانال فایل و استفاده از دیسک است. Flume هر رویداد را به انتهای یک پرونده داده اضافه می کند و آن پرونده را تا زمانی که پرونده حاوی رویدادهایی باشد که هنوز گرفته نشده و مرتکب نشده اند ، حفظ می کند ، یا هنوز هم نوشته شده است. حداکثر اندازه ای که پرونده باید قبل از اینکه فلوم آن را بچرخاند رشد کند و آن را فقط خواندنی توسط پارامتر maxfilesize کنترل می کند. این پارامتر به معادل حدود 1. 6 گیگابایت پیش فرض می شود ، که حداکثر مقدار این پارامتر است. اگر این بالاتر از مقدار پیش فرض تنظیم شود ، پس از رسیدن به اندازه پیش فرض ، پرونده هنوز هم چرخانده می شود. لازم به ذکر است که اگر همه رویدادهای نوشته شده به کانال گرفته شده و مرتکب شوند ، هر پرونده حذف می شود (در واقع ، پرونده فقط در زمان ایست بازرسی پس از آخرین رویداد که انجام شده و مرتکب شده است حذف می شود). اگر پرونده ها زودتر حذف شوند ، این پارامتر باید روی مقدار کمتری تنظیم شود ، به طوری که همه رویدادها از پرونده های جداگانه سریعتر خارج می شوند (از آنجا که پرونده ها کوچکتر هستند ، آنها حاوی رویدادهای کمتری نسبت به یک پرونده بزرگتر هستند). کوچک نگه داشتن این مقدار می تواند منجر به ایجاد تعداد زیادی پرونده در دیسک های مورد استفاده شود ، بنابراین بهتر است این مقدار را از پیش فرض کاهش ندهید. این کانال همچنین با توجه به حذف پرونده ها محافظه کارانه است. همیشه دو پرونده در هر فهرست داده را حفظ می کند ، حتی اگر پرونده ها هیچ اتفاقی برای انجام و مرتکب شدن نداشته باشند. این کانال همچنین پرونده ای را که در حال حاضر برای آن نوشته شده است حذف نمی کند.
برای اطمینان از اینکه کانال برای دیسک های دارای فضای کم دیسک به دیسک ها نمی نویسد ، می توان پارامتر حداقل requiredspace را پیکربندی کرد. هنگامی که فضای دیسک روی یک دیسک خاص به مقدار تعیین شده توسط این پارامتر پایین می آید (یا 1 مگابایت ، هر کدام بالاتر باشد) ، کانال عملکرد را متوقف می کند. برای حفظ منابع سیستم و تأثیرگذاری بر عملکرد ، کانال فضای دیسک را در هر نوشتن بررسی نمی کند ، بلکه به صورت دوره ای انجام می دهد ، با حفظ پیشخوان ها در داخل برای محاسبه فضای موجود در دیسک. این فرض می کند که هیچ کانال یا فرآیند دیگری روی این دیسک نمی نویسد ، که باعث می شود فضای دیسک موجود سریعتر کاهش یابد.
همانطور که قبلاً مورد بحث قرار گرفت ، کانال فایل یک بازرسی را به صورت دوره ای به دیسک می نویسد. از آنجا که ایست بازرسی وضعیت کانال را در زمان نگارش منعکس می کند ، در حالی که پاسگاه در حال نوشتن است ، نمی توان عملیات عادی را انجام داد. پارامتر نگهدارنده به طور مشابه با کانال حافظه کار می کند ، زمان انتظار برای انتظار برای ظرفیت در دسترس بودن یا ایست بازرسی را برای تکمیل یک رویداد یا رویدادی که برای گرفتن کانال در دسترس است ، مشخص می کند.
به طور معمول ، کانال وقتی دیسک های بیشتری در دسترس هستند ، عملکرد بهتری دارند. اگر فضای کافی دیسک در دسترس باشد ، کانال باید با ظرفیت کافی تنظیم شود تا بتواند خرابی های پایین دست یا سنبله های ترافیکی را در خود جای دهد. بر اساس توان پیش بینی شده در هر کانال و حداکثر خرابی انتظار می رود عوامل پایین دست یا مقصد ، ظرفیت کانال را می توان برای رسیدگی به عقب های بزرگ پیکربندی کرد. این کانال به اندازه کافی سریع است که بتواند طی چند دقیقه ده ها میلیون رویداد را پاک کند ، اگرچه عملکرد تا حد زیادی به سخت افزار اساسی بستگی دارد.
پرونده پیکربندی زیر یک کانال فایل به نام FC را پیکربندی کرده است تا بتواند یک میلیون رویداد را برگزار کند. این کانال داده ها را به سه دیسک ذخیره می کند و به ترتیب رابین برای آنها می نویسد. این کانال همچنین برای تهیه نسخه پشتیبان از ایست بازرسی به یک فهرست دیگر تنظیم شده است تا به سرعت از خرابی بازیابی شود. برای پشتیبانی از معاملات حداکثر 10،000 رویداد پیکربندی شده است. به فایل های جمع آوری زباله سریعتر ، کانال همچنین حداکثر اندازه پرونده پرونده های داده را تقریباً 900 مگابایت تنظیم می کند:
بهترین روش ها با کانال پرونده
می توانید با مشخص کردن چندین دایرکتوری داده در پیکربندی ، کانال پرونده را به چندین دیسک بنویسید. اضافه کردن دیسک های بیشتر به طور مستقیم عملکرد را بهبود می بخشد ، زیرا کانال پرونده Roun-Robins بین دیسک ها می نویسد.
در صورتی که خود بازرسی ناقص یا فاسد باشد ، کانال پرونده می تواند از پاسگاه پشتیبان گرفته و از پشتیبان شروع کند (اگر دستگاه یا عامل در هنگام بازرسی کانال خراب شود ، ممکن است این اتفاق بیفتد. فعال کردن پشتیبان گیری از پاسگاه به کانال اجازه می دهد تا سریعاً مجدداً راه اندازی شود حتی اگر خود پاسگاه فاسد باشد.
در صورت عدم موفقیت دیسک ، کانال پرونده می تواند داده را از دست بدهد. حتی اگر فقط یکی از بسیاری از دیسک های کانال در حال نوشتن داده ها باشد ، کانال ممکن است نتواند هیچ یک از داده ها را بازیابی کند - حتی رویدادهایی که در دیسک هایی هستند که شکست خورده اند. برای جلوگیری از چنین وضعیتی ، ایده خوبی است که از دیسک های Raid-ed با کانال پرونده استفاده کنید.
استفاده از دیسک های نصب شده NFS با کانال پرونده ایده خوبی نیست ، زیرا NFS همان ضمانت های دیسک های محلی را ارائه نمی دهد. به طور خاص ، تماس سیستم FSYNC تضمین نمی کند که داده ها بر روی دیسک فیزیکی ادامه یابد ، بنابراین ممکن است در صورت خراب شدن دستگاه یا عامل ، داده های کانال پرونده از بین برود.
طراحی و اجرای کانال پرونده*
همانطور که قبلاً مورد بحث قرار گرفت ، کانال فایل هر رویدادی را به دیسک ادامه می دهد و اطمینان می دهد که این رویدادها حتی در صورت خرابی عامل یا دستگاه و راه اندازی مجدد در دسترس هستند. کانال فایل همچنین هر عملیاتی را که روی دیسک انجام می شود ، ادامه می دهد. این بدان معناست که کانال می تواند هر رکورد را به همان ترتیب که اتفاق افتاده است ، دوباره به همان وضعیتی که هنگام خاموش شدن کانال در آن بود ، دوباره پخش کند. هنگامی که کانال دوباره پخش سوابق را به اتمام رساند ، برای عملکرد عادی آماده است. در این بخش ، نگاهی دقیق تر به داخلی کانال پرونده می اندازیم.
کانال فایل دو ساختار داده جداگانه را حفظ می کند: صف رویداد Flume (که از آن به صف گفته می شود) و ورود به سیستم نوشتن (WAL). هر قرار است ، تعهد ، و بازپرداخت توسط یک سوابق رویداد معامله (که از اینجا به عنوان یک رکورد) ذکر شده است ، با نوع سابقه ای که عملیات را نشان می دهد - PUP ، Take ، Tociation یا Rollback را نشان می دهد. هر عملیات کانال پرونده در WAL به عنوان یک رکورد ثبت می شود. هر بار که یک رویداد در کانال قرار می گیرد ، یک رکورد قرار داده شده به وال نوشته می شود ، حتی اگر معامله در واقع مرتکب نشود.
به همین ترتیب ، برای گرفتن ، ضبط ضبط نوشته شده است. هر رکورد دارای یک شناسه منحصر به فرد و یکنواخت در حال افزایش ، شناسه نوشتن است که هنگام نوشتن رکورد به وال ضبط می شود. هر رکورد همچنین حاوی شناسه منحصر به فرد معامله است که رکورد بخشی از آن است. از آنجا که هر رکورد (یا گرفتن) شامل شناسه معامله است ، می توان فهمید که کدام رویدادها انجام شده است و کدام یک از آنها با نقشه برداری از این معامله به سوابق مربوطه یا بازپرداخت مربوطه می چرخند.
با خواندن WAL و انجام هر عملیاتی به ترتیب که در واقع اتفاق افتاده است (که می توان از شناسه های نوشتن عملیات استنباط کرد) ، می توانیم وضعیت پرونده کانال را در هر نقطه بازسازی کنیم. هنگامی که کانال با خواندن تمام پرونده های داده بازسازی می شود ، به آن یک پخش کامل گفته می شود. تکرارهای کامل اغلب وقت گیر و مختل کننده هستند ، زیرا تمام پرونده های داده باید خوانده شوند و هر عملیاتی در ول باید پردازش شود. این امر به ویژه هنگامی صادق است که WAL حاوی میلیون ها سوابق قرار داده و سوابق کسب کرده است - حتی اگر وضعیت نهایی شامل رویدادهای بسیار کمی باشد ، هر رکورد باید در حافظه خوانده شود و تا زمانی که رکورد مربوطه یا بازپرداخت مربوط را بخوانیم ، در حافظه ذخیره شود.
هر بار که یک اتفاق می افتد ، یک رکورد قرار داده شده به دیسک نوشته می شود. با استفاده از شناسه پرونده و جبران ضبط در پرونده ، کانال یک نشانگر رویداد منحصر به فرد Flume را برای آن رکورد ایجاد می کند. هر بار که یک رویداد در کانال قرار می گیرد ، نشانگر نماینده رکورد در یک صف در حافظه محلی برای معامله ذخیره می شود. هنگامی که معامله انجام شد ، نشانگرهای موجود در صف محلی در دم اصلی صف اصلی کانال فایل کپی می شوند: صف رویداد Flume. بنابراین ، این صف نشان دهنده وضعیت فعلی کانال در هر مقطع زمانی است.
هنگامی که یک سینک یک رویداد را از کانال می گیرد ، سر صف برداشته می شود و نشانگر در آن ذخیره می شود. سپس این رویداد در یک صف محلی برای معامله ذخیره می شود. در صورت تعهد ، صف محلی از آنجا که وقایع کاملاً حذف شده اند ، دور ریخته می شوند. در هنگام بازگشت ، وقایع دوباره به صف منتقل می شوند. صف در واقع یک فایل نقشه برداری حافظه است-بافر نقشه برداری شده در حین ایست بازرسی به دیسک منتقل می شود.
در هنگام راه اندازی ، Flume فرآیندی به نام پخش مجدد را شروع می کند تا کانال را به حالت دقیقی که در زمان متوقف شدن آن در آن قرار داشت ، بازگرداند. در زمان راه اندازی با نقشه برداری از حافظه پرونده بازرسی ، صف در زمان شروع به حافظه بارگذاری می شود. سپس پرونده های داده از زمان بازرسی از افست خوانده می شوند (این افست در زمان بازرسی در ابرداده پرونده های داده ثبت می شود) ، و قرار دادن و گرفتن به ترتیب در صف اعمال می شود.
تمام نشانگرهای نماینده معاملات ناقص فعلی (به نام INFLIGHT) نیز به دیسک نوشته شده اند تا هرگونه وقایع انجام شده اما هنوز در زمان ایست بازرسی انجام نشده باشد ، پس از بارگیری پاسگاه می تواند دوباره وارد صف شود. معاملات خود را که هنوز در زمان ایست بازرسی در حال انجام بودند نیز با استفاده از پرونده های INLIW بازیابی می شوند.(ممکن است در پرونده های داده هایی که قبل از ایست بازرسی نوشته شده اند اما بعد از آن مرتکب شده اند ، اتفاقاتی رخ دهد. جبران در زمان ایست بازرسی.)
پس از اتمام پخش مجدد ، کانال برای عملکرد عادی آماده است. هنگامی که هیچ صف موجود نیست یا وقتی ناقص است ، کانال یک پخش کامل انجام می دهد. همانطور که قبلاً مورد بحث قرار گرفت ، کانال می تواند بلافاصله پس از اتمام ، از هر ایست بازرسی نسخه پشتیبان تهیه کند ، به طوری که اگر پاسگاه فعلی خراب شود ، یا عامل قبل از اتمام کشته شود ، می توان مورد قبلی را بارگیری کرد تا از پخش مجدد کامل جلوگیری شود.
خلاصه
در این فصل ما در مورد کانال هایی بحث کردیم که بافر هایی هستند که بین منابع و سینک ها قرار می گیرند و داده های آورده شده توسط یک منبع را در یک ماده فلمه نگه می دارند ، تا زمانی که توسط یک سینک حذف شود. کانالها می توانند در حافظه یا دیسک باشند ، در حالی که کانال حافظه درون حافظه عملکرد بهتری را ارائه می دهد در حالی که کانال فایل روی دیسک با تداوم تمام عملیات و داده ها به دیسک ، دوام را از طریق راه اندازی مجدد عامل و دستگاه تضمین می کند.
در فصل بعد ، ما در مورد چگونگی طراحی سینک ها و سینک های مختلفی که با Flume بسته بندی شده اند ، بحث خواهیم کرد. ما همچنین به نحوه نوشتن سینک های سفارشی خواهیم پرداخت.
منابع
[LFS-PAPER] "طراحی و اجرای یک سیستم فایل ساختار یافته" ، http://bit. ly/1wxcsom
اکنون با پلت فرم یادگیری O'Reilly از Flume استفاده کنید.
اعضای O'Reilly آموزش آنلاین آنلاین ، به علاوه کتاب ، فیلم و محتوای دیجیتالی را از نزدیک به 200 ناشر تجربه می کنند.
استراتژی ترید...
ما را در سایت استراتژی ترید دنبال می کنید
برچسب :
نویسنده : مرجان شیرمحمدی
بازدید : 35
تاريخ : چهارشنبه
31 خرداد
1402 ساعت: 19:55