Apache Kafka / المتوسط: العقود والأعطال وقابلية الرصد / الدرس 10
السجلات المعطلة وموضوعات إعادة المحاولة
تصنيف فشل السجلات وحفظ أدلة التشخيص ومراجعة أثر توجيه المحاولات في الترتيب.
في هذه الصفحة
أهداف الدرس
- التمييز بين فشل تبعية عابر ومدخل غير صالح بصورة حتمية.
- تصميم عقود محدودة للمحاولة والعزل.
التشخيص قبل التكرار
يفشل السجل المعطل مراراً لأن بايتاته أو مخططه أو محتواه لا تقبل المعالجة وفق العقد الحالي. لا تصلح إعادة البايتات غير الصالحة فوراً المشكلة. يختلف ذلك عن تبعية غير متاحة مؤقتاً قد تنجح بعد تراجع محدود. صنف الأخطاء بسياق يكفي للتمييز دون تسريب الحمولة الحساسة. قد يحدث استثناء فك التسلسل قبل وصول السجل إلى المعالج التجاري، لذا يجب تصميم المسار عند حد العميل المناسب. لا تفترض وصول كل فشل إلى كتلة catch واحدة أو إمكان تجاوزه بأمان.
نقل الهوية الأصلية إلى غلاف المحاولة
موضوع المحاولات نمط تطبيقي، وليس ميزة عامة تلقائية في حلقة المستهلك الأساسية. ينبغي أن يحفظ غلافه هوية الحدث وإحداثيات المصدر، وعدداً محدوداً للمحاولات وفئة الفشل. تجنب نسخ بيانات الاعتماد أو تتبعات مكدس غير مقيدة إلى موضوع واسع القراءة. يحفظ مثال JSON الموقع الأصلي وعداداً واحداً. حدد معنى العداد: هل الواحد أول فشل أم أول إعادة؟ يتيح الاتفاق الثابت تمييز العمل المستنفد من حدث أخفق حديثاً دون التخمين من الأزمنة.
{"event_id":"evt-7","source":{"topic":"parcels","partition":0,"offset":17},"failed_attempts":1,"category":"temporary-dependency"}
يعد failed_attempts الإخفاقات المرصودة؛ ولا تنفذ البيانات تسليماً مؤجلاً.
توجيه المحاولات يغير التسلسل
يسمح نقل تحديث طرد فاشل إلى موضوع المحاولة ومتابعة القسم للأحداث اللاحقة بتجاوزه. قد يقبل ذلك في إشعارات مستقلة، لكنه يفسد انتقالات حالة تحتاج ترتيباً صارماً. يحافظ حجب القسم على تسلسل محلي أقوى بكلفة تعطيل مفاتيح غير مرتبطة في القسم نفسه. تشمل البدائل حجباً حسب المفتاح أو قواعد إصدار بالوجهة أو إعادة تصميم العقد، ولكل تعقيد. تحتاج المحاولة المؤجلة أيضاً مجدولاً أو منطق مستهلك؛ فلا يؤخر الوسيط التسليم لمجرد وجود طابع زمني مستقبلي في السجل.
تحديد جدول محدود صراحة
يحسب الجدول المحلي ثلاثة تأخيرات اصطناعية بسقف ثابت. يوضح سياسة منتهية دون نوم أو اتصال بوسيط أو اختبار حمل. قد تضيف الأنظمة الحقيقية تفاوتاً عشوائياً لتجنب الدفقات المتزامنة، لكن الاختبارات الحتمية تحتاج مصدراً عشوائياً مضبوطاً. سقف التأخير الواحد ليس سقف مدة المحاولات الإجمالية؛ أضف زمن المعالجة والانتظارات السابقة عند فحص المهلة التجارية. حدد نتيجة استنفاد الميزانية: عزل أو تعويض أو حالة فشل صريحة. المحاولة اللانهائية سياسة أيضاً، لكنها تمنع غالباً ادعاء تعاف محدود.
delays_s = [min(2 ** attempt, 8) for attempt in range(3)]
assert delays_s == [1, 2, 4]
assert sum(delays_s) == 7
print(delays_s, sum(delays_s))
[1, 2, 4] 7
تمثل السبع ثوان الانتظار وحده؛ ولا يشمل الحساب المعالجة والنقل.
عدم فقد السجل أثناء نقله
إذا ثبت المستهلك موضع المصدر قبل قبول سجل المحاولة بأمان، فقد يفقد النقل عند التعطل. وإذا نشر ثم تعطل قبل التثبيت، فقد يتكرر النقل. تستطيع معاملات Kafka ربط مخرجات Kafka بإزاحات القراءة ضمن حدودها المدعومة؛ وإلا يلزم بروتوكول نقل مراجع يتحمل التكرار. لا ينهي العزل المسؤولية؛ حدد من يراجع السجلات وكيف تصرح التصحيحات وكيف تمنع الإعادة أثراً ثانياً. احص الهويات الأصلية عبر النجاح والمحاولة والحالة النهائية، واختبر التعطل بين النشر وتسجيل التقدم.
الأخطاء الشائعة وإصلاحها
سجل تالف يسبب حلقة محاولات سريعة بلا نهاية.
- لماذا يحدث؟
- تصنيف المدخل غير الصالح الحتمي عطلاً عابراً.
- كيف تصلحه؟
- طبق مساراً نهائياً مراجعاً يحفظ هوية المصدر.
- كيف تتجنب تكراره؟
- اختبر البايتات التالفة والمخططات غير المدعومة منفصلة.
تجاوز تحديثات الطرد اللاحقة تحديثاً معاداً.
- لماذا يحدث؟
- تغيير توجيه المحاولة لحد الترتيب.
- كيف تصلحه؟
- اختر سياسة ترتيب مفاتيح تناسب الانتقالات التجارية.
- كيف تتجنب تكراره؟
- أدرج سيناريوهات التجاوز في مراجعة المحاولة.
اختفاء سجل بين المصدر والعزل.
- لماذا يحدث؟
- تثبيت تقدم المصدر قبل النقل الآمن.
- كيف تصلحه؟
- استخدم نقلاً ذرياً مدعوماً أو بروتوكولاً يتحمل التكرار.
- كيف تتجنب تكراره؟
- اختبر التعطل حول حدود النشر والتثبيت.
اختبر فهمك
1. هل يجعل طابع زمني بعد ساعة المستهلك العادي ينتظر ساعة؟
اعرض الحل المشروح
لا؛ فالطابع الزمني بيانات وصفية وليس تعليمة عامة لجدولة التسليم. تحتاج المحاولة المؤجلة جدولة أو منطق قارئ وسياسة ترتيب مدروسة، مع شرح أمان إزاحة المصدر ونشر المحاولة والأثر النهائي عبر التعطل والتكرار.
2. لماذا قد يحوي موضوع العزل نسخاً مكررة من الحدث الأصلي؟
اعرض الحل المشروح
قد تتكرر خطوتا النشر للعزل وتثبيت المصدر بعد التعطل ما لم تربطا ذرياً. وقد تعيد إخفاقات أو منتجون إرسال الواقعة. احتفظ بالهوية واجعل أدوات المراجعة والإعادة واعية بالتكرار، دون افتراض أن كل سجل عزل يمثل فشلاً تجارياً فريداً.
أهم ما تعلمته
- تغير المحاولة الزمن والترتيب والمسؤولية معاً.
- يحفظ المسار النهائي الآمن الهوية ويحدد مسؤول المراجعة.