Apache Spark / المتقدم: التدفق والتشغيل القابل للتعافي / الدرس 13
زمن الحدث والعلامات المائية في التدفق
ابنِ نتائج نوافذ زمنية تزايدية مع التصريح بافتراضات التأخر واحتفاظ الحالة ونمط المخرج.
في هذه الصفحة
أهداف الدرس
- ميّز زمن وقوع الحدث وزمن معالجته وإيقاع التحفيز.
- اشرح تقدم العلامة المائية دون وعد بمهلة تأخر عامة.
يحتاج المدخل غير المحدود نموذجاً لتحديث النتيجة
يمثل Structured Streaming مدخلاً غير محدود بعمليات شبيهة بـDataFrame يعالجها Spark تزايدياً. يختلف نموذج الدفعات الصغيرة الافتراضي عن تكرار استعلام دفعي مستقل على كل الملفات. يجب أن يرتبط كل تقدم بموضع المصدر والحالة المحتفظ بها. يسجل event_time وقت رصد الإنتاج، وزمن المعالجة وقت التعامل معه، وقد يختلفان كثيراً بعد عودة العداد. اختر ساعة الأعمال قبل تجميع النوافذ، وحدد أثر وصول قراءة قديمة في المجموع المنشور. لا تلغي واجهة التدفق قواعد الهوية والاكتمال.
ضع العلامة على عمود زمن الحدث الذي تستخدمه القاعدة
يفترض المقطع علاقة أحداث متدفقة موجودة بعمود event_time زمني. يطلب تأخر علامة عشر دقائق ونوافذ مواقع خمس دقائق. يحدد موضع العلامة والعملية المدعومة قدرة Spark على تنظيف الحالة. المدد سياسة اصطناعية لا توصية لكل عداد. ويحتاج جمع المدخل المقبول سياسة سابقة لرفض الأوقات المعيبة أوغير المعقولة. فقد يشوه حساس يرسل وقتاً بعيداً مستقبلاً التقدم؛ لذا يلزم تحقق المصدر ومراقبة التشغيل بجانب تعريف النافذة.
from pyspark.sql import functions as F
windowed = (events.withWatermark('event_time', '10 minutes')
.groupBy('site_id', F.window('event_time', '5 minutes'))
.agg(F.sum('kwh').alias('total_kwh')))
خطة تحويل متدفق فقط؛ لا تبدأ استعلاماً ولا تحدد وجهة أوتثبت نشراً لمرة واحدة.
تتبع العلامة تقدم الأحداث المرصود
تُشتق العلامة من تقدم أوقات الأحداث المرصودة وتأخر مضبوط، وفق قواعد تحديث المحرك والعامل. يطرح الخط المحلي عشر دقائق من أقصى وقت12:20 لتوضيح حد مرشح12:10. ليس قيمة ملتقطة ولا ضمان تقدم فوري دقيق. توثق Spark ضمان تأخر أحادي الجانب للعمليات المؤهلة: لا تُسقط البيانات الحديثة بما يكفي، وقد تعالج الأقدم أوتسقطها. ليست العلامة وعد انتظار عشر دقائق من الساعة الفعلية، ولا دفتر تدقيق تلقائياً لكل قراءة مستبعدة.
maximum observed event time:12:20
configured delay:10 minutes
local candidate calculation:12:10
actual engine watermark:inspect authorized query progress
نموذج طرح وقت محلي؛ يعتمد تقدم العلامة وأهلية البيانات فعلياً على المحرك والعملية.
يحدد نمط المخرج التغييرات التي تصل للوجهة
تعرض Append وUpdate وComplete تغييرات مختلفة، ولكل عملية دعم محدد. قد ينتظر تجميع النافذة في Append تقدم العلامة لإثبات الاكتمال قبل إخراج الصف، بينما قد يراجع Update المجاميع. يجب أن يعرف المستهلك هل يستبدل الصف مجموعاً سابقاً أم يضيف مساهمة؛ فجمع كل تحديث يضاعف الطاقة. وقد يحفظ Complete حالة نتائج واسعة بتبعات تنظيف مختلفة. اختبر التأخر والدفعات الخالية وتوقف المصدر، ولا تعتبر قصر فترة التحفيز ضمان حداثة كاملة.
نمو الحالة إشارة صحة وسعة
للتجميع وإزالة التكرار والربط المتدفق قواعد احتفاظ ودعم خاصة. قد يؤثر مصدر خامل أومتحيز في تقدم العلامة، وتضيف المدخلات المتعددة سياسة علامة عالمية موثقة. راقب صفوف الحالة وذاكرتها ومدة الدفعة وتقدم الحدث معاً. لا تحذف نقطة تحقق أوتقصر التأخر لمجرد تصغير الحالة دون فهم السياسة. لا تبدأ الدورة تدفقاً أومصدر معدل أومقبساً أومخزن حالة؛ بل تتحقق من طرح الوقت المحلي فقط، وتفصله عن اختبار العلامات والتأخر على المحرك.
الأخطاء الشائعة وإصلاحها
تُعامل علامة عشر دقائق كانتظار عشر دقائق
- لماذا يحدث؟
- اختلط تقدم زمن الحدث بانتظار الساعة.
- كيف تصلحه؟
- افحص الأوقات المرصودة ودلالات علامة العملية.
- كيف تتجنب تكراره؟
- اختبر خمول المدخل والرصد المتأخر في مختبر مستقل.
تُجمع مجاميع النافذة المحدثة مراراً
- لماذا يحدث؟
- استُهلكت نتيجة استبدالية كحدث تراكمي.
- كيف تصلحه؟
- حدد مفتاح الوجهة ودلالات تحديث كل نافذة.
- كيف تتجنب تكراره؟
- طابق التصحيحات والدفعات المكررة صراحة.
تنمو الحالة رغم ضبط علامة مائية
- لماذا يحدث؟
- لا تسمح العملية أوالنمط أوتقدم الحدث بالتنظيف المتوقع.
- كيف تصلحه؟
- راجع موضع العلامة وقواعد الدعم وقياسات التقدم معاً.
- كيف تتجنب تكراره؟
- ضع ميزانية للحالة وافحص التقدم قبل تغيير الاحتفاظ.
اختبر فهمك
1. إذا بلغ أقصى وقت حدث مرصود 12:20 وكان التأخير المحدد عشر دقائق، فما القيمة المرشحة في نموذج الحساب المحلي؟
اعرض الحل المشروح
المرشح الحسابي هو 12:10. لا يثبت هذا الحساب أن العلامة المائية الفعلية في Spark قد وصلت بالفعل إلى ذلك الوقت؛ فما يزال توقيت تحديث المحرك وتقدم مصدر البيانات وقواعد عملية المعالجة المعنية مؤثراً. افحص بيانات تقدم الاستعلام في بيئة يحق لك الاطلاع عليها، واختبر سلوك البيانات المتأخرة المطلوب بصورة منفصلة.
2. لماذا قد يضاعف المستهلك نتيجة نافذة في Update؟
اعرض الحل المشروح
قد يضيف كل مجموع مراجع كطاقة جديدة. استخدم مفتاح الموقع والنافذة وطبّق بروتوكول الاستبدال أوالدمج الموثق. اختبر الإعادة والتصحيح المتأخر لا أول صف فقط.
أهم ما تعلمته
- تحدد العلامات سياسة حالة وتأخر زمن الحدث، لا ساعة تسليم عامة.
- يحتاج مخرج النافذة دلالات تحديث وجهة صريحة.