Skip to main content
إن موصل HTTP Sink لا يعتمد على نوع بيانات محدد، لذا لا يحتاج إلى مخطط Kafka، كما يدعم أنواع بيانات خاصة بـ ClickHouse مثل Maps وArrays. وتأتي هذه المرونة الإضافية مقابل زيادة طفيفة في تعقيد الإعداد. فيما يلي نشرح عملية تثبيت بسيطة، مع سحب الرسائل من topic واحد في Kafka وإدراج صفوف في جدول ClickHouse.
يُوزَّع HTTP Connector بموجب Confluent Enterprise License.

خطوات البدء السريع

1

اجمع تفاصيل الاتصال الخاصة بك

للاتصال بـ ClickHouse باستخدام HTTP(S)، تحتاج إلى المعلومات التالية:تتوفر تفاصيل خدمة ClickHouse Cloud الخاصة بك في ClickHouse Cloud console. حدِّد خدمة ثم انقر على Connect:
زر Connect لخدمة ClickHouse Cloud
اختر HTTPS. ستظهر تفاصيل الاتصال في مثال لأمر curl.
تفاصيل اتصال HTTPS لخدمة ClickHouse Cloud
إذا كنت تستخدم ClickHouse مُدارًا ذاتيًا، فسيُحدِّد مسؤول ClickHouse لديك تفاصيل الاتصال.
2

شغّل Kafka Connect وموصل HTTP sink

لديك خياران:
  • Self-managed: نزّل حزمة Confluent وثبّتها محليًا. اتبع تعليمات التثبيت الخاصة بتثبيت الموصل كما هو موثق هنا. إذا استخدمت طريقة التثبيت confluent-hub، فسيتم تحديث ملفات التكوين المحلية لديك.
  • Confluent Cloud: يتوفر إصدار مُدار بالكامل من HTTP Sink لمن يستخدمون Confluent Cloud لاستضافة Kafka لديهم. ويتطلب ذلك أن تكون بيئة ClickHouse الخاصة بك قابلة للوصول من Confluent Cloud.
تستخدم الأمثلة التالية Confluent Cloud.
3

أنشئ جدول الوجهة في ClickHouse

قبل اختبار الاتصال، لنبدأ بإنشاء جدول اختبار في ClickHouse Cloud. سيتلقى هذا الجدول البيانات من Kafka:
4

تكوين HTTP Sink

أنشئ Kafka topic ومثيلاً من موصل HTTP Sink:
كوّن موصل HTTP Sink:
  • أدخل اسم الـ topic الذي أنشأته
  • المصادقة
    • HTTP Url - عنوان URL الخاص بـ ClickHouse Cloud مع تحديد query من نوع INSERT بالشكل <protocol>://<clickhouse_host>:<clickhouse_port>?query=INSERT%20INTO%20<database>.<table>%20FORMAT%20JSONEachRow. ملاحظة: يجب ترميز الـ query.
    • Endpoint Authentication type - BASIC
    • Auth username - اسم مستخدم ClickHouse
    • Auth password - كلمة مرور ClickHouse
هذا HTTP Url عرضة لوقوع الأخطاء. تأكد من أن التحويلات الهروبية دقيقة لتجنب المشكلات.

  • الإعدادات
    • Input Kafka record value format - يعتمد ذلك على بيانات المصدر لديك، لكن في معظم الحالات يكون JSON أو Avro. نفترض استخدام JSON في الإعدادات التالية.
    • في قسم advanced configurations:
      • HTTP Request Method - اضبطه على POST
      • Request Body Format - json
      • Batch batch size - وفقًا لتوصيات ClickHouse، اضبط هذا على 1000 على الأقل.
      • Batch json as array - true
      • Retry on HTTP codes - 400-500، ولكن عدّله حسب الحاجة. على سبيل المثال، قد يتغير ذلك إذا كان لديك HTTP proxy أمام ClickHouse.
      • Maximum Reties - القيمة الافتراضية (10) مناسبة، لكن لا تتردد في تعديلها للحصول على retries أكثر موثوقية.
5

اختبار الاتصال

أنشئ رسالة في topic الذي أعددته لـ HTTP Sink
وتحقق من أن الرسالة التي أُنشئت قد كُتبت إلى مثيل ClickHouse الخاص بك.

استكشاف الأخطاء وإصلاحها

لا يُجري HTTP Sink تجميعًا للرسائل على دفعات

وفقًا لـ وثائق Sink:
لا يقوم موصل HTTP Sink بتجميع الطلبات على دفعات للرسائل التي تختلف قيم ترويسات Kafka فيها.
  1. تحقّق من أن سجلات Kafka لديك تستخدم المفتاح نفسه.
  2. عند إضافة معلمات إلى عنوان URL الخاص بواجهة برمجة تطبيقات HTTP، قد ينتج عن كل سجل عنوان URL فريد. ولهذا السبب، يُعطَّل التجميع على دفعات عند استخدام معلمات URL إضافية.

400 طلب غير صالح

CANNOT_PARSE_QUOTED_STRING
إذا تعذّر HTTP Sink وظهرت الرسالة التالية عند إدراج كائن JSON في عمود String:
اضبط الإعداد input_format_json_read_objects_as_strings=1 في عنوان URL كسلسلة مُرمَّزة SETTINGS%20input_format_json_read_objects_as_strings%3D1

تحميل مجموعة بيانات GitHub (اختياري)

لاحظ أن هذا المثال يحافظ على الحقول من النوع Array في مجموعة بيانات GitHub. نفترض أن لديك topic فارغًا باسم github في الأمثلة، ونستخدم kcat لإدراج الرسائل في Kafka.
1

تحضير الإعداد

اتبع هذه التعليمات لإعداد Connect بما يناسب نوع التثبيت لديك، مع الانتباه إلى الفروق بين عنقود standalone وعنقود موزّع. وإذا كنت تستخدم Confluent Cloud، فالإعداد الموزّع هو المقصود هنا.أهم معلَمة هي http.api.url. تتطلب واجهة HTTP في ClickHouse ترميز عبارة INSERT كمعلَمة ضمن عنوان URL. ويجب أن يتضمن ذلك التنسيق (JSONEachRow في هذه الحالة) وقاعدة البيانات الهدف. كما يجب أن يكون التنسيق متوافقًا مع بيانات Kafka، التي ستُحوَّل إلى سلسلة نصية ضمن حمولة HTTP. ويجب أيضًا إجراء URL escaping لهذه المعلَمات. يوضّح المثال أدناه هذا التنسيق لمجموعة بيانات Github (على افتراض أنك تشغّل ClickHouse محليًا):
تُعدّ المعلمات الإضافية التالية ذات صلة باستخدام HTTP Sink مع ClickHouse. يمكن العثور على قائمة كاملة بالمعلمات هنا:
  • request.method - اضبطها على POST
  • retry.on.status.codes - اضبطها على 400-500 لإعادة المحاولة عند أي رموز خطأ. حسّن هذا الإعداد بناءً على الأخطاء المتوقعة في البيانات.
  • request.body.format - في معظم الحالات، ستكون هذه القيمة JSON.
  • auth.type - اضبطها على BASIC إذا كنت تستخدم authentication مع ClickHouse. لا تتوفر حاليًا آليات authentication الأخرى المتوافقة مع ClickHouse.
  • ssl.enabled - اضبطها على true إذا كنت تستخدم SSL.
  • connection.user - اسم المستخدم لـ ClickHouse.
  • connection.password - كلمة المرور لـ ClickHouse.
  • batch.max.size - عدد الصفوف التي سيتم إرسالها في Batch واحد. تأكد من ضبطه على عدد كبير مناسب. ووفقًا لتوصيات ClickHouse، ينبغي اعتبار القيمة 1000 حدًا أدنى.
  • tasks.max - يتيح connector الخاص بـ HTTP Sink تشغيل task واحدة أو أكثر. ويمكن استخدام ذلك لتحسين الأداء. وإلى جانب حجم Batch، يُعد هذا الوسيلة الأساسية لتحسين الأداء.
  • key.converter - اضبطها وفقًا لـ types الخاصة بالمفاتيح لديك.
  • value.converter - اضبطها بناءً على نوع البيانات الموجودة في topic لديك. لا تحتاج هذه البيانات إلى schema. يجب أن يكون format هنا متسقًا مع FORMAT المحدد في المعلمة http.api.url. أبسط خيار هنا هو استخدام JSON وconverter ‏org.apache.kafka.connect.json.JsonConverter. ويمكن أيضًا التعامل مع value على أنها string عبر converter ‏org.apache.kafka.connect.storage.StringConverter، رغم أن ذلك سيتطلب من المستخدم استخراج value في statement الخاص بـ insert باستخدام functions. كما أن Avro format مدعوم أيضًا في ClickHouse عند استخدام converter ‏io.confluent.connect.avro.AvroConverter.
يمكن العثور على قائمة كاملة بالإعدادات، بما في ذلك كيفية تكوين proxy، وretries، وSSL المتقدم، هنا.يمكن العثور على example configuration files الخاصة ببيانات GitHub النموذجية هنا، على افتراض أن Connect يعمل في وضع standalone وأن Kafka مستضاف في Confluent Cloud.
2

إنشاء جدول ClickHouse

تأكد من إنشاء الجدول. يُعرض أدناه مثال لمجموعة بيانات GitHub مصغّرة تستخدم محرك MergeTree القياسي.
3

أضف البيانات إلى Kafka

أرسل رسائل إلى Kafka. نستخدم أدناه kcat لإرسال 10 آلاف رسالة.
يجب أن يؤكد استعلام بسيط على الجدول الهدف “Github” إدراج البيانات.
آخر تعديل في ٢٣ يوليو ٢٠٢٦