Apache Flink-এ Time Window এবং Count Window হলো দুটি সাধারণ উইন্ডোিং কৌশল যা স্ট্রিম ডেটা প্রসেসিংয়ে ব্যবহৃত হয়। উইন্ডোগুলি ইনকামিং ডেটাকে নির্দিষ্ট সময় বা ইভেন্টের সংখ্যার ভিত্তিতে ভাগ করে এবং এইভাবে ডেটা প্রসেসিং আরও নিয়ন্ত্রিত এবং পরিচালনাযোগ্য হয়। Flink স্ট্রিম প্রসেসিংয়ের ক্ষেত্রে, উইন্ডো অপারেশন ব্যবহার করে ডেটাকে গ্রুপ করে অ্যাগ্রিগেশন বা অন্য কোনও ট্রান্সফরমেশন করা সহজ হয়।

১. Time Window

Time Window হলো নির্দিষ্ট সময়কাল ভিত্তিক উইন্ডো যা ইনপুট স্ট্রিম ডেটাকে সময়ের একটি নির্দিষ্ট পরিসরে ভাগ করে। Flink-এ টাইম উইন্ডো সাধারণত দুটি প্রকারের হতে পারে:

  • Tumbling Window: নির্দিষ্ট সময় পর পর উইন্ডো খোলা হয় এবং প্রতিটি উইন্ডোতে নির্দিষ্ট সময়কালের ডেটা থাকে। উইন্ডোগুলো ওভারল্যাপ করে না।
  • Sliding Window: উইন্ডো একটি নির্দিষ্ট সময়কাল পর পর খোলে এবং একটি নির্দিষ্ট ইন্টারভালে স্লাইড করে। এটি ওভারল্যাপ করতে পারে এবং একই ডেটা একাধিক উইন্ডোতে থাকতে পারে।

Tumbling Window উদাহরণ:

DataStream<Tuple2<String, Integer>> stream = ...;

// ৫ সেকেন্ডের টাম্বলিং উইন্ডো
DataStream<Tuple2<String, Integer>> result = stream
    .keyBy(value -> value.f0) // keyBy ব্যবহার করে স্ট্রিমকে কী ভিত্তিক ভাগ করা
    .window(TumblingProcessingTimeWindows.of(Time.seconds(5))) // ৫ সেকেন্ডের উইন্ডো
    .sum(1); // প্রতিটি উইন্ডোতে দ্বিতীয় ফিল্ডের মানের যোগফল

বর্ণনা: এখানে, স্ট্রিমটি ৫ সেকেন্ডের টাম্বলিং উইন্ডোতে ভাগ করা হয়েছে এবং প্রতিটি উইন্ডোতে একটি নির্দিষ্ট কী অনুযায়ী দ্বিতীয় ফিল্ডের মানগুলো যোগ করা হয়েছে।

Sliding Window উদাহরণ:

DataStream<Tuple2<String, Integer>> stream = ...;

// ১০ সেকেন্ডের স্লাইডিং উইন্ডো যা ৫ সেকেন্ডে স্লাইড করে
DataStream<Tuple2<String, Integer>> result = stream
    .keyBy(value -> value.f0)
    .window(SlidingProcessingTimeWindows.of(Time.seconds(10), Time.seconds(5)))
    .sum(1);

বর্ণনা: এখানে, উইন্ডোটি ১০ সেকেন্ডের জন্য খোলা হয় এবং প্রতি ৫ সেকেন্ডে স্লাইড করে। একই ডেটা একাধিক উইন্ডোতে থাকতে পারে যদি তারা ওভারল্যাপ করে।

২. Count Window

Count Window হলো একটি উইন্ডো যা ডেটার নির্দিষ্ট সংখ্যার (ইভেন্টের) উপর ভিত্তি করে উইন্ডো তৈরি করে। এটি ডেটা স্ট্রিমকে নির্দিষ্ট ইভেন্ট সংখ্যা পরপর ভাগ করে এবং প্রতিটি উইন্ডোতে নির্দিষ্ট ইভেন্ট সংখ্যা রাখে। Count Window দুই প্রকার হতে পারে:

  • Tumbling Count Window: নির্দিষ্ট সংখ্যক ইভেন্টের পর উইন্ডো বন্ধ হয়ে যায় এবং নতুন উইন্ডো খোলা হয়। উইন্ডোগুলো ওভারল্যাপ করে না।
  • Sliding Count Window: একটি নির্দিষ্ট সংখ্যক ইভেন্টের পর উইন্ডো খোলে এবং নির্দিষ্ট ইন্টারভাল পরে স্লাইড করে। এটি ওভারল্যাপ করতে পারে।

Tumbling Count Window উদাহরণ:

DataStream<Tuple2<String, Integer>> stream = ...;

// প্রতিটি উইন্ডোতে ১০টি ইভেন্ট
DataStream<Tuple2<String, Integer>> result = stream
    .keyBy(value -> value.f0)
    .countWindow(10)
    .sum(1);

বর্ণনা: এখানে, প্রতিটি উইন্ডোতে ১০টি ইভেন্ট রাখা হয়েছে এবং তারপর একটি অ্যাগ্রিগেশন অপারেশন (যোগফল) প্রয়োগ করা হয়েছে।

Sliding Count Window উদাহরণ:

DataStream<Tuple2<String, Integer>> stream = ...;

// ১৫টি ইভেন্টের উইন্ডো, যা প্রতি ৫টি ইভেন্ট পরে স্লাইড করে
DataStream<Tuple2<String, Integer>> result = stream
    .keyBy(value -> value.f0)
    .countWindow(15, 5)
    .sum(1);

বর্ণনা: এখানে, উইন্ডোটি ১৫টি ইভেন্ট ধারণ করে এবং প্রতি ৫টি ইভেন্ট পর নতুন উইন্ডো খোলে। এই কারণে একাধিক উইন্ডো ওভারল্যাপ হতে পারে।

Time Window এবং Count Window-এর ব্যবহার

  • Real-time analytics: টাইম উইন্ডো ব্যবহার করে রিয়েল-টাইম ডেটা স্ট্রিমের সময়ভিত্তিক এনালাইটিক্স করা যায় যেমন প্রতিদিন, প্রতি ঘন্টা, বা প্রতি সেকেন্ডে ডেটার গড় মান বের করা।
  • Batch Processing: Count উইন্ডো ব্যবহার করে নির্দিষ্ট সংখ্যার ইভেন্টের পর পর ব্যাচ প্রসেসিং করা যায়।
  • Event-driven Applications: Count উইন্ডো ব্যবহার করে ডেটা স্ট্রিমের ইভেন্ট নির্ভর প্রসেসিং বা ট্রিগার ইভেন্ট তৈরি করা যায়।

উপসংহার

Apache Flink-এ Time Window এবং Count Window ব্যবহার করে স্ট্রিম ডেটা প্রসেসিংয়ের সময় ডেটাকে নির্দিষ্ট সময়কাল বা ইভেন্ট সংখ্যা অনুযায়ী ভাগ করে প্রক্রিয়াকরণ করা সম্ভব। টাইম উইন্ডো সাধারণত রিয়েল-টাইম ডেটা এনালাইটিক্স এবং টাইম-বেসড অ্যাগ্রিগেশন করার জন্য উপযুক্ত, যেখানে কাউন্ট উইন্ডো ইভেন্ট-ভিত্তিক প্রসেসিং এবং ব্যাচ অপারেশন করতে সুবিধাজনক।

আরও দেখুন...

Promotion