প্রচলিত মেসেজ কিউ সিস্টেমে (যেমন JMS বা RabbitMQ) গ্রাহক বার্তা পড়ার পর বার্তাটি সাথে সাথে মুছে ফেলা হতো। কিন্তু ২০১১ সালে লিঙ্কডইনের জয় ক্রেপ্স, নেহা নারখেদে এবং জুন রাও উদ্ভাবন করেন অ্যাপাচি কাফকা (Apache Kafka)। ক্রেপ্সের বিখ্যাত প্রবন্ধ “দ্য লগ: হোয়াট এভরি সফটওয়্যার ইঞ্জিনিয়ার শুড নো অ্যাবাউট রিয়েল-টাইম ডেটা”-এর ওপর ভিত্তি করে কাফকা মেসেজ আদান-প্রদানকে একটি সম্পূর্ণ অপরিবর্তনীয়, ক্রমবিন্যস্ত ডিস্ট্রিবিউটেড কমিট লগ (Commit Log) হিসেবে পুনর্গঠন করে। লগের পার্টিশন শার্ডিং, অপারেটিং সিস্টেমের জিরো-কপি (Zero-Copy) টেকনোলজি এবং ইন-সিঙ্ক রেপ্লিকা (ISR) কোরামের সমন্বয়ে কাফকা আধুনিক এন্টারপ্রাইজ ইভেন্ট-ড্রিভেন আর্কিটেকচারের অবিসংবাদিত মানদণ্ডে পরিণত হয়েছে।

১. কমিট লগের বিমূর্ত রূপ ও অফসেট ($mathcal{O}$)

কাফকা টপিক মূলত একটি অ্যাপেন্ড-অনলি সিকোয়েনশিয়াল লগ ফাইল। প্রতিটি মেসেজের সাথে একটি অনন্য ক্রমিক পূর্ণসংখ্যা যুক্ত থাকে যাকে অফসেট (Offset) বলা হয়:

$$mathcal{L} = [ r_0, r_1, r_2, dots, r_k ]$$

কাফকা ব্রোকার নিজে কোনো গ্রাহকের স্টেট ট্র্যাক করে না। প্রতিটি কনজিউমার কেবল নিজের পঠিত অফসেটের অবস্থান সংরক্ষণ করে। এর ফলে একই টপিক থেকে শত শত মাইক্রোসার্ভিস নিজেদের সুবিধাজনক গতিতে স্বাধীনভাবে ডেটা পড়তে পারে, অতীতে ফিরে যেতে পারে (Replay), এমনকি ব্রোকারের র‍্যামের ওপর কোনো বাড়তি চাপ না ফেলেও টেরাবাইট পরিমাণ ঐতিহাসিক ডেটা বিশ্লেষণ করতে পারে।

২. ডিস্ক স্টোরেজ লেআউট ও স্পার্স ইনডেক্স

প্রতিটি কাফকা পার্টিশন ডিস্কে ধারাবাহিক সেগমেন্ট ফাইলে (Log Segments) বিভক্ত থাকে:

  • `.log` ফাইল: ডিস্কে সিকোয়েনশিয়ালি লিখে রাখা মূল বাইনারি ডেটা প্যাকেট।
  • `.index` ফাইল: একটি স্পার্স ইনডেক্স (Sparse Index) যা নির্দিষ্ট অফসেটের মেসেজটি ডিস্কের কত বাইট অবস্থানে আছে তার হিসাব রাখে।

ইনডেক্সটি ঘন না হয়ে স্পার্স (প্রতি ৪ কিলোবাইট অন্তর একটি এন্ট্রি) হওয়ায় সমগ্র ইনডেক্সটি অপারেটিং সিস্টেমের পেজ ক্যাশে (RAM) মেমোরি-ম্যাপড হয়ে থাকে। ফলে যেকোনো অফসেটের ডেটা মুহূর্তের মধ্যে বাইনারি সার্চ দিয়ে ডিস্ক থেকে খুঁজে বের করা যায়।

৩. কার্নেল অপ্টিমাইজেশন: জিরো-কপি (Zero-Copy I/O)

সাধারণ সার্ভার প্রোগ্রাম ডিস্ক থেকে ডেটা পড়ে নেটওয়ার্কে পাঠাতে গিয়ে ৪ বার কনটেক্সট সুইচ করে এবং র‍্যামের ভেতর দিয়ে ৩ বার ডেটা কপি করে, যা সিপিইউ-কে প্রচণ্ড ব্যস্ত রাখে। কাফকা লিনাক্স কার্নেলের `sendfile()` সিস্টেম কল ব্যবহার করে জিরো-কপি (Zero-Copy) প্রযুক্তি প্রয়োগ করে:

$$text{Disk} xrightarrow{text{DMA}} text{Pagecache} xrightarrow{text{DMA}} text{Network Card Buffer}$$

সিপিইউ-এর কোনো ধরনের হস্তক্ষেপ ছাড়াই ডিরেক্ট মেমোরি অ্যাক্সেস (DMA)-এর মাধ্যমে পেজক্যাশ থেকে ডেটা সরাসরি নেটওয়ার্ক কার্ডের বাফারে চলে যায়। ফলে কাফকার পারফরম্যান্স কেবল ফিজিক্যাল নেটওয়ার্ক কার্ডের ব্যান্ডউইথের ওপর নির্ভর করে—সিপিইউ কখনোই বাধা হয়ে দাঁড়ায় না।

৪. ইন-সিঙ্ক রেপ্লিকা (ISR) ও হাই ওয়াটারমার্ক (HW)

কাফকার প্রতিটি পার্টিশনের একজন লিডার এবং একাধিক ফলোয়ার থাকে। সমস্ত ফলোয়ারের উত্তরের জন্য অপেক্ষা না করে কাফকা ইন-সিঙ্ক রেপ্লিকা (ISR) নামক সক্রিয় নোডদের একটি তালিকা বজায় রাখে।

  • হাই ওয়াটারমার্ক (HW): ISR পুলে থাকা সমস্ত রেপ্লিকার মধ্যে সংরক্ষিত ডেটার সর্বনিম্ন সাধারণ অফসেট।

গ্রাহকরা কেবল হাই ওয়াটারমার্ক পর্যন্ত ডেটা দেখতে পায়। এর ফলে নিশ্চিত হয় যে কোনো কারণে বর্তমান লিডার নোড পুড়ে গেলেও কোনো ডেটা কখনোই হারিয়ে যাবে না।