8 دقائق
Apache Kafka هي منصة مفتوحة المصدر وموزعة لبث الأحداث تعالج البيانات في الوقت الفعلي. تتفوق Kafka في دعم التطبيقات المعتمدة على الأحداث وبناء مسارات بيانات موثوقة، مما يوفر تسليم البيانات بزمن انتقال منخفض وإنتاجية عالية.
اليوم، تنتج مليارات المصادر البيانات باستمرار تدفقات من المعلومات، غالبًا في شكل أحداث؛ وهي هياكل بيانات أساسية تسجل أي وقوع في النظام أو البيئة.
عادةً ما يكون الحدث عبارة عن إجراء يؤدي إلى إجراء آخر كجزء من العملية. إن قيام العميل بتقديم طلب، أو اختيار مقعد على متن رحلة، أو إرسال نموذج تسجيل، كلها أمثلة على الأحداث. لا يجب أن يشتمل الحدث على شخص؛ فمثلاً، يُعد تقرير منظم حرارة متصل بدرجة الحرارة في وقت معين حدثًا أيضًا.
يوفر بث الأحداث فرصًا للتطبيقات للاستجابة فورًا للمعلومات الجديدة. تسمح منصات بيانات التدفق مثل Apache Kafka للمطورين ببناء أنظمة تستهلك البيانات وتعالجها وتتصرف بناءً عليها فور وصولها، مع الحفاظ على ترتيب وموثوقية كل حدث.
لقد تطورت Kafka لتصبح منصة بث الأحداث الأكثر استخدامًا على نطاق واسع، وهي قادرة على استيعاب ومعالجة تريليونات السجلات يوميًا دون أي تأخير ملموس في الأداء لدعم الأحجام القابلة للتطوير. تستخدم أكثر من 80% من شركات Fortune 500 منصة Kafka مثل Target و Microsoft و AirBnB و Netflix، لتقديم تجارب عملاء فورية قائمة على البيانات.
في عام 2011، طوّرت LinkedIn منصة Apache Kafka لتلبية حاجة الشركة المتزايدة لنظام ذي إنتاجية عالية وزمن انتقال منخفض، قادر على التعامل مع كميات هائلة من بيانات الأحداث في الوقت الفعلي. تم بناء Kafka باستخدام Java و Scala، ثم أصبحت لاحقًا مفتوحة المصدر وتم التبرع بها لمؤسسة Apache للبرمجيات.
بينما كانت المؤسسات تدعم أو تستخدم بالفعل أنظمة قائمة انتظار الرسائل التقليدية (مثل Amazon SQS من AWS)، قدمت Kafka بنية نظام مراسلة مختلفة جوهريًا.
على عكس قوائم انتظار الرسائل التقليدية التي تحذف الرسائل بعد استهلاكها، تحتفظ Kafka بالرسائل لمدة قابلة للتكوين، مما يتيح للعديد من المستهلكين قراءة نفس البيانات بشكل مستقل. تجعل هذه القدرة من Kafka مثالية للرسائل ومصادر الأحداث، ومعالجة البث، وبناء مسارات البيانات في الوقت الفعلي.
اليوم، أصبحت Kafka المعيار الفعلي لبث الأحداث في الوقت الفعلي. الصناعات التي تستخدم Kafka تشمل التمويل، والتجارة الإلكترونية والاتصالات والنقل، حيث تعد القدرة على التعامل مع كميات كبيرة من البيانات بسرعة وبشكل موثوق أمرًا ضروريًا.
Kafka عبارة عن منصة موزعة؛ تعمل كمجموعة تتحمل الأخطاء ومتاحة بدرجة عالية، ويمكن أن تمتد عبر خوادم متعددة وحتى مراكز بيانات متعددة.
تتمتع Kafka بثلاث قدرات أساسية:
يكتب المنتجون (التطبيقات أو المواضيع) سجلات إلى مواضيع تسمى "سجلات" تقوم بتخزين السجلات بترتيب حدوثها بالنسبة لبعضها البعض. تُقسم الموضوعات بعد ذلك إلى أقسام وتُوزع عبر مجموعة من وسطاء Kafka (الخوادم).
ضمن كل قسم، تحافظ Kafka على ترتيب السجلات وتخزنها بشكل دائم على القرص لمدة احتفاظ قابلة للتكوين. في حين أن الترتيب مضمون داخل القسم، إلا أنه ليس مضمونًا عبر الأقسام. بناء على احتياجات التطبيق، يمكن للمستهلكين القراءة بشكل مستقل من هذه الأقسام في الوقت الفعلي أو من إزاحة معينة.
تضمن Kafka الموثوقية من خلال تكرار القسم. يحتوي كل قسم على قائد (على وسيط واحد) ومتابع واحد أو أكثر (نسخ متماثلة) على وسطاء آخرين. يساعد هذا التكرار على تحمل فشل العقدة دون فقدان البيانات.
تاريخيًا، اعتمدت Kafka على Apache ZooKeeper، وهي خدمة تنسيق مركزية للوسطاء الموزعين. ضمنت ZooKeeper بقاء وسطاء Kafka متزامنين، حتى لو فشل بعض الوسطاء. في عام 2011، قدّمت Kafka وضع KRaft (بروتوكول Kafka Raft)، مما ألغى الحاجة إلى ZooKeeper من خلال دمج هذه المهام في وسطاء Kafka أنفسهم. يقلل هذا التحول من التبعيات الخارجية ويبسط البنية ويجعل مجموعات Kafka أكثر تحملاً للأخطاء وأسهل في الإدارة والتوسع.
يمكن للمطورين الاستفادة من قدرات Kafka من خلال أربع واجهات برمجة تطبيقات (APIs) أساسية:
تُتيح واجهة برمجة تطبيقات المُنتِج للتطبيق نشر بث إلى موضوع في Kafka. بعد كتابة سجل لموضوع، لا يمكن تغييره أو حذفه. بدلًا من ذلك، يظل في الموضوع لفترة زمنية تم تكوينها مسبقًا، لمدة يومين، أو حتى نفاد مساحة التخزين.
تتيح واجهة برمجة تطبيقات المستهلك للتطبيق الاشتراك في موضوع أو أكثر ومعالجة البث المخزَّن فيه. يمكنها العمل مع السجلات في الموضوع في الوقت الفعلي أو استيعاب ومعالجة السجلات السابقة.
تعتمد واجهة برمجة التطبيقات هذه على واجهتي برمجة تطبيقات المنتج والمستهلك، وتضيف إمكانات معالجة معقدة تمكّن التطبيق من إجراء معالجة مستمرة ومتكاملة للبث (من البداية إلى النهاية). تحديدًا، تتضمن واجهة برمجة تطبيقات عمليات البث استهلاك السجلات من موضوع واحد أو أكثر، وتحليلها أو تجميعها أو تحويلها حسب الحاجة، ونشر عمليات البث الناتجة إلى نفس المواضيع أو مواضيع أخرى.
بينما يمكن استخدام واجهات برمجة تطبيقات المنتج والمستهلك لمعالجة عمليات البث البسيطة، تتيح واجهة برمجة تطبيقات عمليات البث تطوير تطبيقات بث البيانات والأحداث الأكثر تعقيدًا.
تتيح واجهة برمجة التطبيقات هذه للمطورين بناء موصلات، وهي بمثابة منتجين أو مستهلكين قابلين لإعادة الاستخدام تعمل على تبسيط وأتمتة دمج مصدر بيانات في مجموعة Kafka.
يستخدم المطورون Kafka بشكل أساسي لإنشاء نوعين من التطبيقات:
تطبيقات مصممة خصيصًا لنقل ملايين وملايين السجلات أو البيانات بين أنظمة المؤسسة، على نطاق واسع وفي الوقت الفعلي. يجب أن تنقلها التطبيقات بشكل موثوق، دون مخاطر التلف، أو تكرار البيانات، أو غيرها من المشاكل التي تحدث عادة عند نقل كميات هائلة من البيانات بهذه السرعات العالية.
على سبيل المثال، تستخدم المؤسسات المالية Kafka لبث آلاف المعاملات في الثانية الواحدة عبر بوابات الدفع وخدمات الكشف عن الغش وأنظمة المحاسبة، مما يضمن بث البيانات بدقة وفي الوقت الفعلي دون تكرار أو تلف.
التطبيقات التي تعتمد على عمليات بث السجلات أو الأحداث وتولد عمليات بث خاصة بها. في عالمنا الرقمي، نواجه هذه التطبيقات كل يوم.
تشمل الأمثلة مواقع التجارة الإلكترونية التي تُحدِّث توفر المنتجات في الوقت الفعلي، أو المنصات التي تقدم محتوى وإعلانات مخصصة بناءً على نشاط المستخدم المباشر. تقود Kafka هذه التجارب من خلال بث تفاعلات المستخدم مباشرةً إلى محركات التحليلات والتوصيات.
تتكامل Kafka مع العديد من التقنيات الأخرى، والتي يُعد الكثير منها جزءًا من مؤسسة Apache للبرمجيات (ASF). تستخدم المؤسسات عادةً هذه التقنيات في البنى الكبيرة القائمة على الأحداث، أو معالجة عمليات البث، أو حلول تحليل البيانات الكبيرة.
بعض هذه التقنيات مفتوحة المصدر، بينما توفر Confluent، وهي منصة مبنية حول Kafka، ميزات على مستوى المؤسسات وخدمات مُدارة لمعالجة البيانات في الوقت الفعلي على نطاق واسع. شركات مثل IBM و Amazon Web Services وغيرها تقدم حلولًا قائمة على Kafka (مثل IBM Event Streams و Amazon Kinesis) التي تتكامل مع Kafka لبث الأحداث القابل للتوسع.
يتضمن نظام Apache Kafka البنائي ما يلي:
Apache Spark هو محرك تحليلات لمعالجة البيانات على نطاق واسع. يمكنك استخدام Spark لإجراء تحليلات على عمليات البث التي يقدمها Apache Kafka ولإنتاج تطبيقات معالجة البث في الوقت الفعلي، مثل تحليل النقرات.
Apache NiFi نظام إدارة بث البيانات مع واجهة مرئية بميزة السحب والوضع. نظرًا إلى أنه يمكن تشغيل Ni Fi كمنتج Kafka ومستهلك Kafka، فهي أداة مثالية لإدارة تحديات بث البيانات التي لا تستطيع Kafka معالجتها.
Apache Flink و محرك لإجراء عمليات حسابية واسعة النطاق على بث الأحداث بسرعة عالية وزمن انتقال منخفض باستمرار. Flink يمكنه استيعاب عمليات البث كمستهلك Kafka، وتنفيذ العمليات في الوقت الفعلي بناءً على عمليات البث هذه، ونشر النتائج لـ Kafka أو تطبيق آخر.
Apache Hadoop هو إطار عمل برمجي موزع يتيح لك تخزين كميات هائلة من البيانات في مجموعة من أجهزة الكمبيوتر لاستخدامها في تحليلات البيانات الكبيرة، والتعلم الآلي، وتنقيب البيانات، وغيرها من التطبيقات التي تعتمد على البيانات والتي تعالج البيانات المنظمة وغير المنظمة. عادةً ما تُستخدم Kafka لإنشاء مسار بيانات متدفق في الوقت الفعلي إلى مجموعة Hadoop.
Apache Camel هو إطار عمل تكامل مزود بمحرك توجيه ووساطة قائم على القواعد. يدعم Kafka كمكون، مما يتيح سهولة تكامل البيانات مع الأنظمة الأخرى (مثل قواعد البيانات، قوائم انتظار الرسائل)، وبالتالي السماح لـ Kafka بأن تصبح جزءًا من بنية أكبر تعتمد على الأحداث.
Apache Cassandra هو قاعدة بيانات NoSQL قابلة للتوسع بدرجة عالية مصممة للتعامل مع كميات كبيرة من البيانات عبر العديد من الخوادم التجارية دون أي نقطة فشل واحدة.
تُستخدم Kafka عادةً لبث البيانات إلى Cassandra من أجل استيعاب البيانات في الوقت الفعلي ولبناء تطبيقات قابلة للتوسع وتتحمل الأخطاء.
يعتبر RabbitMQ وسيط رسائل مفتوح المصدر وشائع يمكّن التطبيقات والأنظمة والخدمات من التواصل عن طريق ترجمة بروتوكولات المراسلة. بما أن Kafka بدأت كوسيط رسائل (ولا يزال بالإمكان استخدامها كذلك) و RabbitMQ يدعم نموذج المراسلة من نوع النشر/الاشتراك (من بين نماذج أخرى)، فغالباً ما تتم مقارنة Kafka و RabbitMQ كبديلين لبعضهما البعض. ومع ذلك، فإنها تخدم أغراضًا مختلفة وهي مصممة لمعالجة أنواع مختلفة من حالة الاستخدام. على سبيل المثال، يمكن أن تحتوي مواضيع Kafka على عدة مشتركين، بينما يمكن أن تحتوي كل رسالة من رسائل RabbitMQ على مشترك واحد فقط. بالإضافة إلى ذلك، فإن موضوعات Kafka دائمة، بينما يتم حذف رسائل RabbitMQ بمجرد استهلاكها.
عند الاختيار من بينهما، من الضروري مراعاة الاحتياجات المحددة لتطبيقك، مثل الإنتاجية ومتانة الرسائل وزمن الانتقال. Kafka تُعد مناسبة لبث الأحداث، بينما يتفوق RabbitMQ في السيناريوهات التي تتطلب توجيهًا مرنًا للرسائل ومعالجة بزمن انتقال قصير.
دمج Apache Kafka والذكاء الاصطناعي مفتوح المصدر يُحدث تحولاً في كيفية تعامل المؤسسات مع البيانات في الوقت الفعلي والذكاء الاصطناعي. عند دمجها مع أدوات الذكاء الاصطناعي مفتوحة المصدر، تُمكّن Kafka من تطبيق نماذج الذكاء الاصطناعي المُدربة مسبقًا على البيانات المباشرة، مما يدعم اتخاذ القرارات في الوقت الفعلي والأتمتة.
لقد جعل الذكاء الاصطناعي مفتوح المصدر الذكاء الاصطناعي أكثر سهولة، وتوفر Kafka البنية التحتية اللازمة لمعالجة البيانات في الوقت الفعلي. يلغي هذا الإعداد الحاجة إلى المعالجة الدفعية، مما يسمح للشركات بالتصرف بناءً على البيانات فور إنتاجها.
على سبيل المثال، قد تستخدم شركة للتجارة الإلكترونية Kafka لبث تفاعلات العملاء، مثل النقرات أو مشاهدات المنتجات، فور حدوثها. تقوم نماذج الذكاء الاصطناعي المدربة مسبقًا بمعالجة هذه البيانات في الوقت الفعلي، لتوفير توصيات مخصصة أو عروض مستهدفة. تُدير Kafka بث البيانات، بينما تتكيف نماذج الذكاء الاصطناعي بناءً على البيانات الواردة، مما يُحسِّن من مشاركة العملاء.
من خلال الجمع بين معالجة البيانات في الوقت الفعلي ونماذج الذكاء الاصطناعي، يمكن للمؤسسات اتخاذ قرارات أسرع في مجالات مثل الكشف عن الغش، الصيانة التنبؤية، أو التسعير الديناميكي، مما يتيح بناء أنظمة أكثر استجابة وكفاءة.