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

مکانیزم پاک‌سازی و Tombstones

در حالت فشرده‌سازی و پاکسازی تاپیک‌ها (cleanup.policy=compact)، Kafka نیاز دارد که حذف رکوردها را به شیوه‌ای ویژه مدیریت کند.
🔹 اگر رکوردهایی که کلاً حذف شده‌اند را بدون مکانیزم خاص پاک کنیم، کلاینت‌ها ممکن است متوجه حذف آن‌ها نشوند. مثلا یک مصرف کننده متوقف شده است و بعد از چند ساعت، مجددا اجرا می‌شود و در این میان ممکن است عملیات فشرده سازی تمام رکوردهای مرتبط با آن رکورد حذف شده را پاک کرده باشد و این مصرف کننده همان داده های قبلی خود را نگه دارد و به روز نشود. بنابراین ما به مکانیزمی به نام Tombstone نیاز داریم.


🧩 Tombstone چیست؟

Tombstone یک پیام ویژه با کلید مشخص و مقدار null است.

این پیام به Kafka می‌گوید:

“این کلید حذف شده است – تمام رکوردهای قدیمی‌تر با همان کلید را در هنگام فشرده‌سازی حذف کن.”

مثال:

# تولید رکورد معمولی
producer.send("users", key=b"user123", value=b"Alice")

# حذف رکورد با tombstone
producer.send("users", key=b"user123", value=None)

حالا لاگ به شکل زیر است:

OffsetKeyValue
۰user123Alice
۱user123null 🔥

🧠 عملکرد داخلی

  • رکورد با مقدار null بلافاصله حذف نمی‌شود.
  • Kafka آن را به عنوان علامت حذف (tombstone) نگه می‌دارد.
  • هنگام log compaction:
    • همه رکوردهای قدیمی با همان کلید حذف می‌شوند
    • خود tombstone مدتی نگه داشته می‌شود تا همه مصرف‌کننده‌ها از حذف مطلع شوند
    • سپس tombstone نیز حذف می‌شود (بر اساس log.cleaner.delete.retention.ms)

⏳ مدت زمان نگهداری Tombstone

تنظیمات:

log.cleaner.delete.retention.ms
پیش‌فرض: 86400000 ms = 24 ساعت

Tombstone تا ۲۴ ساعت نگه داشته می‌شود تا همه مصرف‌کننده‌ها زمان کافی برای پردازش حذف را داشته باشند.


💀 تولید و حذف رکوردها

رکورد معمولی:

producer.send("users", key=b"user123", value=b"Alice")
OffsetKeyValue
۰user123Alice

حذف رکورد (Tombstone):

producer.send("users", key=b"user123", value=None)
OffsetKeyValue
۰user123Alice
۱user123null 🔥

✅ Kafka tombstone را خودکار تولید نمی‌کند؛ تولیدکننده مسئول ارسال آن است.


⏳ چرخه عمر Tombstone

زمانعملیاتمحتوای لاگ Kafka
t=0(user1, Alice)user1 -> Alice
t=1(user2, Bob)user1 -> Alice, user2 -> Bob
t=2(user1, null)user1 -> Alice, user2 -> Bob, user1 -> null

پس از compaction:

KeyValue
user1null (tombstone)
user2Bob
  • Tombstone تا log.cleaner.delete.retention.ms نگه داشته می‌شود
  • سپس حذف می‌شود و تنها داده‌های باقی‌مانده، آخرین رکوردها هستند

💡 نکته عملی

عملیاتچیزی که تولیدکننده می‌فرستدرفتار Kafka
ایجاد / آپدیتKey + Valueاضافه شدن رکورد به لاگ
حذفKey + nullاضافه شدن tombstone و حذف نسخه‌های قدیمی هنگام compaction

🧪 مثال کارگاه عملی

# ایجاد تاپیک compacted
kafka-topics.sh --create \
  --bootstrap-server localhost:9092 \
  --topic users-demo \
  --config cleanup.policy=compact

# تولید رکوردها
kafka-console-producer.sh --broker-list localhost:9092 --topic users-demo \
  --property parse.key=true --property key.separator=:

user1:Alice
user2:Bob
user1:null

مشاهده با consumer:

kafka-console-consumer.sh --bootstrap-server localhost:9092 \
  --topic users-demo --from-beginning --property print.key=true --property print.value=true

خروجی اولیه:

user1    Alice
user2    Bob
user1    null

پس از compaction:

user2    Bob

🔹 جمع‌بندی

مفهومچه کسی تولید می‌کندهدف
Tombstone (مقدار null)Producerنشان‌دهنده حذف یک کلید
CompactionKafkaحذف رکوردهای قدیمی و نگهداری آخرین یا tombstone
log.cleaner.delete.retention.msتنظیمات Kafkaمدت زمان نگهداری tombstone قبل از حذف نهایی

فروشگاه
جستجو
دوره ها

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