Apache Kafka / الأساسي: السجلات والأقسام وتقدم القارئ / الدرس 4
مجموعات المستهلكين والاستقصاء
استخدام مجموعات مستقلة واستقصاء محدود مع توضيح مسؤوليات الإسناد والمعالجة.
في هذه الصفحة
أهداف الدرس
- شرح أثر هوية المجموعة في التسليم والتقدم.
- تصميم حلقة استقصاء تراعي العمل البطيء وإعادة الإسناد.
المجموعة قارئ منطقي واحد
يتعاون المستهلكون التقليديون ذوو معرف المجموعة نفسه لقراءة أقسام الموضوع. تقرأ مجموعة ثانية التاريخ المحتفظ به باستقلال، بإسنادات ومواضع تثبيت خاصة بها. يتيح ذلك إسقاط تدقيق وآخر للإرسال دون إنتاج كل حدث مرتين. أما اشتراك التطبيقين عرضاً في المعرف فيقسم الأقسام بين تطبيقات غير متوافقة. المستهلك عامل مؤقت، بينما يمثل معرف المجموعة غرض معالجة أطول عمراً. اختره بعناية وضمّن حدود البيئة حتى لا يشارك قارئ تطوير عرضاً في إسناد مجموعة إنتاج. تغيير اسم المضيف وحده لا ينشئ قارئاً منطقياً مستقلاً.
تحليل الملكية المحدودة
يسند المثال المحلي ثلاثة أقسام إلى عاملين ويتحقق من وجود مالك واحد لكل قسم. يمثل نتيجة ممكنة لا تنفيذ خوارزمية إسناد Kafka ولا ضمان تساوي العمل. قد يستقبل القسم صفر أكثر من القسمين الآخرين معاً. تتغير الإسنادات مع العضوية، ويجب أن يتوقف العامل عن اعتبار الأقسام المسحوبة مسؤوليته. تختلف تفاصيل الإعداد والتنسيق بين البروتوكول التقليدي وبروتوكول إعادة التوازن الأحدث. يشرح المقرر دلالات المجموعات التقليدية مع توضيح الخصائص المرتبطة بالبروتوكول، دون افتراض تحكم إعداد نبض قديم في كل الأنماط.
assignment = {'worker-a': [0, 2], 'worker-b': [1]}
owned = [p for values in assignment.values() for p in values]
assert sorted(owned) == [0, 1, 2]
assert len(owned) == len(set(owned))
print(len(owned))
3
يفحص إسناداً معطى واحداً دون تشغيل تنسيق مجموعة.
الاستقصاء جزء من عقد الاستمرار
يجب أن تعود حلقة المستهلك إلى poll ضمن فترة المعالجة المطبقة. قد تتجاوز دفعة كبيرة تتبعها معالجة متزامنة بطيئة max.poll.interval.ms رغم استمرار العملية. لا تكون زيادة المهلة علاجاً إلا إذا كان للعمل حد أقصى مبرر ومحدود. قلل سجلات الاستقصاء أو اختصر العمل أو أوقف الأقسام مؤقتاً وفق قواعد العميل، أو صمم عمالاً محدودين مع الحفاظ على ملكية واجهة المستهلك. لا تتمتع KafkaConsumer عموماً بأمان الخيوط؛ واستدعاؤها عشوائياً من خيوط المنفذ ليس اختصاراً صحيحاً. تحتاج القراءة والمعالجة والتثبيت نموذج ملكية متسقاً.
قراءة جزء إعداد لحدود المعالجة
تختار الخصائص إسقاطاً مسمى وتحد عدد السجلات المعادة في poll واحدة. يقيد max.poll.records عدد السجلات المعادة، ولا يضمن ذاكرة جلب ثابتة أو زمناً ثابتاً للمعالجة. تختلف كلفة مئة عملية تحقق صغيرة عن مئة اتصال بعيد بطيء. يمنح تعطيل التثبيت التلقائي التطبيق مسؤولية تسجيل التقدم بأمان، لكنه لا ينفذها تلقائياً. وثق أسوأ مسار معالجة محتمل وما يحدث إذا سحبت الملكية مع بقاء عمل. لا يتضمن الجزء نقطة نهاية ولا ينفذ ضد وسيط.
group.id=lab-parcel-projection-v1
enable.auto.commit=false
max.poll.records=100
تحتاج حدود الاستقصاء والتثبيت اليدوي منطقاً تطبيقياً، ولا تثبت صحة الإقرار.
الاستعداد لإعادة الإسناد
إعادة التوازن حدث تنسيق متوقع عند انضمام أعضاء أو مغادرتهم أو تعطلهم وفق قواعد المجموعة. قبل فقدان القسم احصر العمل المكتمل ولا تثبت موضعاً يتجاوز سجلات غير منجزة. قد يحتاج الإلغاء تعاون الوجهة؛ فسحب الإسناد لا يلغي طلب HTTP أرسل بالفعل. استخدم هوية الحدث وسياسة تكرار لدى الوجهة للآثار الخارجية. راقب تواتر إعادة التوازن مع مدة المعالجة وتغير العضوية. قد تسبب إضافة المستهلكين اضطراباً مؤقتاً ولا تحل المفتاح الساخن وحدها. عدّ استقرار الملكية وحدود العمل جزءاً من صحة التطبيق، لا مجرد ضبط الإنتاجية.
الأخطاء الشائعة وإصلاحها
افتقاد تطبيقين بعض الأقسام.
- لماذا يحدث؟
- اشتراكهما عرضاً في معرف مجموعة واحد.
- كيف تصلحه؟
- امنح الإسقاطات المختلفة معرفات مستقلة بعد مراجعة إعادة التشغيل.
- كيف تتجنب تكراره؟
- أدرج هوية المجموعة في عقد التطبيق.
فقدان مستهلك مشغول إسناده مراراً.
- لماذا يحدث؟
- تجاوز تأخر المعالجة لفترة الاستقصاء المطبقة.
- كيف تصلحه؟
- حدد العمل لكل poll وراجع إعدادات البروتوكول المختار.
- كيف تتجنب تكراره؟
- قس مدة المعالجة وتواتر إعادة التوازن معاً.
تنافس خيوط متزامنة على KafkaConsumer واحدة.
- لماذا يحدث؟
- إهمال قواعد أمان الخيوط عند التوازي.
- كيف تصلحه؟
- احصر الاستدعاءات في المالك المحدد ونسق نتائج العمال.
- كيف تتجنب تكراره؟
- راجع الإلغاء والتثبيت والإسناد تصميماً واحداً.
اختبر فهمك
1. يجب أن يستقبل التدقيق والإرسال كل حدث طرد؛ هل يشتركان في مجموعة؟
اعرض الحل المشروح
استخدم معرفين لأنهما قارئان منطقيان مستقلان. تشترك نسخ التدقيق في مجموعته لتقسيم أقسامها، ونسخ الإرسال في أخرى. تحقق من سياسة نقطة البداية؛ فالمجموعة المستقلة لا تضمن الوصول لتاريخ أزالته سياسة الاحتفاظ.
2. لماذا قد تحدث مهلة معالجة رغم max.poll.records=100؟
اعرض الحل المشروح
لأن الخاصية تعد السجلات ولا تقيس كلفة التنفيذ. قد يستدعي سجل واحد تبعية بطيئة، وتتجاوز مئة مكالمة الفترة. حدد انتظار الاتصالات وقلل العمل وصمم معالجة الفشل. لا تبرر زيادة الفترة إلا بحدود واضحة وسلوك تعاف مقبول.
أهم ما تعلمته
- تحدد المجموعة غرض المعالجة، ويوفر الأعضاء سعة مؤقتة.
- تحمي حدود الاستقصاء ومعالجة الإسناد صحة العمل.