متطلبات مسار المعالجة
- يجب أن يكون اشتراك Pub/Sub المصدر موجودًا.
- يجب أن تكون الرسائل المنشورة إلى الاشتراك بتنسيق JSON صالح.
- يجب أن يكون جدول ClickHouse المستهدف موجودًا، وأن تتطابق أسماء أعمدته مع أسماء الحقول في حمولة JSON.
- يجب أن يكون مضيف ClickHouse متاحًا من أجهزة العامل في Dataflow.
- يجب توفير وجهة واحدة على الأقل للرسائل المتعذّرة (
clickHouseDeadLetterTableأوdeadLetterTopic). وإذا تم توفير كلتيهما، فسيتم توجيه الرسائل الفاشلة إلى الوجهتين كلتيهما في الوقت نفسه. - عند تعيين
clickHouseDeadLetterTable، يجب أن يكون جدول الرسائل المتعذّرة موجودًا مسبقًا في ClickHouse بالمخطط الموضّح في معالجة الرسائل المتعذّرة. - عند تعيين
deadLetterTopic، يجب أن يكون موضوع Pub/Sub موجودًا مسبقًا.
معلمات Template
يمكن العثور على القيم الافتراضية لجميع معلمات
ClickHouseIO في ClickHouseIO Apache Beam Connector.تنسيق الرسائل وتعيين المخطط
- يجلب مخطط جدول ClickHouse الهدف.
- يبني مخطط
Rowفي Beam انطلاقًا من مخطط ClickHouse هذا. - لكل رسالة Pub/Sub واردة، يحلّل حمولة JSON ويُنشئ صفًا بقراءة الحقول المسمّاة في مخطط ClickHouse.
تحويل الأنواع
التجميع على دفعات وتحديد النوافذ
يتيح لك ضبط هذه القيم الموازنة بين زمن الاستجابة وكفاءة الإدراج. فالنوافذ الأصغر تقلل زمن الاستجابة من البداية إلى النهاية، بينما تنتج النوافذ الأكبر دفعات
INSERT أقل عددًا وأكبر حجمًا.
معالجة الرسائل المتعذّرة
clickHouseDeadLetterTable أو deadLetterTopic؛ وإذا جرى تعيينهما معًا، فستُرسَل الرسائل الفاشلة إلى كليهما.
جدول الرسائل المتعذّرة في ClickHouse
clickHouseDeadLetterTable، يجب أن يكون جدول الرسائل المتعذّرة موجودًا مسبقًا بهذا المخطط الثابت:
تعريف مبسّط لعملية نشر بعقدة واحدة:
اضبط المحرك وبند
ORDER BY بما يناسب بيئة النشر لديك — استخدم ReplicatedMergeTree للجداول المكررة، وأضف ON CLUSTER لعمليات النشر الموزعة، وعدّل التقسيم أو TTL حسب الحاجة.موضوع Pub/Sub للرسائل المتعذّرة
deadLetterTopic، تُعاد كل رسالة فاشلة إلى الموضوع مع:
- الحمولة: بايتات الرسالة الأصلية.
- السمة
errorMessage: رسالة الاستثناء التي تم التقاطها وقت حدوث الفشل. - السمة
failedAt: الطابع الزمني لوقت المعالجة الذي فشل عنده الصف.
تشغيل القالب
احرص على مراجعة هذا المستند، ولا سيما الأقسام أعلاه، لفهم متطلبات إعداد القالب والمتطلبات المسبقة فهمًا كاملًا.
-
اضغط على الزر
CREATE JOB FROM TEMPLATE. - بعد فتح نموذج القالب، أدخل اسم المهمة وحدد المنطقة المطلوبة.
-
في حقل
Dataflow Template، اكتبClickHouseأوPub/Sub، ثم اختر قالبPub/Sub to ClickHouse. -
بعد تحديده، يتوسع النموذج. املأ ما يلي:
- اشتراك إدخال Pub/Sub، بالصيغة
projects/<PROJECT_ID>/subscriptions/<SUBSCRIPTION_NAME>. - عنوان URL لنقطة نهاية ClickHouse — ولاستخدام ClickHouse Cloud، استخدم
https://<HOST>:8443. - قاعدة بيانات ClickHouse، والجدول الهدف، واسم المستخدم وكلمة المرور.
- وجهة الرسائل المتعذّرة واحدة على الأقل: جدول ClickHouse أو topic في Pub/Sub (أو كلاهما).
- اشتراك إدخال Pub/Sub، بالصيغة
-
يمكنك اختياريًا تخصيص التجميع على دفعات (
windowSeconds,batchRowCount) ومعلمات ضبطClickHouseIO، كما هو موضح في قسم Template parameters.
راقب المهمة
PubSubToClickHouse، ويمكن الاطلاع عليها من صفحة مهمة Dataflow:
استكشاف الأخطاء وإصلاحها
خطأ تجاوز حد الذاكرة (الإجمالي) (الرمز 241)
- زيادة موارد المثيل: قم بترقية ClickHouse server إلى مثيل أكبر بذاكرة أكثر للتعامل مع حمل معالجة البيانات.
- تقليل حجم الدفعة: خفّض
batchRowCount(و/أوmaxInsertBlockSize) في إعدادات مهمة Dataflow لإرسال أجزاء أصغر من البيانات إلى ClickHouse، مما يقلّل استهلاك الذاكرة لكل دفعة.
جميع الرسائل تتجه إلى وجهة الرسائل المتعذّرة
- أسماء حقول JSON لا تتطابق تمامًا مع أسماء أعمدة ClickHouse (والتطابق هنا حساس لحالة الأحرف).
- يتعذر تحويل قيمة JSON إلى نوع العمود المطلوب (على سبيل المثال، سلسلة غير متوافقة مع ISO-8601 في عمود
DateTime). - تغيّر مخطط الجدول الهدف منذ بدء مسار المعالجة — إذ يُجلَب المخطط مرة واحدة فقط عند بدء التشغيل. أعد تشغيل المهمة بعد تطبيق تغييرات المخطط.
error_message وstack_trace في جدول ClickHouse الخاص بالرسائل المتعذّرة (أو السمة errorMessage في رسائل Pub/Sub المتعذّرة) لتحديد السبب الجذري.
يبدأ مسار المعالجة ولكن لا تصل أي صفوف إلى ClickHouse
- تأكَّد من أن الاشتراك يستقبل الرسائل — تحقّق من مقياس
messages-receivedفي صفحة مهمة Dataflow. - في الوضع المعتمد على الوقت (
windowSecondsفقط)، لا تُفرَّغ الصفوف إلا عند حدود النافذة. خفِّض قيمةwindowSecondsللتحقّق من حدوث عمليات التفريغ. - تحقّق من إمكانية الوصول الشبكي بين عمّال Dataflow ونقطة نهاية ClickHouse (
firewallأو VPC peering أو Private Service Connect).
الكود المصدري للقالب
GoogleCloudPlatform/DataflowTemplates— مستودع Google Cloud Platform الأصلي.ClickHouse/DataflowTemplates— النسخة المتفرعة الخاصة بـ ClickHouse.