Apache Kafka / الأساسي: السجلات والأقسام وتقدم القارئ / الدرس 6
الاحتفاظ والضغط الدلالي وعلامات الحذف
الاختيار بين التاريخ المحدود واستعادة الحالة بالمفتاح مع مراعاة التنظيف غير المتزامن.
في هذه الصفحة
أهداف الدرس
- التمييز بين احتفاظ الحذف وضغط السجل الدلالي.
- شرح علامات الحذف ذات القيمة null وحدود التعافي.
الاحتفاظ سياسة لإتاحة البيانات
يحتفظ Kafka بالسجلات مستقلاً عن قراءة مجموعة بعينها. تزيل سياسة delete مقاطع السجل القديمة وفق الزمن أو الحجم، مع خضوعها للجدولة وحدود المقاطع. لا تعد بمحو سجل في ميلي ثانية انتهاء محددة. يحتاج القارئ البطيء تغطية كافية للتعافي، ولا يحجز التثبيت البيانات إلى الأبد. حدد متطلب التاريخ التجاري وأطول تأخر تعاف متوقع. قد لا يصلح موضوع للنقل قصير الأجل مصدراً وحيداً لإعادة بناء ربع سنوية، حتى إذا بقي تأخر المستهلك العادي منخفضاً.
الضغط الدلالي يحتفظ بالحالة المفيدة
يزيل ضغط السجل الدلالي تدريجياً السجلات الأقدم للمفتاح مع إبقاء قيمة حديثة مفيدة لإعادة بناء الحالة. لا يحول الموضوع إلى قاعدة طلب واستجابة، ولا يضمن ظهور سجل واحد فقط لكل مفتاح في كل لحظة. قد يقرأ المستهلك نسخاً تاريخية متعددة قبل اكتمال التنظيف. تحتفظ السجلات بإزاحاتها الأصلية فتكون الفجوات طبيعية. يحتاج تعريف الحالة مفتاحاً ثابتاً؛ وإذا أخذ كل حدث مفتاحاً عشوائياً فلن تستبدل السجلات بعضها وفق الكيان المقصود، ولن ينتج الضغط إسقاط حالة الطرد المطلوب.
التمييز بين null والنص
يمثل سجل بمفتاح وقيمة null علامة حذف يستخدمها الضغط لإبلاغ الإزالة. أما بايتات النص null أو نص JSON الذي يحوي deleted:true فهي قيم غير فارغة عادية، ما لم يفسرها التطبيق إضافياً. يطبق الاشتقاق المحلي P17=accepted ثم P17=sorted ثم حذف null. تكون الخريطة النهائية فارغة مع بقاء ثلاثة أحداث في المدخلات. للسجل المضغوط الحقيقي جدولة تنظيف واحتفاظ بعلامات الحذف لا يحاكيها القاموس. يجب أن يرى قارئ إعادة البناء الحذف ضمن افتراضات التغطية الموثقة، لا أن يبدأ بلقطة قديمة كيفما اتفق.
history = [('P17', 'accepted'), ('P17', 'sorted'), ('P17', None)]
state = {}
for key, value in history:
if value is None:
state.pop(key, None)
else:
state[key] = value
assert state == {}
assert len(history) == 3
print(len(state))
0
تمثل None عقد القيمة null المعلن، دون تشغيل منظف أو وسيط.
مراجعة التنظيف المركب صراحة
توضح الخصائص موضوعاً لاستعادة الحالة الحالية بالمفتاح مع نافذة معلنة لرؤية علامات الحذف. ليست القيم إعدادات إنتاج عامة ولا أوامر إدارة. يمكن جمع compact وdelete، لكن الحذف الزمني أو الحجمي قد يزيل بيانات تتجاوز سلوك الاحتفاظ بالحالة لكل مفتاح. يجب أن تطابق السياسة متطلبات البناء والخصوصية معاً. تؤثر دورة المقاطع وحد التأخر الأدنى للضغط وسعة المنظف في توقيت التنظيف الفعلي. ولا تثبت زيادة إعداد احتفاظ واحد قابلية التعافي الشاملة، خصوصاً إذا كانت اللقطات أو إزاحات الموصلات أو المخططات أقصر صلاحية.
cleanup.policy=compact
delete.retention.ms=86400000
نافذة اليوم لعلامة الحذف اختيار اصطناعي يحتاج تحليل التعافي، وليست توصية لكل نشر.
اختبار قصة التعافي قبل اختيار التخزين
حدد لإسقاط حالة الطرود هل يعاد بناء الحالة الحالية أم كل انتقال تاريخي أم كليهما. يجيب موضوع الحالة المضغوط عن سؤال مختلف عن أرشيف التدقيق التجاري غير القابل للتغيير. اختبر بيانات تتضمن تحديثاً مكرراً وحذفاً ثم إعادة إنشاء للمفتاح نفسه. يجب تفسير الإنشاء الجديد وفق العقد، لا منعه إلى الأبد بسبب علامة حذف محلية قديمة. سجل أقصى عمر لقطة مدعوم وأقصى مدة إعادة تشغيل. تحدد هذه القيود إمكان رؤية التغييرات اللازمة، ولا تجيب إعدادات التنظيف وحدها عن سؤال العمل.
الأخطاء الشائعة وإصلاحها
توقع بقاء سجل واحد فوراً لكل مفتاح.
- لماذا يحدث؟
- اعتبار التنظيف غير المتزامن استبدالاً فورياً.
- كيف تصلحه؟
- اجعل المستهلك يعالج النسخ المتعددة وفق العقد.
- كيف تتجنب تكراره؟
- اختبر الإعادة قبل التنظيف وبعده منطقياً.
إرسال النص null على أنه حذف.
- لماذا يحدث؟
- الخلط بين النص المتسلسل وقيمة سجل null.
- كيف تصلحه؟
- استخدم تمثيل علامة الحذف الموثق لدى مسلسل العميل.
- كيف تتجنب تكراره؟
- اختبر البايتات ومعالجة null عند الطرفين.
فقدان لقطة قديمة لإشارة حذف.
- لماذا يحدث؟
- تجاوز البناء افتراضات مدة رؤية الحذف.
- كيف تصلحه؟
- أعد تقييم عمر اللقطة والتغطية المدعومين.
- كيف تتجنب تكراره؟
- وثق نوافذ اللقطات والاحتفاظ والإعادة معاً.
اختبر فهمك
1. هل يضمن موضوع حالة مضغوط تدقيقاً كاملاً لكل تغير؟
اعرض الحل المشروح
لا؛ فقد تزال القيم الأقدم للمفتاح. إذا وجب إتاحة كل انتقال، فصمم تاريخاً مناسب الاحتفاظ أو أرشيفاً مستقلاً بعقد تعاف خاص. استعادة الحالة الحالية والتدقيق التاريخي الكامل متطلبان مختلفان حتى إذا صدرا من أحداث المنتج نفسها.
2. إذا وصل P17=accepted جديد بعد الحذف، فماذا يفعل الاشتقاق المعلن؟
اعرض الحل المشروح
يعيد إنشاء P17 بقيمة accepted وفق عقد آخر تحديث البسيط. تفرض القائمة السوداء الدائمة قاعدة عمل مختلفة. قد تحتاج التطبيقات أجيال كيان لتمييز إعادة استخدام المعرف، لذا حدد جواز الإنشاء مجدداً بدلاً من استنتاجه من الضغط.
أهم ما تعلمته
- التنظيف غير متزامن وتقيده المقاطع ونوافذ التعافي.
- تختلف علامات الحذف عن القيم المتسلسلة غير الفارغة.