Apache Kafka একটি ডিস্ট্রিবিউটেড স্ট্রিমিং প্ল্যাটফর্ম, যা রিয়েল-টাইম ডেটা স্ট্রিমিং এবং প্রসেসিংয়ের জন্য ব্যবহৃত হয়। একটি Kafka Cluster একাধিক ব্রোকারের সমন্বয়ে গঠিত এবং এটি ডিস্ট্রিবিউটেড আর্কিটেকচার প্রদান করে, যার মাধ্যমে ডেটা উচ্চ স্থায়িত্ব (High Availability) এবং স্কেলেবিলিটি নিশ্চিত করা যায়। Kafka ক্লাস্টারে হাই এভেইলেবিলিটি কনফিগার করার মাধ্যমে সিস্টেমের স্থিতিস্থাপকতা এবং রিডান্ডেন্সি নিশ্চিত করা হয়, যাতে কোনও একক ব্রোকার বা নোডে সমস্যা হলে ক্লাস্টার সিস্টেম পুরোপুরি কাজ করতে থাকে।
এই লেখায় আমরা আলোচনা করবো কিভাবে Kafka Cluster কনফিগার করে হাই এভেইলেবিলিটি অর্জন করা যায়।
১. Kafka Cluster High Availability কী?
High Availability (HA) হল এমন একটি সিস্টেম ডিজাইন যা নির্ধারিত সময়ের মধ্যে সবচেয়ে কম Downtime নিশ্চিত করে। Kafka ক্লাস্টারের ক্ষেত্রে, হাই এভেইলেবিলিটি নিশ্চিত করার মানে হল:
- ডেটার রেপ্লিকেশন: Kafka তে ডেটার প্রতিলিপি বা রেপ্লিকা একাধিক ব্রোকারে সংরক্ষিত থাকে, যাতে কোনো ব্রোকার বা সার্ভারের ত্রুটি ঘটলে ডেটা হারানো না হয় এবং সিস্টেম চালু থাকে।
- ফেলওভার (Failover): যখন কোনও ব্রোকার বা নোড অপ্রত্যাশিতভাবে ডাউন হয়, তখন অন্য একটি ব্রোকার তা স্বয়ংক্রিয়ভাবে গ্রহণ করে এবং সিস্টেম পুনরুদ্ধার করা হয়।
Kafka ক্লাস্টারে হাই এভেইলেবিলিটি নিশ্চিত করার জন্য নিম্নলিখিত কনফিগারেশন প্রয়োজন।
২. Kafka Cluster Configuration for High Availability
২.১. Broker Replication Configuration
Kafka ক্লাস্টারে Partition Replication হাই এভেইলেবিলিটি নিশ্চিত করার অন্যতম গুরুত্বপূর্ণ দিক। প্রতিটি partition এর একটি বা একাধিক replica থাকতে হবে, যা বিভিন্ন ব্রোকারে সংরক্ষিত থাকবে। যদি একটি ব্রোকার ডাউন হয়, তখন অন্য ব্রোকার থেকে ডেটা পুনরুদ্ধার করা যাবে।
Replication Factor সেট করতে হবে যাতে প্রতিটি পাটিশনের একাধিক কপি থাকে। সাধারণভাবে, Replication Factor 3 রাখা হয়, যা তিনটি ব্রোকারে একাধিক কপি সংরক্ষণ করবে।
Replication Factor কনফিগারেশন:
server.propertiesফাইলেlog.replication.factorপ্যারামিটার দিয়ে রেপ্লিকেশন ফ্যাক্টর সেট করা হয়।log.replication.factor=3এখানে,
3এর মান হলো প্রতিটি partition এর ৩টি কপি থাকবে। সাধারণত, এটি ৩ রাখা হয়, কারণ একটি ব্রোকার ডাউন হলেও অন্য দুইটি ব্রোকার থেকে ডেটা সেবা দেওয়া যাবে।
২.২. Kafka Broker Configuration
Kafka ক্লাস্টারে হাই এভেইলেবিলিটি নিশ্চিত করতে, আপনাকে ব্রোকার কনফিগারেশনের মধ্যে নিম্নলিখিত গুরুত্বপূর্ণ সেটিংস করতে হবে:
broker.id:- প্রতিটি ব্রোকারের জন্য একটি অনন্য broker.id সেট করতে হবে। এটি ক্লাস্টারের মধ্যে ব্রোকারকে সনাক্ত করতে সাহায্য করে।
broker.id=1 # প্রতিটি ব্রোকারের জন্য আলাদা IDzookeeper.connect:- Kafka ক্লাস্টারকে Zookeeper দিয়ে পরিচালিত হয়। ক্লাস্টারের সব ব্রোকার Zookeeperের মাধ্যমে সমন্বিত হয়, এবং Zookeeper সিস্টেমের স্থিতিস্থাপকতা নিশ্চিত করে।
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181 # Zookeeper ক্লাস্টারের ঠিকানাlistenersএবংadvertised.listeners:- Kafka ব্রোকারে প্রাপ্ত HTTP কানেকশন এবং ক্লায়েন্টদের জন্য কনফিগারেশন করতে হবে।
listeners=PLAINTEXT://localhost:9092 advertised.listeners=PLAINTEXT://your-broker-ip:9092
২.৩. ZooKeeper Configuration
Kafka ক্লাস্টারটি Zookeeper ব্যবহার করে ক্লাস্টার ব্রোকারগুলোর অবস্থা ট্র্যাক করতে। Zookeeper ক্লাস্টারের জন্য একটি উচ্চ-স্থায়িত্ব এবং ডিস্ট্রিবিউটেড সিস্টেম হিসেবে কাজ করে। Zookeeper Ensemble তৈরি করা উচিত যাতে একটি সিঙ্গল পয়েন্ট অফ ফেলিওর (SPOF) না হয়।
Zookeeper Ensemble:
- কমপক্ষে ৩টি Zookeeper নোড ব্যবহার করা উচিত।
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181- Zookeeper Quorum:
- Zookeeper নোডের মধ্যে Quorum তৈরি করতে হবে, যাতে একাধিক নোড ডাউন হলেও সিস্টেম কাজ করে।
২.৪. Kafka Partitioning and Leader Election
Kafka ক্লাস্টারের মধ্যে partitioning এবং leader election একটি গুরুত্বপূর্ণ ভূমিকা পালন করে হাই এভেইলেবিলিটি নিশ্চিত করতে। প্রতি partition এর একটি leader থাকে এবং অন্যান্য followers থাকে। যখন কোনো leader ব্রোকার ডাউন হয়, তখন Zookeeper একটি নতুন leader নির্বাচন করে, এবং ডেটার অ্যাক্সেস বজায় থাকে।
Partitioning:
- প্রতিটি Kafka টপিকের জন্য partition তৈরি করতে হবে। বেশি partition থাকলে লোড ব্যালান্সিং এবং হাই এভেইলেবিলিটি আরও ভালোভাবে কাজ করবে।
num.partitions=6 # প্রতি টপিকের জন্য ৬টি partition- Leader Election:
- Kafka স্বয়ংক্রিয়ভাবে ফলোয়ার থেকে একটি নতুন leader নির্বাচন করে যখন পুরানো leader নোড ডাউন হয়।
২.৫. Kafka Producer and Consumer Configuration
Kafka প্রডিউসার এবং কনজিউমারগুলোর জন্য সঠিক কনফিগারেশন করতে হবে যাতে হাই এভেইলেবিলিটি নিশ্চিত হয়:
Producer Side Configuration:
acks=all # এই কনফিগারেশন দ্বারা সমস্ত replica থেকে acknowledgment আসা পর্যন্ত প্রডিউসার ডেটা পাঠায় retries=3 # প্রডিউসার ডেটা পাঠাতে ত্রুটি হলে ৩ বার পুনঃচেষ্টা করবেConsumer Side Configuration:
group.id=my-consumer-group auto.offset.reset=earliest # যদি ডেটার কোনো পয়েন্ট মিস হয়ে যায়, তবে প্রথম থেকে ডেটা পুনরায় প্রসেস করা হবে
৩. Kafka Cluster High Availability Benefits
Kafka ক্লাস্টারে হাই এভেইলেবিলিটি নিশ্চিত করার কিছু গুরুত্বপূর্ণ সুবিধা রয়েছে:
- Fault Tolerance: এক বা একাধিক ব্রোকার ডাউন হলেও, Kafka সিস্টেমের অন্য ব্রোকারগুলি ডেটা সংগ্রহ করতে এবং প্রক্রিয়া করতে সক্ষম থাকে।
- Data Reliability: ডেটার রেপ্লিকেশন এবং ফলোয়ার নির্বাচনের মাধ্যমে ডেটা সুরক্ষিত থাকে এবং হারানো যায় না।
- Seamless Failover: এক ব্রোকার ডাউন হলে স্বয়ংক্রিয়ভাবে অন্য ব্রোকার তা গ্রহণ করে, ফলে কোনো downtime থাকে না।
সারাংশ
Kafka ক্লাস্টারে হাই এভেইলেবিলিটি নিশ্চিত করার জন্য, ব্রোকার রেপ্লিকেশন, Zookeeper ক্লাস্টার, এবং সঠিক পার্টিশন কনফিগারেশন প্রয়োজন। ডেটার রেপ্লিকেশন ফ্যাক্টর ৩ রাখা, Zookeeper-এর মাধ্যমে ক্লাস্টারের স্থিতিস্থাপকতা নিশ্চিত করা, এবং প্রডিউসার ও কনজিউমার কনফিগারেশন সঠিকভাবে সেট করা হলে Kafka ক্লাস্টারটি উচ্চ-স্থায়িত্ব এবং ফল্ট টলারেন্ট হিসেবে কাজ করবে। এর ফলে Kafka সিস্টেমে কোনো ব্রোকার ডাউন হলেও ডেটা হারানো যাবে না এবং সিস্টেমটি কার্যক্রম চালু রাখতে পারবে।
Read more