কাফকা একটি ডিস্ট্রিবিউটেড সিস্টেম, যেখানে ডেটা বিভিন্ন ব্রোকারে বিতরণ করা হয় এবং উচ্চ উপলব্ধতা এবং ত্রুটি সহনশীলতা নিশ্চিত করার জন্য replication এবং failover কনফিগারেশন অত্যন্ত গুরুত্বপূর্ণ। Replication এবং Failover কনফিগারেশনের মাধ্যমে কাফকা সিস্টেমের স্থিতিস্থাপকতা (resilience) এবং ডেটার অখণ্ডতা নিশ্চিত করা যায়।
Kafka Replication এর ধারণা
Kafka-তে replication এমন একটি প্রক্রিয়া যেখানে একটি টপিকের ডেটা একাধিক ব্রোকারে কপি করা হয়। এতে নিশ্চিত করা হয় যে, ডেটা যদি কোনো এক ব্রোকারে নষ্ট বা অপ্রাপ্য হয়, তাহলে অন্য ব্রোকারে তার কপি থাকবে এবং সিস্টেমটি ব্যাহত হবে না।
Replication Key Concepts:
- Partition Replication: কাফকা টপিককে একাধিক পার্টিশনে ভাগ করা হয়। প্রতিটি পার্টিশনের একটি কপি অন্যান্য ব্রোকারে রিপ্লিকেট করা হয়।
- Leader: প্রতিটি পার্টিশনে একটি লিডার থাকে, যা মেসেজ লেখার জন্য দায়ী। অন্য সব ব্রোকারকে Follower বলা হয়, যারা লিডারের থেকে ডেটা কপি করে।
- Follower: ফলোয়াররা ডেটার কপি রাখে, কিন্তু তারা ডেটা লেখার সুযোগ পায় না। যদি লিডার ব্রোকার অপ্রাপ্য হয়, তখন একটি ফলোয়ার নতুন লিডার হয়ে উঠতে পারে।
Replication Configuration
Kafka Broker-এ Replication কনফিগার করতে কিছু গুরুত্বপূর্ণ কনফিগারেশন প্যারামিটার রয়েছে।
1. replication.factor
এই প্যারামিটারটি একটি টপিকের জন্য কতোটা রিপ্লিকেশন প্রয়োজন তা নির্ধারণ করে। উদাহরণস্বরূপ, একটি টপিকের জন্য replication.factor=3 সেট করলে, এটি ৩টি ব্রোকারে ডেটা কপি করবে।
replication.factor=3
2. min.insync.replicas
এই কনফিগারেশন দ্বারা, আপনি নির্ধারণ করতে পারবেন যে, একটি মেসেজ সফলভাবে ডাটা লেখা হবে কি না, তার জন্য কমপক্ষে কতগুলো রিপ্লিকা (ফলোয়ার) সিঙ্ক থাকতে হবে।
min.insync.replicas=2
যদি এই প্যারামিটারটি 1 থেকে কম থাকে এবং কোনো ফলোয়ার ডাউন হয়ে যায়, তাহলে প্রডিউসার ডেটা লেখার অনুমতি পাবে না। এটি ডেটার স্থিতিস্থাপকতা এবং অখণ্ডতা নিশ্চিত করে।
3. unclean.leader.election.enable
এই কনফিগারেশনটি নির্ধারণ করে যে, ফলোয়ারদের মধ্যে লিডার নির্বাচিত করার সময় যদি কোনো ফলোয়ার সঠিকভাবে সিঙ্ক না হয়ে থাকে, তাহলে কি তাকে লিডার হিসেবে নির্বাচন করা যাবে।
unclean.leader.election.enable=false
এটি false থাকলে, কোনো ফলোয়ার যদি সঠিকভাবে সিঙ্ক না হয় তবে তাকে লিডার হিসেবে নির্বাচিত করা হবে না, ফলে ডেটার অখণ্ডতা বজায় থাকে।
Kafka Failover কনফিগারেশন
Kafka-তে failover কনফিগারেশন দ্বারা আপনি নিশ্চিত করেন যে, যদি একটি ব্রোকার ডাউন হয়ে যায়, তাহলে সিস্টেমটি অনবরত চলতে থাকে। Failover প্রক্রিয়া মূলত Leader election এর মাধ্যমে কাজ করে।
1. Leader Election
যখন কোনো ব্রোকারের লিডার পার্টিশন অপ্রাপ্য হয়ে যায়, তখন ZooKeeper অথবা Kafka’s internal election process একটি নতুন লিডার নির্বাচন করে। এই প্রক্রিয়াটি স্বয়ংক্রিয় এবং দ্রুত কাজ করে।
2. auto.leader.rebalance.enable
এই কনফিগারেশনটি যদি true থাকে, তবে কাফকা স্বয়ংক্রিয়ভাবে লিডার পার্টিশন পুনর্বিন্যাস করবে যখন কোনো লিডার ব্রোকার অপ্রাপ্য হয়।
auto.leader.rebalance.enable=true
3. replica.lag.time.max.ms
এই কনফিগারেশনটি একটি ফলোয়ার পার্টিশনের জন্য কতো সময় পর্যন্ত ডেটা লেগ করবে তা নির্ধারণ করে। এটি নির্ধারণ করে, কত সময় পর যদি ফলোয়ার পিছিয়ে থাকে, তবে তাকে পুনরায় লিডার নির্বাচন প্রক্রিয়ায় অন্তর্ভুক্ত করা হবে।
replica.lag.time.max.ms=10000
4. replica.fetch.max.bytes
এই প্যারামিটারটি ফলোয়ার ব্রোকারের জন্য, একে একে কতটুকু ডেটা ফেচ করা যাবে তা নির্ধারণ করে। এটি লিডার এবং ফলোয়ারের মধ্যে ডেটা স্থানান্তরের গতি এবং কার্যকারিতা নিয়ন্ত্রণ করে।
replica.fetch.max.bytes=1048576
Kafka Replication এবং Failover এর জন্য Best Practices
- Replication Factor: আপনি যত বেশি ব্রোকারে ডেটা রিপ্লিকেট করবেন, তত বেশি সিস্টেমের স্থিতিস্থাপকতা বাড়বে। তবে, replication.factor এর মান 너무 বেশি হলে সিস্টেমের সম্পদ অতিরিক্ত ব্যবহার হতে পারে।
- min.insync.replicas: গুরুত্বপূর্ণ টপিকের জন্য এই প্যারামিটারটি কমপক্ষে ২ বা ৩ রাখা উচিত, যাতে ডেটার সুরক্ষা এবং এক্সিকিউশন নিশ্চিত হয়।
- Monitoring and Alerts: ব্রোকারগুলোর অবস্থা এবং পার্টিশনগুলোর লিডারশিপ মনিটর করা গুরুত্বপূর্ণ। কোনো ফলোয়ার যদি সিঙ্ক না হয় বা লিডার পরিবর্তন হয়, তাহলে সতর্ক বার্তা গ্রহণ করা উচিত।
- Ensure Sufficient Brokers: আপনার ক্লাস্টারে পর্যাপ্ত ব্রোকার থাকতে হবে (কমপক্ষে ৩টি), যাতে আপনি failover সময় সমস্যায় পড়বেন না।
সারাংশ
Kafka-তে Replication এবং Failover কনফিগারেশন গুরুত্বপূর্ণ যাতে সিস্টেমটি স্থিতিস্থাপক এবং স্কেলেবল থাকে। Replication মাধ্যমে ডেটা বিভিন্ন ব্রোকারে কপি করা হয়, যাতে এক বা একাধিক ব্রোকারের ব্যর্থতার পরও ডেটা অক্ষুণ্ন থাকে। Failover নিশ্চিত করে যে, একটি ব্রোকার ব্যর্থ হলে অন্য একটি ব্রোকার স্বয়ংক্রিয়ভাবে লিডার হিসেবে নির্বাচন হয় এবং ডেটা লেখার প্রক্রিয়া অব্যাহত থাকে। যথাযথ কনফিগারেশন, যেমন replication.factor, min.insync.replicas, এবং auto.leader.rebalance.enable, কাফকা সিস্টেমের অখণ্ডতা এবং উচ্চ উপলব্ধতা নিশ্চিত করতে গুরুত্বপূর্ণ।
Read more