المتطلبات
- Java 11+ (لـ Flink 1.17+) أو 17+ (لـ Flink 2.0+)
- Apache Flink 1.17+
مصفوفة توافق إصدارات Flink
لم يُختبر هذا الموصل مع إصدارات Flink الأقدم من 1.17.2
التثبيت والإعداد
استيراده كتبعية
بالنسبة إلى Flink 2.0+
- Maven
- Gradle
- SBT
لإصدار Flink 1.17+
- Maven
- Gradle
- SBT
تنزيل ملف JAR الثنائي
flink_versionهو أحد الخيارين2.0.0أو1.17stable_versionهو رقم إصدار artifact مستقر
استخدام واجهة برمجة تطبيقات DataStream
مقتطف
- Java
مثال للبدء السريع
خيارات الاتصال بواجهة برمجة تطبيقات DataStream
خيارات عميل ClickHouse
يجب تمرير
options وserverSettings إلى العميل بصيغة Map<String, String>. وسيؤدي استخدام خريطة فارغة لأيٍّ منهما إلى استخدام الإعدادات الافتراضية للعميل أو الخادم، على الترتيب.
جميع خيارات عميل Java المتاحة مُدرجة في ClientConfigProperties.java وصفحة التوثيق هذه.جميع إعدادات جلسة الخادم المتاحة مُدرجة في صفحة التوثيق هذه.
- Java
خيارات الـ sink
AsyncSinkBase في Flink:
أنواع البيانات المدعومة
إدراج البيانات من Flink في ClickHouse
ملاحظات:
- يجب توفير
ZoneIdعند إجراء عمليات على التاريخ. - يجب توفير الدقة والمقياس عند إجراء عمليات على القيم العشرية.
- لكي يتمكن ClickHouse من تحليل
Stringفي Java على أنه JSON، يجب تمكينenableJsonSupportAsStringفيClickHouseClientConfig. - يتطلب الموصّل
ElementConvertorلربط العناصر فيDataStreamالمدخل بحمولات ClickHouse. ولهذا الغرض، يوفّر الموصّلClickHouseConvertorوPOJOConvertor، ويمكنك استخدامهما لتنفيذ هذا الربط باستخدام طرق التسلسل الخاصة بـDataWriterالمذكورة أعلاه.
تنسيقات الإدخال المدعومة
DataStream إلى ClickHouse حمولات، استخدم الدالة setClickHouseFormat. على سبيل المثال:
افتراضيًا، سيستخدم الموصل تنسيق RowBinaryWithDefaults أو RowBinary إذا ضُبطت القيمة
setSupportDefault في ClickHouseClientConfig صراحةً على true أو false، على الترتيب.المقاييس
القيود
- يوفّر sink حاليًا ضمان تسليم مرة واحدة على الأقل. ويجري تتبّع العمل لتحقيق exactly-once semantics هنا.
- لا يدعم sink بعدُ قائمة انتظار الرسائل الميتة (DLQ) لتخزين السجلات غير القابلة للمعالجة مؤقتًا. وحتى ذلك الحين، سيحاول الموصل إعادة إدراج السجلات التي تفشل، وسيتخلّص منها إذا لم ينجح ذلك. ويجري تتبّع هذه الميزة هنا.
- لا يدعم sink بعدُ الإنشاء عبر Table API الخاصة بـ Flink أو Flink SQL. ويجري تتبّع هذه الميزة هنا.
توافق إصدارات ClickHouse والأمان
- يُختبَر موصل مع مجموعة من إصدارات ClickHouse الحديثة، بما في ذلك latest وhead، عبر سير عمل CI يومي. وتُحدَّث الإصدارات المختبَرة دوريًا مع اعتماد إصدارات ClickHouse الجديدة. اطّلع هنا على الإصدارات التي يُختبَر موصل عليها يوميًا.
- راجع سياسة أمان ClickHouse للتعرّف على الثغرات الأمنية المعروفة وكيفية الإبلاغ عن أي ثغرة.
- نوصي بترقية موصل باستمرار حتى لا تفوتك الإصلاحات الأمنية والتحسينات الجديدة.
- إذا واجهت مشكلة في الترحيل، فيُرجى إنشاء issue على GitHub وسنرد عليك!
الاستخدام المتقدم والموصى به
- للحصول على أفضل أداء، تأكد من أن نوع العنصر في DataStream لديك ليس من النوع Generic - راجع هذا الشرح لتمييز الأنواع في Flink. فالعناصر غير العامة تتجنب كلفة التسلسل الإضافية التي يفرضها Kryo وتُحسّن معدل النقل إلى ClickHouse.
- نوصي بضبط
maxBatchSizeعلى 1000 كحد أدنى، ويفضَّل أن يكون بين 10,000 و100,000. راجع هذا الدليل حول عمليات الإدراج المجمّعة لمزيد من المعلومات. - لإجراء إزالة التكرار أو upsert إلى ClickHouse بأسلوب OLTP، راجع صفحة التوثيق هذه. ملاحظة: لا تخلط بين هذا وبين إزالة التكرار على مستوى الدُفعات التي تحدث عند إعادة المحاولة.
استكشاف الأخطاء وإصلاحها
CANNOT_READ_ALL_DATA
انخفاض معدل النقل
numRequestSubmitted وactualRecordsPerBatch للمساعدة في تحديد كيفية ضبط حجم الدفعة (maxBatchSize) وعدد مرات التفريغ. راجع أيضًا الاستخدام المتقدم والموصى به للاطلاع على توصيات بشأن حجم الدفعات.
هناك صفوف مفقودة في جدول ClickHouse الخاص بي
ClickHouseClientConfig.setNumberOfRetries()). ملاحظة: يحاول الموصل، افتراضيًا، إعادة إدراج الدفعة حتى 3 مرات قبل إسقاطها.
الحل: افحص سجلات TaskManager و/أو تتبّع المكدس لتحديد السبب الجذري.