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));
}
}
}
}
}
কীভাবে চালাবেন:
- টার্মিনালে
nc -lk 9999কমান্ডটি রান করুন (যাতে আপনার socket input পাওয়া যায়)। - তারপরে, Flink প্রোজেক্টটি রান করুন। এটি আপনার socket থেকে ইনপুট পড়বে এবং word count শুরু করবে।
- আপনি টার্মিনালে কোনো word টাইপ করলে Flink সেই word গুলোর count করে প্রিন্ট করবে।
কোডের ব্যাখ্যা:
- Execution Environment:
StreamExecutionEnvironmentFlink এর স্ট্রিম প্রসেসিংয়ের execution environment তৈরি করে। - DataStream: socket থেকে লাইভ ডেটা পড়া হয় এবং
DataStreamহিসেবে save করা হয়। - FlatMap:
flatMapfunction ব্যবহার করে প্রতিটি লাইনের word গুলো আলাদা করে এবং তাদের একটি টুপল(word, 1)আকারে return করে। - KeyBy এবং Sum: একই word গুলোকে একত্রিত করে এবং তাদের সংখ্যাগুলো যোগ করে।
- print(): আউটপুট কনসোলে প্রিন্ট করে।
এই উদাহরণটি আপনাকে Flink DataStream এর একটি সাধারণ ধারণা দেবে।
Read more