NATS ما يلي:
- نشر subject الرسائل أو الاشتراك فيها.
- معالجة الرسائل الجديدة عند توفرها.
إنشاء جدول
nats_url–host:port(على سبيل المثال،localhost:4222)..nats_subjects– قائمة بالـsubjectالتي يشترك فيها جدول NATS أو ينشر إليها. يدعمsubjectأحرف البدل مثلfoo.*.barأوbaz.>nats_format– تنسيق الرسالة. يستخدم الصياغة نفسها المستخدمة في دالة SQLFORMAT، مثلJSONEachRow. لمزيد من المعلومات، راجع قسم التنسيقات.
nats_schema– معلمة يجب استخدامها إذا كان التنسيق يتطلب تعريفschema. على سبيل المثال، يتطلب Cap’n Proto مسار ملفschemaواسم الكائن الجذرschema.capnp:Message.nats_stream– اسمstreamموجود في NATS JetStream.nats_consumer_name– اسم durable pull مستهلك موجود في NATS JetStream.nats_num_consumers– عدد الـمستهلكينلكل جدول. القيمة الافتراضية:1. حدِّد عددًا أكبر من الـمستهلكينإذا كان معدل النقل لمستهلك واحد غير كافٍ في NATS core فقط.nats_queue_group– اسم مجموعة queue لمشتركي NATS. القيمة الافتراضية هي اسم الجدول.nats_max_reconnect– مهمل وليس له أي تأثير، إذ تتم إعادة الاتصال بشكل دائم مع مهلةnats_reconnect_wait.nats_reconnect_wait– مقدار الوقت بالمللي ثانية للانتظار بين كل محاولة إعادة اتصال. القيمة الافتراضية:2000.nats_server_list- قائمة الخوادم الخاصة بالاتصال. يمكن تحديدها للاتصال بعنقود NATS.nats_skip_broken_messages- مدى تحمّل محلل رسائل NATS للرسائل غير المتوافقة معschemaلكلblock. القيمة الافتراضية:0. إذا كانnats_skip_broken_messages = Nفسيتخطى الـ engine عدد N من رسائل NATS التي يتعذر تحليلها (الرسالة الواحدة تعادل صفًا واحدًا من البيانات).nats_max_block_size- عدد الـrowالتي تجمعها عملية أو عملياتpollلتفريغ البيانات من NATS. القيمة الافتراضية: max_insert_block_size.nats_flush_interval_ms- مهلة تفريغ البيانات المقروءة من NATS. القيمة الافتراضية: stream_flush_interval_ms.nats_username- اسم مستخدم NATS.nats_password- كلمة مرور NATS.nats_token- رمز مصادقة NATS.nats_credential_file- مسار ملف بيانات اعتماد NATS.nats_startup_connect_tries- عدد محاولات الاتصال عند بدء التشغيل. القيمة الافتراضية:5.nats_max_rows_per_message— الحد الأقصى لعددrowsالمكتوبة في رسالة NATS واحدة للتنسيقات المعتمدة على الصفوف. (القيمة الافتراضية:1).nats_handle_error_mode— كيفية التعامل مع الأخطاء في NATS engine. القيم الممكنة: default (سيتم طرح الاستثناء إذا فشل تحليل رسالة)، stream (ستُحفَظ رسالة الاستثناء والرسالة الخام فيأعمدة افتراضية_errorو_raw_message).
nats_secure = 1.
يُتحكَّم في certificate verification بواسطة متغير البيئة CLICKHOUSE_NATS_TLS_SECURE;
إذا كانت الشهادة منتهية الصلاحية، أو موقَّعة ذاتيًا، أو مفقودة، أو غير صالحة لأي سبب آخر، فعطّل التحقق بتعيين CLICKHOUSE_NATS_TLS_SECURE=0.
الكتابة إلى جدول NATS:
إذا كان الجدول يقرأ من subject واحد فقط، فسيؤدي أي insert إلى النشر إلى subject نفسه.
أما إذا كان الجدول يقرأ من عدة subject، فنحتاج إلى تحديد subject الذي نريد النشر إليه.
لذلك، عند الإدراج في جدول يقرأ من عدة subject، يلزم تعيين stream_like_engine_insert_queue.
يمكنك اختيار أحد الـ subject التي يقرأ منها الجدول ونشر بياناتك إليها. على سبيل المثال:
الوصف
SELECT مفيدة كثيرًا لقراءة الرسائل (إلا لأغراض استكشاف الأخطاء وإصلاحها)، لأن كل رسالة لا يمكن قراءتها إلا مرة واحدة. والأكثر عملية هو إنشاء مسارات في الوقت الفعلي باستخدام العروض المادية. للقيام بذلك:
- استخدم المحرك لإنشاء مستهلك NATS واعتبره تدفق بيانات.
- أنشئ جدولًا بالبنية المطلوبة.
- أنشئ عرضًا ماديًا يحوّل البيانات من المحرك ويضعها في جدول أُنشئ مسبقًا.
MATERIALIZED VIEW بالمحرك، يبدأ في جمع البيانات في الخلفية. يتيح لك ذلك الاستمرار في تلقي الرسائل من NATS وتحويلها إلى التنسيق المطلوب باستخدام SELECT.
يمكن أن يحتوي جدول NATS واحد على أي عدد تريده من العروض المادية؛ فهي لا تقرأ البيانات من الجدول مباشرةً، بل تستقبل السجلات الجديدة (على شكل كتل)، وبهذه الطريقة يمكنك الكتابة إلى عدة جداول بمستويات مختلفة من التفصيل (مع التجميع وبدونه).
مثال:
ALTER، فنوصي بتعطيل العرض المادي لتجنّب حدوث اختلافات بين الجدول الهدف والبيانات الواردة من العرض.
الأعمدة الافتراضية
_subject- الـsubject لرسالة NATS. نوع البيانات:String.
nats_handle_error_mode='stream':
_raw_message- الرسالة الخام التي تعذّر تحليلها بنجاح. نوع البيانات:Nullable(String)._error- رسالة الاستثناء التي حدثت أثناء فشل التحليل. نوع البيانات:Nullable(String).
_raw_message و _error إلا عند حدوث استثناء أثناء التحليل، وتكون دائمًا NULL عندما يُحلَّلَت الرسالة بنجاح.
دعم تنسيقات البيانات
- بالنسبة إلى التنسيقات المعتمدة على الصفوف، يمكن التحكم في عدد الصفوف في رسالة NATS الواحدة عبر ضبط
nats_max_rows_per_message. - أما بالنسبة إلى التنسيقات المعتمدة على الكتل، فلا يمكن تقسيم الكتلة إلى أجزاء أصغر، لكن يمكن التحكم في عدد الصفوف في الكتلة الواحدة من خلال الإعداد العام max_block_size.
استخدام JetStream
nats، على سبيل المثال، من حزمة NATS CLI:
إنشاء stream
إنشاء stream
إنشاء durable pull مستهلك
إنشاء durable pull مستهلك