VOL50: Introduction to Apache Kafka - A Beginner’s Guide
أهلًا وسهلا بكم في العدد الخمسين من النشرة الأسبوعية لاقرأ-تِك 🚀
لا تنسوا أهلنا من صالح الدعاء,اللهم إنّا استودعناك اياهم، اللهم كُن عوناً لهم، اللهم انصرهم واحفظهم. 🇵🇸
أهلًا وسهلا بكم في العدد الخمسين من النشرة الأسبوعية لاقرأ-تِك 🚀
سواء كنت مهندس برمجيات مبتدئ أو محترف، فنشرتنا هدفها انها تثري المحتوى التقني العربي سعيا للتطوير من جودة المحتوى باللغة العربية، من خلال تقديم أحدث المستجدات والتطورات في عالم البرمجيات، بالإضافة إلى أفضل الممارسات والنصائح القيمة، ونشر أحدث المقالات وترشيحات الكتب ومحتوى ورقة وقلم اللي بينزلوا بشكل مستمر في موقع اقرأ-تِك.
في الإصدار ده الفهرس هيكون كالآتي:
Message Queues
Introduction to Apache Kafka - A Beginner’s Guide
Docker Cheatsheet
Best Practices for Handling NullPointerException in Java
Introduction Into Cascade in CSS Part 2
Message Queues
تخيلوا ان عندنا مطعم وشغال فيه اكتر من طباخ بيعملوا اكلات كتيرة ومتنوعة في نفس الوقت, وكل واحد شغال على الطبق اللي بيجهزه, فعشان الطباخين دول يبقى فيه بينهم تناسق وترتيب على حسب الاوردرات لازم يكون فيه نظام بيحققلهم ده فهم بيعملوا ايه ؟
بيحطوا الاوردرات كلها ورا بعض في شكل طابور، وكل طباخ بيلاقي اوردر متاح بياخد الاوردر اللي عليه الدور.
هو ده ببساطة الـ Message Queue
Message Queue
الـ Message Queue هو عبارة عن وسيلة تواصل بين الـ Services وبعضها البعض فيقدروا يتبادلوا المعلومات بشكل Asynchronous وعشان كده النوع ده من التواصل بنسميه Asynchronous Communication.
طب يعني ايه Async ؟
الـ Asynchronous Communication معناه ان الطرفين مش بيتواصلوا مع بعض In Real Time ومش محتاجين الاجابة تحصل بشكل Immediate زي الـ MailBox
فالـ Message Queue بيكون عبارة عن وسيط بين طرفين وبيضمنلك ان الرسالة هيتم استلامها من طرف واستقبالها من الطرف الآخر.
المكونات الأساسية لأي Message Queue
الـ Producer: وده دوره انه يـ Create ويبعت الـ Message اللي عاوزة تتبعت للـ Message Queue
الـ Message: ودي الحاجة اللي الـ Producer بيبعتها للـ Message Queue عشان الـ Consumer يعملها Processing وممكن يكون ليها اكتر من شكل زي Data او Event حصل أو Task وكلهم عبارة عن Message في الأول والآخر ..
الـ Message Queue: وده المكان اللي بتتخزن فيه الـ Message لحد ما يتم استلامها وعمل Processing عليها
الـ Consumer: وده دوره انه يستقبل الـ Message اللي اتبعتت ويعملها Processing بالشكل المطلوب
Introduction to Apache Kafka - A Beginner’s Guide
ضيفنا هذا الأسبوع في "أداة الأسبوع" هو Kafka Message Queue في رسالة قصيرة هنتعرف عليه وعلى ومميزاته واستخداماته.
يعتبر Apache Kafka هو نظام مفتوح المصدر لمعالجة البيانات بشكل موزع وفعال، مصمم للتعامل مع كميات ضخمة من البيانات. بيتم استخدامه بشكل أساسي ك Message broker ولكنه يتميز بقدرته على التعامل مع ال Streaming data بشكل سلس.
ليه معظم الشركات والمبرمجين بيستخدموا Kafka؟
لانه حل بسيط لأكثر من مشكلة بتواجه الشركات:
الشركات اللي بتكون معمارية مشاريعها Microservices بتكون محتاجة Message broker ينقل ال events من service للأخرى ويكون مسؤول عن التواصل بينهم, و Kafka خيار مثالي لأنه قابل للتوسع بمعني أنه مهما زاد الطلب على التطبيق بتاعك هيكون قادر ينقل ال events من خدمة للثانية بسلاسة.
في حالات استخدام كثيرة بتكون محتاج تعالج البيانات لحظيًا عشان تأخذ عليها قرار معين في النظام, مثل أنظمة الترشيحات في منصة زي اليوتيوب وزي ال Fraud analyses في ال FinTech. قواعد البيانات التقليدية مش هتكون مناسبة في هذه الحالة لأن عملية تخزين و استرجاع البيانات منها بطيئة وعشان كدا بنستخدم Kafka واللي بيقدر يوفر ال Streamed data ويتم معالجتها باستخدام Spark أو Flink بشكل لحظي.
في حالات كثيرة بيكون عندك بيانات حابب تخزنها في أكثر من مكان أو ترسلها لأكثر من نظام عشان يعالجها بطريقة معينة فكمثال وقت ما بتطلب Order من E-Commerce Application بنحتاج نخزنه في قاعدة البيانات وكذلك نظام المدفوعات بيحتاج يعالجه ومثله ال Inventory management system وكذلك ال Recommendation engine. هنا كافكا بيقدر يعمل Streaming للبيانات الخاصة بالطلب و كل نظام من دول يعتبر Consumer يقدر يقرأ البيانات في نفس الوقت و يعالجها بطريقته.
مميزات Kafka
أداء سريع (High Throughput & Low Latency) 🚀: يمكنه معالجة ملايين الرسائل في الثانية بزمن استجابة قليل جدًا.
التوسع السهل (Scalability) 📈: يدعم التوزيع على أكثر من Server بشكل أفقي (Horizontal Scaling) فبيكون مناسب للأنظمة الكبيرة.
تحمل الأعطال (Fault Tolerance) 🔄: يضمن عدم فقدان البيانات بفضل تقنيات التكرار (Replication) وإعادة المحاولة (Retry Mechanism).
تكامل قوي مع أنظمة معالجة البيانات مثل Spark وFlink وHadoop 🤝
أهم استخدامات Kafka:
System Monitoring and Alerting: بيقدر Kafka يعمل Ingestion لل Metrics and events من أجزاء النظام المختلفة أو حتي من أنظمة مختلفة ويتيح البيانات دي بشكل لحظي والتي على أساسها نتخذ قرارات للتحكم في النظام أو معالجة المشاكل.
Data Streaming for Recommendation Engine: هنا تقدر تستفاد بأكثر من ميزة يقدمها كافكا ( السرعة لأنك بتحتاج النتائج In real time , القابلية للتوسع وده لأن نظم التوصيات تحتاج كمية كبيرة من البيانات لتحسين جودة تحليلها)
Log Analysis (with Logstash, ElasticSearch and Kibanna): دا كان الاستخدام الأصلي اللي طورت Linkedin Kafka عشانه وهو تحليل الـ Logs, هنا بنستفيد من ميزة أنه Kafka يقدر يقرأ ال Logs من أكثر من subsystem في نفس الوقت ويجمعهم عشان نقدر نحللهم باستخدام logstash
Machine-Learning Systems: الـ ML Models مستخدمة بقوة في التطبيقات العالم النهارده, فلو أخذنا مثال ال Payment Service Providers فهما بيحتاجوها تحلل الـ Shopper interaction بشكل لحظي عشان تتبين أن كانت هذه المعاملة المالية Fraud أو لاء.
ما هو الفرق بينه وبين Rabbit MQ ؟
بينما يمكن أن تستخدم الاثنين ك Message Broker , ف Kafka بيتميز بال Stream processing زي ما شرحنا قبل كده وكونه أكثر مرونة وبيخزن البيانات بشكل دائم علي عكس Rabbit MQ اللي عبارة عن نظام تبادل رسائل تقليدي. فلو حبينا نلخص الفروق في الاستخدام:
Kafka أقوى وأكثر كفاءة في التعامل مع البيانات الضخمة والأنظمة المتوزعة.
RabbitMQ أسهل في الاستخدام ويصلح للأنظمة التي تحتاج إلى تبادل رسائل تقليدي.
الشركات تستخدم Kafka لأنه أكثر استقرارًا وأفضل للتوسع، لكنه قد يكون معقدًا في البداية مقارنةً بـ RabbitMQ.
Docker Cheatsheet
تشغيل التطبيقات بسرعة وسهولة من أولوياتنا كمبرمجين لأنه بيسهل علينا يوم العمل ، وعشان كدا Docker أصبح من أهم أدوات المبرمج في السنين اللي فاتت. وده لإنه بيوفرلنا بيئات معزولة ( Containers) بتحتوي على كل الملفات اللي التطبيق محتاجها علشان يشتغل، وده معناه إن التطبيق هيشتغل بنفس الطريقة على أي جهاز، سواء كان جهازك كمبرمج أو جهاز زميلك في الشغل أو حتى سيرفر الإنتاج.
جمعنالكم أهم الأوامر اللي ممكن تحتاجوها في شغلكم اليومي ب docker في مكان واحد وبالعربي عشان نوفر مجهود الترجمة ل اللغة الأم اللي طول النهار بنعمله دا.
الأوامر متقسمة لـ ٣ فئات
خصم يصل إلى 40% على جميع خطط الاشتراك السنوية لفترة محدودة، تقدروا دلوقتي تشتركوا في اقرأ-تِك وتستمتعوا بكافة المقالات في كل ما يخص هندسة البرمجيات باللغة العربية والمحتوى المميز من ورقة وقلم ومدونات فطين اللي بيتميزوا بتصاميم ذات جودة عالية وكل ده بحرية كاملة وكمان مفاجآت اقرأ-تِك الجاية 🚀
وبرضو متاح الاشتراك من خلال InstaPay و VodafoneCash 🎁
بفضل الله أصبح متاح حاليا دعمنا من خلال الرعاة والشراكات وفعلنا الـ Sponsorship واحنا بنرحب بجميع الشراكات مع المؤسسات والشركات وأصحاب الأعمال لبناء مجتمع عربي يشجع على القراءة والتعلم ومشاركة التجارب والخبرات العملية في هندسة البرمجيات.
دورك كشريك أو راعي هيكون محوري في دعم المحتوى وتوسيع نطاق تأثيره. فانضم لرحلتنا وكن جزءًا من صناعة مستقبل التكنولوجيا في المنطقة 🚀
تقدروا تشوفوا التفاصيل كاملة من هنا والـ Analytics بتاعتنا من خلال اقرأ-تِك والنشرة الأسبوعية 👇
Best Practices for Handling NullPointerException in Java
واحدة من أشهر المشاكل اللي بتقابل الـ Java Developers هي الـ NullPointerExceptions ، واللي للأسف بيكون سببها واضح ، ولكن أثناء كتابة الـ Code معظمنا بيغفل عنها.
وللأسف النوع ده من المشاكل بيخلي التطبيق في الآخر يتعطل وممكن ده يؤدي بالطبع لمشاكل من ناحية الـ Customers وعشان كده ضروري جدًا نعرف ازاي نتعامل مع النوع ده من المشاكل بشكل فعال.
الـ NullPointerException هي Class في الـ Java بتورث من الـ RuntimeException وده عبارة عن UnCheckedException.
الـ NullPointerException بيحصل لما نحاول اننا نـ Access Null Reference فمثلًا لو عندنا String الـ Default بتاع اي Reference لأي Variable في الـ Java بيكون Null.
فزي ماحنا شايفين هنا في الـ Code Snippet ده ، احنا هنا عملنا Variable اسمه name وبالتالي لما جينا نحاول نطبع الـ Length بتاع الـ Variable ده ، هيضرب في وشنا NullPointerException وده لان الـ Reference ده موجود بـ Null واحنا بنحاول نـ Access Null Reference ونقوله هاتلي الـ Length على حاجة مش موجودة.
وطبعا المشاكل ممكن تكون أكتر من كده لإن احيانا بيحصلنا ده في الـ Runtime ، فلو احنا معتمدين اننا بنكلم Service أو الـ Database ومعتمدين على بيانات مثلا جاية ، فلو ما اتعاملناش معاها بحذر ، وقتها برضو ممكن يكون فيه Fields بـ Null ولما نيجي نحاول نعمل عليها أي Operation هيضرب في وشنا NullPointerException.
عشان كده احنا محتاجين نعرف ازاي نتعامل بشكل كويس مع النوع ده من المشاكل.
Standard If-Else Condition
أبسط وأسهل طريقة نعملها عشان نتجنب مشكلة الـ NullPointerException هي الـ Simple If-Else Statement واللي من خلالها هنروح نشوف الـ Value بتاعة الـ Variable اللي عاوزين نعمل عليه Operation معينة بـ Null ولا لا وبالتالي نتجنب انه يحصل مشكلة لو كان بـ Null.
Equals Method
ممكن برضو كحل آخر واحنا بنقارن في الـ If-Else Statement اننا نلجأ لاستعمال الـ equals
Method ودي اصلًا Method موجودة في كل الـ Objects وكل الـ Reference Types عندهم الـ Method دي.
ولكن نقطة هنا نخلي بالنا منها ان بالطبع لو نادينا الـ equals
على Null Reference فاحنا كده ماستفدناش حاجة! ولكن الغرض من استعمالها هو اننا نستعملها على حاجة متأكدين انها مش بـ Null زي كده:
فاحنا هنا اعتمدنا على ان معانا String اسمه eqraatech نقدر نعتبره Constant ضامنين انه مش بـ Null وبنقارنه بحاجة ممكن تكون Null ولا لا ، هنا ده عادي , ولكن لو عكسنا وقتها هيضرب في وشنا NullPointerException.
Introduction Into Cascade in CSS Part 2
تكلمنا في الجزء الأول من سلسلة ال cascade عن ال specificity
و ال order
، سيكون حديثنا اليوم عن ال inline styles
و important keyword
.
الـ Inline Styles والـ Specificity
تعتبر ال inline styles
ثاني أقوى حاجة في نظام ال cascade
قبل ال important
، فبالتالي ال inline styles
بيفوزوا على ال specificity
والطريقة الوحيدة عشان تعمل ليهم override
هي عبر استخدام ال important
.
Important
في الجزء الأول من السلسلة كنا قلنا أننا بنرجع لل order فقط لما تكون ال specificity متساوية، أما لو ال specificity غير متساوية فلا اعتبار لل order، نفس الشيء مع ال important، لو في important وحده فلا قيمة لل inline styles أو ال specificity أو ال order، ودي قوة ال important أنو مينفعش تعمل ليها override إلا ب important أختها، أما لو في أكثر من وحدة important فعندها بنقارن بينهم من ناحية inline styles و specificity و order.
الإصدار الأول - ورقة وقلم 🚀
في الإصدار ده جمعنا أكتر من 50 موضوع في مختلف مجالات هندسة البرمجيات بأكتر من 170 صفحة + تصاميم بجودة عالية وكل ده بالعربي وبشكل مميز ومتقسم لفصول سهل تنتقلوا من فصل وموضع للتاني بدون مشاكل 💎
تقدروا تشوفوا النسخة كاملة من هنا كـ E-Book ، وحاولنا نخليها بسعر رمزي يناسب الجميع 👇
ولو عندكوا أي مشكلة في الدفع ، تقدروا تتواصلوا معانا وهنكون مبسوطين باننا نوفر بدايل زي InstaPay و VodafoneCash 🎁
ولو عاوزين تعاينوا جودة الـ E-Book قبل ما تشتروه ، تقدروا تحملوا النسخة المجانية واللي بتضم حوالي 30 موضوع فيما لايزيد عن 100 صفحة من هنا 😉
رؤيتنا هي إثراء المحتوى التقني العربي وجعل التعلم من خلال القراءة أمتع، وذلك من خلال إثراء المحتوى التقني باللغة العربية وتشجيع المبرمجين على القراءة بلغتهم الأم والتفكير أيضًا بها.
لذلك اتحنا الفرصة أمام الجميع للمساهمة ومساعدتنا في نشر واثراء المحتوى التقني باللغة العربية, من خلال كتابة المقالات التقنية في مختلف مجالات هندسة البرمجيات.
وجب التنويه أنه لن يتم نشر كافة الأعمال التي تصل إلينا، وإنما سيتم الانتقاء منها ما يحقق هدفنا بإثراء المحتوى التقني العربي، ولذلك قد تُطلب بعض التعديلات من الكاتب قبل النشر.
لمعرفة المزيد بخصوص :
💬 المعايير العامة لكتابة ونشر المقالات
⚡️ كيفية الإرسال
🔥 التزامات اقرأ-تِك تجاه الكتاب
يمكنكم قراءة كافة التفاصيل من هنا 👇