অ্যাপাচি কাফকা (Apache Kafka) একটি জনপ্রিয় ডিস্ট্রিবিউটেড স্ট্রিমিং প্ল্যাটফর্ম যা উচ্চ-ভোলিউম ডেটা ট্রান্সফার এবং রিয়েল-টাইম ডেটা প্রসেসিংয়ের জন্য ব্যবহৃত হয়। কুবেরনেটিস (Kubernetes) একটি জনপ্রিয় কনটেইনার অরকেস্ট্রেশন প্ল্যাটফর্ম যা ডিস্ট্রিবিউটেড সিস্টেমগুলো সহজে পরিচালনা এবং স্কেল করতে সক্ষম। কুবেরনেটিসের মাধ্যমে কাফকা ক্লাস্টার তৈরি করার মাধ্যমে আপনি উচ্চ স্থায়িত্ব (high availability) এবং স্কেলেবিলিটি অর্জন করতে পারবেন।
এই টিউটোরিয়ালে আমরা কুবেরনেটিসে কাফকা ক্লাস্টার সেটআপ করার পদক্ষেপগুলো আলোচনা করব।
কুবেরনেটিসে কাফকা ক্লাস্টার তৈরি করার ধাপসমূহ
১. Kubernetes Cluster প্রস্তুতি
কুবেরনেটিস ক্লাস্টার প্রস্তুত করার প্রথম পদক্ষেপ হলো একটি কার্যকরী কুবেরনেটিস ক্লাস্টার স্থাপন করা। এটি একটি ক্লাউড প্রোভাইডার (যেমন, AWS, GCP, Azure) বা লোকাল মেশিন (যেমন, Minikube) ব্যবহার করে করা যেতে পারে। কুবেরনেটিস ক্লাস্টার সঠিকভাবে কনফিগার করা হলে, আপনি কাফকা ক্লাস্টার স্থাপন করতে পারবেন।
২. Kafka এবং Zookeeper ডিপ্লয়মেন্টের জন্য YAML ফাইল তৈরি
কাফকা একটি ZooKeeper নির্ভর সিস্টেম, তাই কুবেরনেটিসে কাফকা ক্লাস্টার স্থাপনের জন্য আপনাকে প্রথমে ZooKeeper কনটেইনার ডিপ্লয় করতে হবে। পরে, কাফকা কনটেইনার সেটআপ করতে হবে। নিচে দুটি YAML ফাইল দেওয়া হচ্ছে: একটির মাধ্যমে ZooKeeper এবং অপরটির মাধ্যমে কাফকা কনটেইনার ডিপ্লয় করা হবে।
ZooKeeper Deployment YAML (zookeeper-deployment.yaml)
apiVersion: apps/v1
kind: Deployment
metadata:
name: zookeeper
spec:
replicas: 3
selector:
matchLabels:
app: zookeeper
template:
metadata:
labels:
app: zookeeper
spec:
containers:
- name: zookeeper
image: wurstmeister/zookeeper:3.4.6
ports:
- containerPort: 2181
env:
- name: ZOOKEEPER_TICK_TIME
value: "2000"
- name: ZOOKEEPER_SYNC_LIMIT
value: "2"
---
apiVersion: v1
kind: Service
metadata:
name: zookeeper
spec:
ports:
- port: 2181
selector:
app: zookeeper
Kafka Deployment YAML (kafka-deployment.yaml)
apiVersion: apps/v1
kind: Deployment
metadata:
name: kafka
spec:
replicas: 3
selector:
matchLabels:
app: kafka
template:
metadata:
labels:
app: kafka
spec:
containers:
- name: kafka
image: wurstmeister/kafka:latest
ports:
- containerPort: 9093
env:
- name: KAFKA_ZOOKEEPER_CONNECT
value: "zookeeper:2181"
- name: KAFKA_ADVERTISED_LISTENERS
value: INSIDE-KAFKA://kafka:9093
- name: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
value: "INSIDE-KAFKA:PLAINTEXT"
- name: KAFKA_LISTENER_NAME_INSIDE-KAFKA
value: PLAINTEXT
- name: KAFKA_LISTENERS
value: INSIDE-KAFKA://kafka:9093
- name: KAFKA_LISTENER_PORT
value: "9093"
- name: KAFKA_LISTENER_SECURITY_PROTOCOL
value: PLAINTEXT
---
apiVersion: v1
kind: Service
metadata:
name: kafka
spec:
ports:
- port: 9093
selector:
app: kafka
৩. YAML ফাইল প্রয়োগ করা
ZooKeeper এবং Kafka কনফিগারেশন YAML ফাইল তৈরি করার পর, আপনাকে এই ফাইলগুলো কুবেরনেটিস ক্লাস্টারে প্রয়োগ করতে হবে। নিচের কমান্ডগুলো দিয়ে কুবেরনেটিস ক্লাস্টারে এই ডিপ্লয়মেন্ট ফাইলগুলো প্রয়োগ করতে পারবেন:
kubectl apply -f zookeeper-deployment.yaml
kubectl apply -f kafka-deployment.yaml
এই কমান্ডগুলির মাধ্যমে ZooKeeper এবং Kafka পড (Pod) কুবেরনেটিস ক্লাস্টারে ডিপ্লয় হবে।
৪. Kafka এবং ZooKeeper সেবা প্রকাশ করা
যেহেতু কাফকা এবং ZooKeeper পডগুলো ক্লাস্টারের মধ্যে চলবে, আপনাকে সেগুলোর জন্য একটি সেবা (Service) তৈরি করতে হবে, যাতে অন্য পড বা অ্যাপ্লিকেশন থেকে কাফকা এবং ZooKeeper এর সাথে যোগাযোগ করা যায়।
ZooKeeper এবং Kafka সেবাগুলি আগেই YAML ফাইলে নির্ধারিত আছে। তবে আপনি যদি ম্যানুয়ালি সেবাগুলোর জন্য kubectl expose কমান্ড ব্যবহার করতে চান, তাহলে নিচের মতো কমান্ড দিতে হবে:
kubectl expose pod zookeeper --name=zookeeper-service --port=2181 --target-port=2181 --type=ClusterIP
kubectl expose pod kafka --name=kafka-service --port=9093 --target-port=9093 --type=ClusterIP
৫. Kafka Cluster এবং পডের স্ট্যাটাস চেক করা
কাফকা এবং ZooKeeper পডগুলো ডিপ্লয় করার পর, আপনি তাদের স্ট্যাটাস চেক করতে পারেন:
kubectl get pods
এটি আপনার ডিপ্লয় করা সব পডের তথ্য দেখাবে। Kafka এবং ZooKeeper পডগুলো সফলভাবে চলতে শুরু করলে তাদের "Running" স্ট্যাটাস দেখাবে।
৬. Kafka Producer/Consumer অ্যাপ্লিকেশন তৈরি করা
কুবেরনেটিসে কাফকা ক্লাস্টার চালু হলে, আপনি কাফকা প্রডিউসার এবং কনজিউমার অ্যাপ্লিকেশন তৈরি করতে পারেন। কাফকা প্রডিউসার ডেটা তৈরি করবে এবং এটি কাফকা টপিকে পাঠাবে, আর কাফকা কনজিউমার সেই ডেটা গ্রহণ করবে এবং প্রক্রিয়া করবে।
আপনার প্রডিউসার এবং কনজিউমার অ্যাপ্লিকেশনটি কুবেরনেটিস পড হিসেবে ডিপ্লয় করতে হলে, আপনাকে একটি নতুন ডিপ্লয়মেন্ট YAML ফাইল তৈরি করতে হবে, যা আপনার কাফকা প্রডিউসার বা কনজিউমার কনফিগারেশন সম্বলিত থাকবে।
সারাংশ
কুবেরনেটিসে কাফকা ক্লাস্টার ডিপ্লয়মেন্ট অত্যন্ত সহজ এবং স্কেলযোগ্য। ZooKeeper এবং Kafka কনটেইনার/পড সেটআপ এবং কুবেরনেটিসে সেবা প্রকাশের মাধ্যমে আপনি একটি স্থিতিশীল এবং উচ্চ-ক্ষমতাসম্পন্ন কাফকা ক্লাস্টার তৈরি করতে পারবেন। এই কাফকা ক্লাস্টারটি রিয়েল-টাইম ডেটা স্ট্রীমিং এবং বিশ্লেষণের জন্য ব্যবহার করা যেতে পারে, যা ব্যবসায়িক সিদ্ধান্ত গ্রহণে সহায়তা করবে।
Read more