Apache Ecosystem

تسريع CDC: تحسين Kafka Connect باستخدام Debezium والتحويلات أحادية الرسالة

أصبحت التقاط البيانات المتغيرة (CDC) العمود الفقري للبيانات الحديثة، مما يتيح المزامنة في الوقت الفعلي بين قواعد البيانات التشغيلية وبحيرات التحليل. ومع ذلك، مع نمو أحجام البيانات، غالباً ما تصبح التكوينات الافتراضية لـ Apache Kafka Connect نقاط اختناق. اليوم، سنستكشف كيفية استخلاص أقصى أداء من خطوط أنابيب CDC الخاصة بك من خلال الاستفادة من التحويلات أحادية الرسالة (SMTs) وضبط موصلات Debezium بدقة.

نقطة الاختناق في التكوينات الافتراضية

في الوضع الافتراضي، يعطي Kafka Connect الأولوية للاستقرار على السرعة. في السيناريوهات عالية الإنتاجية—مثل معالجة ملايين الأحداث في الثانية الواحدة من مثيل PostgreSQL مزدحم—يمكن أن تؤدي أحجام المخزن المؤقت الافتراضية، وإعدادات الضغط، وعدد الخيوط إلى زيادة زمن الوصول والمنافسة على الموارد. وعلى الرغم من أن زيادة عدد المهام يساعد، إلا أنه لا يحل مشكلة الحمل المرتبط بمعالجة حمولات البيانات الكبيرة أو التعامل مع البيانات الوصفية بكفاءة.

هنا تصبح عملية التحسين حاسمة. من خلال ضبط معلمات JVM، وضبط المخازن المؤقتة الداخلية للموصل، واستخدام التحويلات أحادية الرسالة (SMTs) للتعامل مع تطور المخطط أو إخفاء البيانات، يمكنك تقليل بصمة وحدة المعالجة المركزية وعمليات الإدخال/الإخراج (I/O) لخط الأنابيب الخاص بك بشكل كبير.

الاستفادة من التحويلات أحادية الرسالة (SMTs)

تُعد التحويلات أحادية الرسالة ميزة قوية في Kafka Connect تتيح لك تعديل البيانات أو توجيهها أو إخفاءها على أساس كل سجل. وبدلاً من كتابة منطق مخصص أو الاعتماد على مستهلكي البيانات اللاحقة للتعامل مع التحويلات، تتيح لك SMTs إجراء هذه العمليات بكفاءة داخل الموصل نفسه.

أحد أكثر حالات الاستخدام شيوعاً هو إزالة البيانات الوصفية غير الضرورية أو إخفاء الحقول الحساسة قبل الكتابة إلى الموضوع. هذا لا يقلل من عرض النطاق الترددي للشبكة فحسب، بل يقلل أيضاً من تكاليف التخزين. على سبيل المثال، يمكنك استخدام تحويل ReplaceField لإسقاط أعمدة محددة يتم إنشاؤها ولكنها غير مطلوبة لطبقة التحليل الخاصة بك.

مثال عملي: إسقاط الحقول غير المرغوب فيها

إليك كيفية تكوين تحويل ReplaceField في خصائص موصل Debezium الخاص بك لاستخراج رؤوس Debezium الداخلية والحقول غير ذات الصلة:

transforms=dropHeaders,dropPayloads
transforms.dropHeaders.type=org.apache.kafka.connect.transforms.ReplaceField$Value
transforms.dropHeaders.blacklist=op,ts_ms,source,version
transforms.dropPayloads.type=org.apache.kafka.connect.transforms.ReplaceField$Value
transforms.dropPayloads.blacklist=internal_id,temp_flag

من خلال تطبيق هذه التحويلات، تضمن انتشار أحداث التغيير الأساسية فقط إلى الأنظمة اللاحقة مثل Kafka Streams أو Apache Flink، مما يقلل من حجم الحمولة ويحسن الإنتاجية.

ضبط خصائص Debezium و Kafka Connect

بeyond التحويلات أحادية الرسالة (SMTs)، يمكن للعديد من الخصائص الخاصة بالموصل أن تؤثر بشكل كبير على الأداء. تتحكم الخاصية max.batch.size في عدد الصفوف التي يتم جلبها في دورة استطلاع واحدة. يمكن أن يؤدي زيادة هذه القيمة إلى تقليل عدد الرحلات ذهاباً وإياباً إلى قاعدة البيانات، ولكن يجب موازنتها مع قيود الذاكرة. وبالمثل، تحدد الخاصية queue.max.poll.records في تكوين عميل Kafka Connect عدد السجلات التي يتم استردادها في كل حلقة استطلاع.

مجال حاسم آخر هو الضغط. يمكن أن يؤدي تمكين ضغط gzip أو snappy من جانب المنتج إلى تقليل عرض النطاق الترددي للشبكة بشكل كبير، على الرغم من أنه يضيف حمولة على وحدة المعالجة المركزية. بالنسبة لخطوط أنابيب CDC، حيث يكون عرض النطاق الترددي غالباً أكثر تكلفة من دورات وحدة المعالجة المركزية، فإن تمكين الضغط يكون إيجابياً في المجمل عادةً.

# Worker Configuration
max.block.ms=60000
num.io.threads=8
num.worker.threads=5

# Connector Configuration
max.batch.size=2048
max.queue.size=81920
heartbeat.interval.ms=10000

الخاتمة

لا يعد تحسين Kafka Connect لخطوط أنابيب CDC عالية الإنتاجية جهداً يناسب الجميع. فهو يتطلب فهماً عميقاً لخصائص بياناتك، وموارد الأجهزة، ومتطلبات زمن الوصول. من خلال الجمع بين التحويلات أحادية الرسالة (SMTs) الفعالة لتنقية البيانات مع معاملات موصل مضبوطة بدقة، يمكنك بناء خطوط أنابيب قوية وقابلة للتوسع تتعامل مع متطلبات التطبيقات الحديثة المعتمدة على البيانات. ابدأ من الأساس، وراقب مقاييسك، وكرر العملية—فأداء خط أنابيب البيانات الخاص بك لا يكون أفضل من أضعف تكوين فيه.

Share: