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

Apache Flink-এ Fault Tolerance স্ট্রিম এবং ব্যাচ প্রসেসিং অ্যাপ্লিকেশনগুলির স্থায়িত্ব এবং নির্ভরযোগ্যতা নিশ্চিত করার একটি প্রক্রিয়া। Flink এর মূল মেকানিজমগুলো হলো checkpointing এবং savepointing, যা ফেইলওভারের সময় অ্যাপ্লিকেশনকে পুনরুদ্ধার করতে সহায়তা করে। Flink অ্যাপ্লিকেশন চলাকালীন কোনো ত্রুটি (যেমন: নেটওয়ার্ক সমস্যা, হার্ডওয়্যার ফেলিওর) হলে, Flink এই মেকানিজমগুলো ব্যবহার করে অ্যাপ্লিকেশনকে পুনরায় চালু করতে পারে এবং ডেটা প্রসেসিং সঠিক অবস্থান থেকে পুনরায় শুরু করতে পারে।

Flink-এর Fault Tolerance মেকানিজমের উপাদানসমূহ

  1. Checkpointing
  2. Savepointing
  3. State Management এবং State Backend
  4. Exactly-once এবং At-least-once প্রসেসিং সেমান্টিক্স

1. Checkpointing

Checkpointing Flink-এর একটি মেকানিজম যা নিয়মিত সময়ের ব্যবধানে জবের বর্তমান স্টেট সংরক্ষণ করে। Checkpointing এর মাধ্যমে Flink একটি নির্দিষ্ট ইন্টারভালে প্রতিটি টাস্কের জন্য state এবং ডেটার পজিশন সংরক্ষণ করে, যাতে কোনো ত্রুটি ঘটলে পুনরায় প্রসেসিং সঠিক অবস্থান থেকে শুরু করা যায়।

Checkpointing Configuration:

  • Checkpointing সক্রিয় করতে কোডে বা কনফিগারেশনে সেট করা হয়:
  • Checkpoint স্টোর করার জন্য একটি ডিরেক্টরি সেট করতে হয় (যেমন HDFS বা S3):
state.checkpoints.dir: hdfs:///flink/checkpoints
env.enableCheckpointing(10000); // প্রতি ১০ সেকেন্ডে চেকপয়েন্ট নেওয়া

Incremental Checkpointing:

  • Flink-এ incremental checkpointing সক্রিয় থাকলে, Flink কেবল পরিবর্তিত অংশ সংরক্ষণ করে, যা চেকপয়েন্টের আকার এবং সময় কমায়।

2. Savepointing

Savepointing হলো Flink-এর ম্যানুয়াল প্রক্রিয়া যা checkpointing-এর মতোই কাজ করে, তবে এটি সাধারণত জব আপগ্রেড বা ম্যানুয়াল রিস্টার্টের জন্য ব্যবহৃত হয়। Savepoint হলো ফ্লিঙ্ক জবের একটি স্ন্যাপশট, যা ডেভেলপাররা প্রয়োজন অনুযায়ী তৈরি করতে পারে এবং সেই savepoint থেকে পুনরায় জব শুরু করতে পারে।

  • Savepoint তৈরি করা:
    • Savepoint কমান্ড লাইন থেকে তৈরি করা যায়:
    • Savepoint তৈরি হলে ফাইল সিস্টেমে সংরক্ষিত হয় এবং পরবর্তী সময়ে এই ফাইল ব্যবহার করে জব পুনরায় চালানো যায়।
./bin/flink savepoint :jobId :savepointDirectory
  • Savepoint থেকে পুনরায় জব শুরু করা:
    • Savepoint থেকে পুনরায় প্রসেসিং শুরু করতে:
./bin/flink run -s :savepointPath path/to/your-job.jar

3. State Management এবং State Backend

Flink অ্যাপ্লিকেশনগুলির state সংরক্ষণের জন্য State Backend ব্যবহার করে, যা Flink এর fault tolerance সিস্টেমে গুরুত্বপূর্ণ ভূমিকা পালন করে। Flink বিভিন্ন ধরনের state backend সমর্থন করে, যেমন:

  • Memory: ছোট স্টেটের জন্য উপযুক্ত, যেখানে স্টেট সরাসরি মেমরিতে সংরক্ষণ করা হয়।
  • RocksDB: বড় স্টেটের জন্য ব্যবহৃত একটি এমবেডেড ডাটাবেস, যা ডেটা ডিস্কে সংরক্ষণ করে।

Flink-এর চেকপয়েন্টিং এবং savepointing সিস্টেম state backend ব্যবহার করে state সংরক্ষণ করে, যা কোনো টাস্ক ক্র্যাশ করলে পুনরায় state পুনরুদ্ধার করতে সাহায্য করে।

  • RocksDB কনফিগারেশন:
state.backend: rocksdb
state.checkpoints.dir: hdfs:///flink/checkpoints

4. Exactly-once এবং At-least-once প্রসেসিং সেমান্টিক্স

Flink দুটি ধরনের প্রসেসিং সেমান্টিক্স সমর্থন করে:

  • Exactly-once: Flink নিশ্চিত করে যে প্রতিটি ইভেন্ট শুধুমাত্র একবার প্রসেস করা হবে। চেকপয়েন্টিং এবং state management ব্যবহারের মাধ্যমে এটি নিশ্চিত করা হয়।
  • At-least-once: Flink নিশ্চিত করে যে প্রতিটি ইভেন্ট কমপক্ষে একবার প্রসেস করা হবে, তবে ডুপ্লিকেট হতে পারে।

Checkpointing ব্যবহার করে Flink এই সেমান্টিক্স বজায় রাখে:

  • Exactly-once: Flink চেকপয়েন্টের মাধ্যমে stateful প্রসেসিং এবং ডেটা সঠিকভাবে পুনরুদ্ধার করে।
  • At-least-once: Flink প্রতিটি টাস্কের চেকপয়েন্ট থেকে পুনরায় প্রসেস শুরু করে এবং নিশ্চিত করে যে কোনো ইভেন্ট মিস না হয়।

Flink-এর High Availability (HA) Support

Flink এর High Availability সিস্টেম তার Job Manager এবং Task Manager গুলিকে রিডান্ড্যান্ট রাখতে সহায়তা করে, যা ক্লাস্টারের স্থায়িত্ব বাড়ায়। সাধারণত, Flink ZooKeeper ব্যবহার করে Job Manager এর জন্য leader election এবং চেকপয়েন্ট সংরক্ষণ করে।

  • ZooKeeper Integration:
high-availability: zookeeper
high-availability.zookeeper.quorum: zk1:2181,zk2:2181,zk3:2181
high-availability.storageDir: hdfs:///flink/ha

Fault Tolerance-এর কাজ করার ধাপ

  1. Checkpointing Trigger: নির্দিষ্ট সময়ে বা ইভেন্টে Flink অ্যাপ্লিকেশন একটি চেকপয়েন্ট তৈরি করে, যেখানে প্রতিটি টাস্কের state এবং ডেটা পজিশন সংরক্ষণ করা হয়।
  2. Failure Detection: যদি কোনো টাস্ক বা টাস্ক ম্যানেজার ক্র্যাশ করে, Flink সেই ত্রুটি সনাক্ত করে।
  3. Restart from Checkpoint: Flink চেকপয়েন্ট থেকে টাস্ক পুনরায় চালু করে এবং সঠিক পজিশন থেকে ডেটা প্রসেসিং শুরু করে।
  4. State Recovery: Flink স্টেট ব্যাকএন্ড থেকে স্টেট পুনরুদ্ধার করে এবং আগের চেকপয়েন্ট থেকে প্রসেসিং পুনরায় শুরু করে।

Flink Fault Tolerance উদাহরণ

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

// Checkpointing সক্রিয় করা
env.enableCheckpointing(10000); // প্রতি ১০ সেকেন্ডে চেকপয়েন্ট

// চেকপয়েন্টের ডিরেক্টরি সেট করা
env.getCheckpointConfig().setCheckpointStorage("hdfs:///flink/checkpoints");

// Exactly-once প্রসেসিং সেমান্টিক্স সেট করা
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);

// চেকপয়েন্টের timeout সেট করা
env.getCheckpointConfig().setCheckpointTimeout(60000); // ১ মিনিট

// Data Stream প্রসেসিং
DataStream<String> stream = env.socketTextStream("localhost", 9999);
stream.map(value -> value.toUpperCase()).print();

env.execute("Flink Fault Tolerance Example");

উপসংহার

Apache Flink এর Fault Tolerance সিস্টেম তার চেকপয়েন্টিং এবং savepointing মেকানিজম ব্যবহার করে স্ট্রিম এবং ব্যাচ অ্যাপ্লিকেশনগুলোর নির্ভরযোগ্যতা নিশ্চিত করে। এটি বিভিন্ন state backend এর সাথে ইন্টিগ্রেটেড হয়ে কাজ করে এবং ঠিক সময়ে state এবং ডেটার স্ন্যাপশট সংরক্ষণ করে, যাতে কোনো ত্রুটি ঘটলে Flink পুনরায় প্রসেসিং শুরু করতে পারে এবং নির্ভুলতা বজায় রাখতে পারে।

Promotion