در سیستم های Streaming Processing به طور کلی دو رویکرد اصلی Stateful و Stateless را برای پردازش داده ها داریم. رویکرد Stateless Streaming یا Pure Streaming به معنای پردازش داده ها بدون نگه داشتن State در حافظه می باشد. در این رویکرد هر پیام را به طور مستقل و بدون در نظر گرفتن پیام های قبلی پردازش می کنیم. به زبان ساده تر نتیجه پردازش یک پیام هیچ گونه وابستگی به پیام های قبلی ندارد و به صورت جداگانه مورد پردازش قرار می گیرد. در رویکرد Stateful Streaming هر پیام می تواند به State قبلی وابسته باشد و برای پردازش به اطلاعات پیام های قبلی نیاز داشته باشد. در این رویکرد State به عنوان داده ذخیره شده بین پردازش ها نگه داری می شود(قابل تغییر نیز می باشد).
انتخاب رویکرد
اگر به پردازش پیام ها به شکل مستقل یا ساده مانند فیلترکردن و تبدیل فرمت نیاز داریم می توانیم از Stateless Streaming استفاده کنیم. اما اگر نیاز به نگه داشتن پیام های قدیمی برای استفاده در پردازش های جدید مانند محاسبه میانگین و... داریم استفاده از Stateful Streaming مناسب می باشد.
استفاده از هر دو رویکرد
می توانیم برای بهینه سازی پردازش داده ها از هر دو رویکرد به شکل ترکیبی استفاده کنیم. به عبارتی می توانیم بخشی از پردازش ها را به شکل Stateless و در مواقع ضروری بخش دیگر را به شکل Stateful انجام دهیم.
مثال Stateless
تراکنش ها از چندین سرویس به سیستم ارسال می شوند و در اینجا هدف ما این است که تراکنش های بیشتر از 10 دلار را برای پردازش های بیشتر انتخاب کنیم. در این حالت تمام پیام ها به صورت مستقل پردازش می شوند و نیازی به نگه داری پیام های قبلی نمی باشد.
مثال Stateful
برای مثال یک سیستم تشخیص تقلب برای تراکنش ها را در یک صرافی دیجیتال در نظر بگیرید, state هر تراکنش می تواند به تاریخچه ی تراکنش های مشابه و داده ها محاسبه شده وابسته باشد. در این سناریو استفاده از Stateful Streaming برای نگهداری وضعیت و تحلیل تراکنش ها کاربردی می باشد.
مثال ترکیبی
برای مثال همان صرافی دیجیتال و دو مثال قبلی را در نظر بگیرید, تراکنش های بالای 10 دلار برای تشخیص تقلب تراکنش ها فیلتر می شوند.
ویژگی های Stateless Streaming
سادگی: به دلیل اینکه نیازی به نگه داشتن state نیست, می توان آن را به راحتی پیاده سازی کرد.
مقیاس پذیری: به دلیل اینکه هیچ وابستگی به State وجود ندارد می توانیم حجم بالایی از داده ها را بدون نگرانی از مدیریت آن پردازش کنیم.
مناسب برای پیام های بدون state: برای پردازش هایی مانند تبدیل ساده داده ها, تغییر فرمت و فیلتر کردن پیام ها مناسب می باشد.
ویژگی های Stateful Streaming
قابلیت بازیابی وضعیت پیام: می توانیم از مکانیزم هایی مانند Checkpointing و State Snapshot برای بازیابی وضعیت در هنگام بروز خطاها استفاده کنیم.
نگهداری state بین پیام ها: با امکان نگه داشتن state بین پیام ها می توانیم پردازش هایی مانند مقایسه داده ها, نگهداری اطلاعات, محاسبه داده ها و... را انجام دهیم.
در پایان, باید توجه داشته باشیم که انتخاب رویکرد مناسب کاملا وابسته به نیازمندی های پروژه و نوع پردازش ها می باشد. در بسیاری از اوقات استفاده ترکیبی از هر دو رویکرد بهترین راه حل می باشد.