يُوزَّع HTTP Connector بموجب Confluent Enterprise License.
خطوات البدء السريع
1. اجمع بيانات الاتصال الخاصة بك
تتوفر تفاصيل خدمة ClickHouse Cloud الخاصة بك في ClickHouse Cloud console.
حدِّد خدمة ثم انقر على Connect:
اختر HTTPS. ستظهر تفاصيل الاتصال في مثال لأمر
curl.
إذا كنت تستخدم ClickHouse مُدارًا ذاتيًا، فسيُحدِّد مسؤول ClickHouse لديك تفاصيل الاتصال.
2. شغّل Kafka Connect وموصل HTTP Sink
-
مُدار ذاتيًا: نزّل حزمة Confluent وثبّتها محليًا. اتبع تعليمات التثبيت الخاصة بالموصل كما هو موثّق هنا.
إذا استخدمت طريقة التثبيت
confluent-hub، فسيتم تحديث ملفات الإعداد المحلية لديك. - Confluent Cloud: يتوفر إصدار مُدار بالكامل من HTTP Sink لمن يستخدمون Confluent Cloud لاستضافة Kafka. يتطلب ذلك أن تكون بيئة ClickHouse لديك قابلة للوصول من Confluent Cloud.
تستخدم الأمثلة التالية Confluent Cloud.
3. إنشاء جدول الوجهة في ClickHouse
4. تكوين 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- BASICAuth username- اسم مستخدم ClickHouseAuth password- كلمة مرور ClickHouse
هذا
HTTP Url عرضة لوقوع الأخطاء. تأكد من أن التحويلات الهروبية دقيقة لتجنب المشكلات.- الإعدادات
Input Kafka record value format- يعتمد ذلك على بيانات المصدر لديك، لكن في معظم الحالات يكون JSON أو Avro. نفترض استخدامJSONفي الإعدادات التالية.- في قسم
advanced configurations:HTTP Request Method- اضبطه على POSTRequest Body Format- jsonBatch batch size- وفقًا لتوصيات ClickHouse، اضبط هذا على 1000 على الأقل.Batch json as array- trueRetry on HTTP codes- 400-500، ولكن عدّله حسب الحاجة. على سبيل المثال، قد يتغير ذلك إذا كان لديك HTTP proxy أمام ClickHouse.Maximum Reties- القيمة الافتراضية (10) مناسبة، لكن لا تتردد في تعديلها للحصول على retries أكثر موثوقية.
5. اختبار الاتصال
وتحقق من أن الرسالة التي أنشأتها قد تمت كتابتها في مثيل ClickHouse لديك.
استكشاف الأخطاء وإصلاحها
لا يُجري HTTP Sink تجميعًا للرسائل على دفعات
لا يقوم موصل HTTP Sink بتجميع الطلبات على دفعات للرسائل التي تختلف قيم ترويسات Kafka فيها.
- تحقّق من أن سجلات Kafka لديك تستخدم المفتاح نفسه.
- عند إضافة معلمات إلى عنوان URL الخاص بواجهة برمجة تطبيقات HTTP، قد ينتج عن كل سجل عنوان URL فريد. ولهذا السبب، يُعطَّل التجميع على دفعات عند استخدام معلمات URL إضافية.
400 طلب غير صالح
CANNOT_PARSE_QUOTED_STRING
String:
input_format_json_read_objects_as_strings=1 في عنوان URL كسلسلة مُرمَّزة SETTINGS%20input_format_json_read_objects_as_strings%3D1
تحميل مجموعة بيانات GitHub (اختياري)
github في الأمثلة، ونستخدم kcat لإدراج الرسائل في Kafka.
1. تحضير الإعداد
http.api.url. تتطلب واجهة HTTP في ClickHouse ترميز عبارة INSERT كمعلَمة ضمن عنوان URL. ويجب أن يتضمن ذلك التنسيق (JSONEachRow في هذه الحالة) وقاعدة البيانات الهدف. كما يجب أن يكون التنسيق متوافقًا مع بيانات Kafka، التي ستُحوَّل إلى سلسلة نصية ضمن حمولة HTTP. ويجب أيضًا إجراء URL escaping لهذه المعلَمات. يوضّح المثال أدناه هذا التنسيق لمجموعة بيانات Github (على افتراض أنك تشغّل ClickHouse محليًا):
request.method- اضبطها على POSTretry.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.