بخش اول: مفاهیم پایه، معماری و Kafka Core
بخش دوم : سایر بازیگران اکوسیستم کافکا
بخش سوم ابزارهای جانبی کافکا : کانکت و رجیستری
بخش چهارم : پردازش جریان در عمل
بخش پنجم :‌ مباحث مدیریتی و تکمیلی

جلسه ۴: نحوه ذخیره‌سازی داده‌ها در کافکا – آشنایی با مفهوم سگمنت و سیاست‌های پاکسازی تاپیک

در جلسه چهارم، به عمق دنیای ذخیره‌سازی داده‌ها در کافکا می‌رویم. در این بخش می‌آموزیم که داده‌ها چگونه در سطح فایل‌های فیزیکی نگهداری می‌شوند، حالت‌های مختلف تولیدکننده (عادی، idempotent و تراکنشی) چه تأثیری بر ساختار پیام‌ها دارند، و چگونه سیاست‌های نگهداری و پاک‌سازی بر طول عمر داده‌ها اثر می‌گذارند.
در پایان جلسه، شرکت‌کنندگان با ابزارهایی مانند DumpLogSegments و kcat به‌صورت عملی محتوای فایل‌های لاگ، فرآیند فشرده‌سازی و حذف داده‌ها را بررسی خواهند کرد.


در این جلسه سرفصل‌های زیر را به صورت عملی با هم مرور خواهیم کرد.

۱. ساختار فیزیکی ذخیره‌سازی در کافکا

  • بررسی مفهوم پارتیشن به‌عنوان لاگ ترتیبی و ساختار پوشه‌ها در دیسک.
  • آشنایی با فایل‌های اصلی هر پارتیشن:
    • .log → داده‌های واقعی پیام‌ها
    • .index → نگاشت آفست‌ها به موقعیت بایت‌ها
    • .timeindex → نگاشت تایم‌استمپ‌ها برای جست‌وجوی زمانی
  • درک مفهوم سگمنت‌ها (بلوک‌های ۱GB یا ۷روزه) و نحوه چرخش آن‌ها.
  • کار عملی با DumpLogSegments برای مشاهده محتوای باینری فایل‌های لاگ.

۲. ذخیره‌سازی در حالت‌های مختلف تولیدکننده

  • حالت عادی: ذخیره‌سازی ساده پیام‌ها بدون اطلاعات اضافی.
  • حالت Idempotent:
    • افزودن producerId، producerEpoch و sequence برای جلوگیری از تکرار پیام.
    • تغییر ساختار batchها در فایل‌های لاگ.
  • حالت تراکنشی:
    • استفاده از transactional.id برای کنترل اتمی تولید پیام‌ها.
    • مشاهده فیلدهای تراکنشی در خروجی DumpLogSegments.

۳. تنظیمات کلیدی تاپیک‌ها و سیاست‌های نگهداری

  • تنظیمات سگمنت‌بندی:
    • log.segment.bytes (اندازه سگمنت‌ها)
    • log.roll.ms (زمان چرخش خودکار سگمنت‌ها)
  • سیاست‌های نگهداری (Retention):
    • بر اساس زمان (log.retention.ms) یا حجم (log.retention.bytes).
    • تفاوت میان retention.bytes (کل پارتیشن) و segment.bytes (هر سگمنت).
  • سیاست‌های پاک‌سازی:
    • delete → حذف سگمنت‌های قدیمی
    • compact → نگهداری آخرین پیام هر کلید
    • delete,compact → ترکیب هر دو حالت
  • تنظیم و تغییر پارامترها با ابزار kafka-configs.sh.

۴. مکانیزم پاک‌سازی و مفهوم Tombstone

  • فرآیند پاک‌سازی پس‌زمینه:
    • حذف دوره‌ای سگمنت‌ها (log.retention.check.interval.ms).
    • اجرای فرآیند فشرده‌سازی توسط LogCleaner.
  • Tombstone Records:
    • پیام‌هایی با value=null برای حذف منطقی رکوردها در تاپیک‌های فشرده‌شده.
    • نگهداری موقت Tombstoneها (log.cleaner.delete.retention.ms) تا مصرف‌کنندگان آن‌ها را پردازش کنند.

۵. تحلیل تاپیک داخلی __consumer_offsets

  • وظیفه: ذخیره‌ی آفست گروه‌های مصرف‌کننده جهت بازیابی در زمان خرابی.
  • ساختار داده:
    • Key: شامل group.id، topic، partition
    • Value: شامل offset، metadata، timestamp
  • سیاست نگهداری: cleanup.policy=compact برای حفظ آخرین وضعیت هر گروه.
  • مشاهده محتوا با kcat و تطبیق با خروجی kafka-consumer-groups.sh.
  • نقش کلیدی در تضمین تحویل exactly-once.

✅ نکات کلیدی و جمع‌بندی

  • داده‌ها در کافکا فقط افزوده می‌شوند و هرگز بازنویسی نمی‌شوند. فقط در حالت سیاست نگهداری با مکانیزم فشرده سازی، داده‌های قدیمی حذف و آخرین رکورد به ازای هر کلید، باقی می‌مانند.
  • Idempotency و تراکنش‌ها، ضامن یکپارچگی داده‌ها در سطوح مختلف تولید هستند.
  • Tombstone‌ها ابزار اصلی حذف منطقی رکوردها در تاپیک‌های فشرده‌شده‌اند.
  • تاپیک __consumer_offsets هسته‌ی مدیریت وضعیت مصرف‌کنندگان در کافکاست.
  • سیاست‌های retention و cleanup.policy مستقیماً بر طول عمر و حجم داده‌ها اثرگذارند.
فروشگاه
جستجو
دوره ها

لطفا کلمات کلیدی را وارد کنید