Apache Kafka / المتوسط: العقود والأعطال وقابلية الرصد / الدرس 8
منع التكرار والمحاولات وهوية الحدث
فصل حماية إعادة إرسال المنتج عن تكرار التطبيق والنتائج التجارية غير المؤكدة.
في هذه الصفحة
أهداف الدرس
- وصف نطاق منع التكرار في المنتج.
- تصميم معالجة تكرار الأحداث عند الإعادة والمحاولات.
ليست كل النسخ المكررة من المصدر نفسه
قد يعيد المنتج طلب البروتوكول بعد نتيجة شبكة غير مؤكدة. وقد يستدعي التطبيق send مرتين للواقعة نفسها بسبب إعادة طلب HTTP أو استئناف عملية. يعالج منع التكرار في المنتج تسلسلات المحاولات المدعومة بهوية المنتج وأرقام التسلسل؛ ولا يزيل أحداث العمل المكررة لمجرد تطابق حمولاتها. تضيف إعادة قراءة المستهلك مساراً آخر للتكرار حتى إذا احتوى الموضوع سجلاً واحداً. سم الحالات منفصلة كي لا يعد الفريق بتنفيذ شامل مرة واحدة من خيار منتج واحد بينما تكرر الوجهة الفعل الخارجي.
جمع قيود المنتج المتوافقة
يفعل الجزء منع التكرار ويطلب إقرار النسخ المتزامنة كلها. توثق مكتبة Java قيوداً متوافقة للمحاولات وmax.in.flight.requests.per.connection؛ وقد تسبب الإعدادات الصريحة المتعارضة فشل التهيئة بدلاً من تقديم الضمان المقصود بصمت. لا تعطل قيود الترتيب سعياً للإنتاجية فقط. قد تختلف الافتراضيات والمجموعات المدعومة في العملاء غير Java؛ فاذكر التنفيذ الدقيق عند توثيق السلوك. ليست الأسطر برنامج عميل كاملاً ولم تنفذ؛ وتوضح أهمية مراجعة مجموعة الإعدادات بدلاً من خاصية معزولة في تطبيق مجهول.
enable.idempotence=true
acks=all
max.in.flight.requests.per.connection=5
تراجع قيود Java الموثقة مع المحاولات والإصدار؛ ولا يشغل منتج.
وضع الهوية حيث تنفذ الوجهة القاعدة
يجب أن تبقى هوية الحدث ثابتة عند إعادة إرسال الواقعة نفسها. تستطيع وجهة تحفظ الهوية والأثر ذرياً رفض تكرار الواقعة. الذرية أساسية؛ إذ يترك فحص مجموعة seen منفصلة قبل فعل بعيد نافذة تعطل وسباقاً. يجب أن تغطي مدة الاحتفاظ بإزالة التكرار أفق الإعادة المدعوم، وقد تحتاج الهوية نطاق المستأجر أو العملية. لا تكفي الحمولة المتساوية هويةً، فقد تتطابق بيانات مسحين مشروعين. وبالعكس يمنع إنشاء معرف عشوائي جديد لكل محاولة التعرف على إعادة الإرسال الحقيقية.
إظهار القاعدة المحلية
يعد النموذج كل معرف مرة واحدة ويتجاهل evt-1 المكرر. يوضح العدد التجاري المقصود في تنفيذ أحادي الخيط بالذاكرة. لا يثبت الذرية مع قاعدة بيانات أو مزود دفع، وتختفي مجموعة seen بنهاية العملية. في الوجهة الحقيقية يجب أن يجتمع قيد التفرد الدائم وتغير الحالة في معاملة مدعومة أو بروتوكول مكافئ. سجل نتيجة النسخة المكررة صراحة؛ فقد تكون نجاحاً سبق تطبيقه بدلاً من خطأ يسبب محاولات بلا نهاية. احتفظ بأدلة تميز إعادة الإرسال عن تصادم المعرفات.
event_ids = ['evt-1', 'evt-1', 'evt-2']
seen = set()
applied = 0
for event_id in event_ids:
if event_id not in seen:
seen.add(event_id)
applied += 1
assert applied == 2
print(applied)
2
النموذج غير دائم وغير متزامن وليس معاملة أثر خارجي.
تحديد المحاولات وحفظ النتائج غير المؤكدة
تحتاج سياسة المحاولة مدة قصوى وتراجعاً زمنياً وقراراً نهائياً. قد تضخم المحاولات المتزامنة السريعة مشكلة عابرة، وتسد المحاولات غير المحدودة قسماً إلى الأبد. افصل أخطاء الإعداد والتفويض عن أعطال النقل المؤقتة المحتملة. إذا انتهت المهلة بعد كتابة محتملة، فسجل عدم اليقين وصالح النتيجة بالهوية الأصلية، ولا تنشئ حدثاً جديداً لإخفائه. ضع الاختبارات قبل الإرسال وبعد قبول الوسيط وقبل الرد وبعد أثر الوجهة وقبل التثبيت. تثبت فحوص الهوية المحلية هنا المعالجة الحتمية للمعرفات المعطاة فقط.
الأخطاء الشائعة وإصلاحها
استمرار الأفعال التجارية المكررة بعد تفعيل منع التكرار.
- لماذا يحدث؟
- تكرار الواقعة في التطبيق أو إعادة القراءة.
- كيف تصلحه؟
- طبق هوية ثابتة عند حدود تنفيذ الأثر.
- كيف تتجنب تكراره؟
- وثق محاولة البروتوكول والمحاولة التجارية منفصلتين.
وجود علامة إزالة التكرار دون وقوع الأثر.
- لماذا يحدث؟
- حفظ العلامة والأثر بعمليتين منفصلتين.
- كيف تصلحه؟
- استخدم ذرية الوجهة أو بروتوكول مصالحة مراجعاً.
- كيف تتجنب تكراره؟
- اختبر التعطل قبل كتابة العلامة وبعدها.
إعادة طلب منتهي المهلة بمعرف جديد.
- لماذا يحدث؟
- اعتبار عدم اليقين دليلاً على عدم التنفيذ.
- كيف تصلحه؟
- صالح الواقعة أو أعدها بالهوية الأصلية.
- كيف تتجنب تكراره؟
- احفظ الهوية قبل إتاحة عملية قابلة للإعادة.
اختبر فهمك
1. لمسحين مستقلين حمولة متساوية؛ هل تزيل المساواة أحدهما؟
اعرض الحل المشروح
لا؛ فقد يكونان واقعتين مشروعتين منفصلتين. استخدم قاعدة هوية توافق الحدث التجاري وثبتها لإعادة إرسال الواقعة نفسها فقط. قد تفيد تجزئة المحتوى لكشف التصادم أو السلامة، لكنها لا تحدد تلقائياً قاعدة التفرد التجارية الصحيحة.
2. هل تثبت مجموعة seen المحلية الحماية بعد الاستئناف؟
اعرض الحل المشروح
لا؛ فهي متطايرة ومنفصلة عن الأثر الدائم. تفقدها إعادة التشغيل ولا يحاكي النموذج العمال المتزامنين. يتطلب الادعاء الفعلي تفرداً دائماً وتطبيق أثر ذرياً واحتفاظاً يغطي الإعادة، مع تحقق في بيئة مصرح بها.
أهم ما تعلمته
- لمنع التكرار في المنتج نطاق بروتوكول، لا نطاق تجاري مطلق.
- تحمي الهوية الثابتة ومعالجة الوجهة الذرية الآثار المعادة.