অ্যাপাচি কাফকা (Apache Kafka) একটি উচ্চ পারফরম্যান্স স্ট্রিমিং প্ল্যাটফর্ম, যা মেসেজ পাসিং সিস্টেম হিসেবে কাজ করে। কাফকা মেসেজ প্রেরণ এবং গ্রহণের ক্ষেত্রে Acknowledgment (অ্যাকনলেজমেন্ট) এবং Delivery Semantics (ডেলিভারি সেম্যান্টিকস) এর ধারণাগুলি গুরুত্বপূর্ণ। এই দুটি ফিচার কাফকা সিস্টেমের নির্ভরযোগ্যতা, সঠিকতা, এবং পারফরম্যান্স নিশ্চিত করতে সাহায্য করে।
এই অধ্যায়ে আমরা কাফকা মেসেজ ডেলিভারি এবং Acknowledgment এবং Delivery Semantics এর বিভিন্ন ধরনের ধারণা এবং সেটিংস নিয়ে আলোচনা করবো।
Acknowledgment (অ্যাকনলেজমেন্ট) এর ধারণা
Acknowledgment বা অ্যাকনলেজমেন্ট হচ্ছে একটি নিশ্চিতকরণ প্রক্রিয়া, যার মাধ্যমে প্রযোজক (producer) এবং গ্রাহক (consumer) মেসেজ সফলভাবে প্রেরণ বা গ্রহণ হওয়ার পর নিশ্চিতকরণ পায়। এটি কাফকার মেসেজ ট্রান্সফার প্রক্রিয়ায় ব্যবহৃত হয় এবং ডেটার মেসেজ পাঠানো এবং গ্রহণের পরে সঠিকভাবে নিশ্চিতকরণ প্রদান করে।
কাফকায়, এই Acknowledgment প্রধানত প্রযোজক (producer) এবং কাফকা সার্ভার (broker) এর মধ্যে ঘটে।
১. Producer Acknowledgment
কাফকা প্রযোজক যখন একটি মেসেজ পাঠায়, তখন এটি নিশ্চিত করতে পারে যে মেসেজটি সফলভাবে ব্রোকারে প্রাপ্ত হয়েছে। এই প্রক্রিয়া Acknowledgment এর মাধ্যমে সম্পন্ন হয়। প্রযোজক বিভিন্ন acks কনফিগারেশন সেটিংস ব্যবহার করতে পারে, যা মেসেজ প্রেরণের নিশ্চিতকরণকে নির্ধারণ করে।
- acks=0: প্রযোজক মেসেজ পাঠানোর পর কোনো নিশ্চিতকরণ প্রত্যাশা করে না। ব্রোকারে সফলভাবে মেসেজ পৌঁছানোর পরেও প্রযোজক কিছু জানবে না। এটি সর্বাধিক দ্রুত কিন্তু কম নির্ভরযোগ্য।
- acks=1: প্রযোজক ব্রোকারের কাছ থেকে প্রথম নিশ্চিতকরণ চায়। অর্থাৎ, মেসেজ প্রথম ব্রোকারে পৌঁছানোর পর, ব্রোকার প্রযোজককে জানায়।
- acks=all (বা acks=-1): প্রযোজক তখনই নিশ্চিতকরণ পাবে যখন মেসেজটি ব্রোকারের সমস্ত রিপ্লিকা (replicas) এ পৌঁছাবে। এটি সর্বাধিক নির্ভরযোগ্য, কারণ যদি এক বা একাধিক রিপ্লিকা ব্যর্থ হয়, তবুও প্রযোজক নিশ্চিতকরণ পাবে।
acks=all
Delivery Semantics (ডেলিভারি সেম্যান্টিকস)
Delivery Semantics কাফকা ব্রোকার থেকে মেসেজ গ্রহণের পরে মেসেজ ডেলিভারি সম্পর্কে নিশ্চিতকরণের পদ্ধতি বা আচরণকে নির্দেশ করে। কাফকা তিনটি প্রধান ডেলিভারি সেম্যান্টিকস প্রদান করে:
- At-most-once (সর্বাধিক একবার)
- At-least-once (ন্যূনতম একবার)
- Exactly-once (ঠিক একবার)
১. At-most-once Semantics (সর্বাধিক একবার)
এটি হলো এমন একটি ডেলিভারি সেম্যান্টিকস যেখানে একটি মেসেজ সর্বোচ্চ একবার গ্রহণ করা হয়। যদি কোনো কারণে মেসেজ গ্রহণকারী ব্যর্থ হয় বা মেসেজ রিচিভ না হয়, তবে মেসেজটি আর পুনরায় পাঠানো হয় না। অর্থাৎ, যদি কোনো গ্রাহক একটি মেসেজ গ্রহণ করতে ব্যর্থ হয়, তবে সেই মেসেজটি বাদ দেয়া হবে এবং পুনরায় প্রেরণ করা হবে না।
উদাহরণ:
- প্রযোজক যখন acks=0 সেটিং ব্যবহার করে, তখন এটি at-most-once ডেলিভারি সেম্যান্টিকস প্রদান করবে।
২. At-least-once Semantics (ন্যূনতম একবার)
এটি হলো এমন একটি ডেলিভারি সেম্যান্টিকস যেখানে একটি মেসেজ ন্যূনতম একবার গ্রাহককে পৌঁছানো নিশ্চিত করা হয়। কখনো কখনো মেসেজটি একাধিকবার পাঠানো হতে পারে, তবে নিশ্চিত করা হয় যে মেসেজটি অন্তত একবার গ্রাহককে পৌঁছাবে। এর ফলে, মেসেজ ডুপ্লিকেট হতে পারে, কিন্তু কখনোই মেসেজ হারানো যাবে না।
উদাহরণ:
- যদি প্রযোজক acks=all এবং গ্রাহকটি auto-commit=false সেটিং ব্যবহার করে, তাহলে ডেলিভারি at-least-once হয়। কাফকা প্রতিটি মেসেজের সফল গ্রহণ নিশ্চিত করার জন্য গ্রাহকের কাছে acknowledgment পাঠায়।
৩. Exactly-once Semantics (ঠিক একবার)
এই সেম্যান্টিকসে, একটি মেসেজ সঠিকভাবে একবার এবং শুধুমাত্র একবার গ্রাহককে পৌঁছানো নিশ্চিত করা হয়। এটি কাফকায় একটি শক্তিশালী ফিচার, কারণ এটি মেসেজ ডুপ্লিকেট এবং হারানোর সমস্যা পুরোপুরি সমাধান করে। Exactly-once ডেলিভারি সেম্যান্টিকস সাধারণত রিয়েল-টাইম ডেটা প্রসেসিং এবং ইভেন্ট-ড্রিভেন আর্কিটেকচারে ব্যবহৃত হয়, যেখানে ডেটার একাধিক কপি প্রক্রিয়া করা প্রয়োজন।
উদাহরণ:
- কাফকা Kafka Streams API ব্যবহার করে বা transactional producer কনফিগারেশনের মাধ্যমে exactly-once semantics নিশ্চিত করতে পারে।
acks=all
producer.transactional.id=my-transactional-id
Acknowledgment এবং Delivery Semantics এর মধ্যে সম্পর্ক
- Acknowledgment প্রধানত প্রযোজক এবং কাফকা ব্রোকারের মধ্যে ঘটে, যেখানে প্রযোজক মেসেজ পাঠানোর পর কাফকা ব্রোকার থেকে নিশ্চিতকরণ আশা করে।
- Delivery Semantics ডেলিভারি নিশ্চিতকরণের সম্পর্কিত হয়, যেখানে গ্রাহক মেসেজ গ্রহণ করার পর ডেলিভারি সেম্যান্টিকসে অনুসারে মেসেজের স্ট্যাটাস নির্ধারিত হয়। এটি প্রযোজক এবং গ্রাহক উভয়ের জন্য প্রয়োজনীয় কনফিগারেশন ডিফাইন করে।
সারাংশ
কাফকা সিস্টেমে Acknowledgment এবং Delivery Semantics দুটি অত্যন্ত গুরুত্বপূর্ণ ধারণা। Acknowledgment প্রযোজক এবং ব্রোকারের মধ্যে মেসেজ পাঠানোর পর নিশ্চিতকরণ প্রক্রিয়া নির্ধারণ করে, যেখানে acks কনফিগারেশন সেটিংস ব্যবহার করে প্রযোজক কতটুকু নিশ্চিতকরণ পেতে চায় তা নির্ধারণ করা হয়। অন্যদিকে, Delivery Semantics মেসেজ ডেলিভারির নির্ভরযোগ্যতা এবং সঠিকতা নির্ধারণ করে। এর মধ্যে At-most-once, At-least-once, এবং Exactly-once ডেলিভারি সেম্যান্টিকস বিভিন্ন সিচুয়েশনে মেসেজ ডুপ্লিকেট এবং মেসেজ হারানোর সমস্যা এড়াতে সহায়ক হয়।
Read more