Latest Technologies - অ্যাপাচি ফ্লিঙ্ক (Apache Flink) - DataStream API এবং DataSet API | NCTB BOOK

Flink DataStream API ব্যবহার করে স্ট্রিম প্রসেসিং করতে পারেন। এটি সাধারণত real-time data প্রসেসিংয়ের জন্য ব্যবহৃত হয়। নিচে একটি উদাহরণ দিয়ে দেখানো হয়েছে যেখানে একটি DataStream থেকে ডেটা পড়ে এবং কিছু প্রসেসিং করে আউটপুট দেওয়া হয়েছে।

এই উদাহরণে, আমরা একটি socket থেকে ডেটা পড়ব এবং প্রতি লাইনের প্রতিটি word এর সংখ্যা গণনা করব।

Maven ডিপেন্ডেন্সি (pom.xml)

প্রথমে আপনাকে Maven প্রোজেক্টে Flink এর ডিপেন্ডেন্সি যুক্ত করতে হবে। নিচের কোডটি আপনার pom.xml ফাইলে যুক্ত করুন:

<dependencies>
    <!-- Flink Core Dependency -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-streaming-java_2.11</artifactId>
        <version>1.15.0</version> <!-- Flink এর ভার্সন -->
    </dependency>
</dependencies>

Flink DataStream উদাহরণ

নিচের উদাহরণে, আমরা Flink এর মাধ্যমে একটি socket থেকে ডেটা পড়ব এবং word count করব। এটি একটি সাধারণ স্ট্রিম প্রসেসিং উদাহরণ।

import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.util.Collector;

public class FlinkWordCount {

    public static void main(String[] args) throws Exception {
        // Execution Environment তৈরি করুন
        final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        // DataStream তৈরি করে socket থেকে ডেটা পড়ুন (hostname: localhost, port: 9999)
        DataStream<String> text = env.socketTextStream("localhost", 9999);

        // প্রতিটি লাইনের word গুলোকে আলাদা করে গণনা করুন
        DataStream<Tuple2<String, Integer>> wordCounts = text
            .flatMap(new Tokenizer())
            .keyBy(value -> value.f0)
            .sum(1);

        // আউটপুট প্রিন্ট করুন
        wordCounts.print();

        // Execution শুরু করুন
        env.execute("Socket WordCount Example");
    }

    // Tokenizer class - word গুলোকে আলাদা করে এবং তাদের একটি count সহ output দেয়
    public static final class Tokenizer implements FlatMapFunction<String, Tuple2<String, Integer>> {
        @Override
        public void flatMap(String value, Collector<Tuple2<String, Integer>> out) {
            // প্রতিটি লাইনের word গুলো স্পেস দিয়ে আলাদা করুন
            String[] tokens = value.toLowerCase().split("\\W+");

            // প্রতিটি word কে (word, 1) টুপল হিসেবে প্রেরণ করুন
            for (String token : tokens) {
                if (token.length() > 0) {
                    out.collect(new Tuple2<>(token, 1));
                }
            }
        }
    }
}

কীভাবে চালাবেন:

  1. টার্মিনালে nc -lk 9999 কমান্ডটি রান করুন (যাতে আপনার socket input পাওয়া যায়)।
  2. তারপরে, Flink প্রোজেক্টটি রান করুন। এটি আপনার socket থেকে ইনপুট পড়বে এবং word count শুরু করবে।
  3. আপনি টার্মিনালে কোনো word টাইপ করলে Flink সেই word গুলোর count করে প্রিন্ট করবে।

কোডের ব্যাখ্যা:

  1. Execution Environment: StreamExecutionEnvironment Flink এর স্ট্রিম প্রসেসিংয়ের execution environment তৈরি করে।
  2. DataStream: socket থেকে লাইভ ডেটা পড়া হয় এবং DataStream হিসেবে save করা হয়।
  3. FlatMap: flatMap function ব্যবহার করে প্রতিটি লাইনের word গুলো আলাদা করে এবং তাদের একটি টুপল (word, 1) আকারে return করে।
  4. KeyBy এবং Sum: একই word গুলোকে একত্রিত করে এবং তাদের সংখ্যাগুলো যোগ করে।
  5. print(): আউটপুট কনসোলে প্রিন্ট করে।

এই উদাহরণটি আপনাকে Flink DataStream এর একটি সাধারণ ধারণা দেবে।

Promotion