صورة المؤلف
أباتشي كافكا هو نظام لتمرير الرسائل الموزع يعمل على نموذج المشترك بين الناشر. تم تطويره بواسطة Apache Software Foundation وكُتب بلغة Java و Scala. تم إنشاء كافكا للتغلب على المشكلة التي يواجهها توزيع وقابلية التوسع لأنظمة تمرير الرسائل التقليدية. يمكنه معالجة وتخزين كميات كبيرة من البيانات بأقل زمن انتقال وإنتاجية عالية. نظرًا لهذه الفوائد ، يمكن أن يكون مناسبًا لإنشاء تطبيقات معالجة البيانات وخدمات البث في الوقت الفعلي. إنه مفتوح المصدر حاليًا ويستخدمه العديد من المؤسسات مثل Netflix و Walmart و Linkedin.
يجعل نظام تمرير الرسائل العديد من التطبيقات ترسل أو تستقبل البيانات من بعضها البعض دون القلق بشأن نقل البيانات ومشاركتها. نقطة إلى نقطة و الناشر المشترك هما نظامان واسع الانتشار لتمرير الرسائل. من نقطة إلى نقطة ، يدفع المرسل البيانات إلى قائمة الانتظار ، وينبثق جهاز الاستقبال منها مثل نظام قائمة انتظار قياسي يتبع مبدأ FIFO (الوارد أولاً ، أولاً يخرج). أيضًا ، يتم حذف البيانات بمجرد قراءتها ، ولا يُسمح إلا بجهاز استقبال واحد في كل مرة. لا توجد تبعية زمنية محددة للمتلقي لقراءة الرسالة.
Fig.1 نظام الرسائل من نقطة إلى نقطة | صورة المؤلف
في نموذج المشترك بين الناشر ، يُطلق على المرسل اسم ناشر ، ويطلق على المتلقي اسم مشترك. في هذا ، يمكن للعديد من المرسلين والمستلمين قراءة البيانات أو كتابتها في وقت واحد. لكن هناك تبعية للوقت فيها. يجب على المستهلك أن يستهلك الرسالة قبل فترة زمنية معينة ، حيث يتم حذفها بعد ذلك ، حتى لو لم تتم قراءتها. اعتمادًا على تكوين المستخدم ، يمكن أن يكون هذا الحد الزمني يومًا أو أسبوعًا أو شهرًا.
Fig.2 نظام رسائل المشترك بين الناشر | صورة المؤلف
تتكون بنية كافكا من عدة مكونات رئيسية:
- موضوع
- تقسيم
- وسيط
- منتج
- مستهلكة
- كافكا العنقودية
- حارس حديقة الحيوان
Fig.3 كافكا للهندسة المعمارية | الصورة بواسطة IBM-cloud-architecture
دعونا نفهم بإيجاز كل مكون.
يخزن كافكا الرسائل بشكل مختلف المواضيع. الموضوع عبارة عن مجموعة تحتوي على رسائل فئة معينة. إنه مشابه لجدول في قاعدة بيانات. يمكن تعريف الموضوع بشكل فريد من خلال اسمه. لا يمكننا إنشاء موضوعين بنفس الاسم.
يتم تصنيف الموضوعات كذلك إلى أقسام. يرتبط كل سجل من هذه الأقسام بمعرف فريد يسمى عوض، مما يدل على موضع السجل في ذلك القسم.
بخلاف هذا ، هناك منتجون ومستهلكون في النظام. يقوم المنتجون بكتابة البيانات أو نشرها في الموضوعات باستخدام واجهات برمجة التطبيقات المنتجة. يمكن لهؤلاء المنتجين الكتابة إما على مستوى الموضوع أو القسم.
يقرأ المستهلكون أو يستهلكون البيانات من الموضوعات باستخدام واجهات برمجة التطبيقات الخاصة بالمستهلك. يمكنهم أيضًا قراءة البيانات إما على مستوى الموضوع أو القسم. سيشكل المستهلكون الذين يؤدون مهام مماثلة مجموعة تعرف باسم مجموعة المستهلك.
هناك أنظمة أخرى مثل وسيط و حارس حديقة الحيوان، والتي تعمل في خلفية خادم كافكا. الوسطاء هم البرنامج الذي يحتفظ بسجل الرسائل المنشورة ويحتفظ به. كما أنها مسؤولة عن توصيل الرسالة الصحيحة للمستهلك المناسب بالترتيب الصحيح باستخدام التعويضات. يمكن استدعاء مجموعة الوسطاء الذين يتواصلون بشكل جماعي مع بعضهم البعض مجموعات كافكا. يمكن إضافة الوسطاء أو إزالتهم ديناميكيًا من كتلة كافكا دون مواجهة أي توقف في النظام. ويطلق على أحد الوسطاء في كتلة كافكا اسم أ مراقب. يدير الحالات والنسخ المتماثلة داخل الكتلة ويؤدي المهام الإدارية.
من ناحية أخرى ، فإن Zookeeper مسؤول عن الحفاظ على الحالة الصحية لمجموعة كافكا والتنسيق مع كل وسيط في تلك المجموعة. يحافظ على البيانات الوصفية لكل مجموعة في شكل أزواج مفتاح - قيمة.
يركز هذا البرنامج التعليمي بشكل أساسي على التطبيق العملي لأباتشي كافكا. إذا كنت ترغب في قراءة المزيد عن هندسته المعمارية ، يمكنك القراءة مقالة بقلم Upsolver.
ضع في اعتبارك حالة استخدام خدمة حجز سيارات الأجرة مثل Uber. يستخدم هذا التطبيق Apache Kafka لإرسال واستقبال الرسائل من خلال خدمات متنوعة مثل المعاملات ورسائل البريد الإلكتروني والتحليلات وما إلى ذلك.
Fig.4 هندسة تطبيق تاكسي | صورة المؤلف
تتكون العمارة من عدة خدمات. ال Rides
تتلقى الخدمة طلب المشوار من العميل وتكتب تفاصيل الرحلة على نظام رسائل كافكا.
ثم تمت قراءة تفاصيل الطلب هذه بواسطة Transaction
الخدمة التي تؤكد الطلب وحالة الدفع. بعد تأكيد تلك الرحلة ، هذا Transaction
تقوم الخدمة بكتابة الرحلة المؤكدة مرة أخرى في نظام الرسائل مع بعض التفاصيل الإضافية. وأخيرًا ، تتم قراءة تفاصيل الرحلة المؤكدة بواسطة خدمات أخرى مثل البريد الإلكتروني أو تحليلات البيانات لإرسال بريد التأكيد إلى العميل وإجراء بعض التحليلات عليه.
يمكننا تنفيذ جميع هذه العمليات في الوقت الفعلي بإنتاجية عالية جدًا وأقل زمن انتقال. أيضًا ، نظرًا لإمكانية التحجيم الأفقي لـ Apache Kafka ، يمكننا توسيع نطاق هذا التطبيق للتعامل مع ملايين المستخدمين.
يحتوي هذا القسم على برنامج تعليمي سريع لتطبيق نظام رسائل kafka في تطبيقنا. ويتضمن خطوات تنزيل الكافكة وتهيئتها وإنشاء وظائف المنتج-المستهلك.
ملحوظة: يعتمد هذا البرنامج التعليمي على لغة برمجة Python ويستخدم جهاز Windows.
خطوات تنزيل أباتشي كافكا
1. قم بتنزيل أحدث إصدار من Apache Kafka من أن وصلة. يعتمد كافكا على لغات JVM ، لذا يجب تثبيت إصدار Java 7 أو إصدار أحدث في نظامك.
- قم باستخراج ملف zip الذي تم تنزيله من محرك (C :) بجهاز الكمبيوتر الخاص بك وأعد تسمية المجلد باسم
/apache-kafka
.
- يحتوي الدليل الأصل على دليلين فرعيين ،
/bin
و/config
، والذي يحتوي على الملفات التنفيذية وملفات التكوين الخاصة بحارس الحديقة وخادم الكافكا.
خطوات التكوين
أولاً ، نحتاج إلى إنشاء أدلة السجل لخادمي Kafka و Zookeeper. ستقوم هذه الدلائل بتخزين كافة البيانات الوصفية لهذه المجموعات ورسائل الموضوعات والأقسام.
ملحوظة: بشكل افتراضي ، يتم إنشاء دلائل السجل هذه داخل ملف /tmp
الدليل ، وهو دليل متقلب يختفي من جميع البيانات الموجودة بالداخل عند إيقاف تشغيل النظام أو إعادة تشغيله. نحتاج إلى تعيين المسار الدائم لأدلة السجل لحل هذه المشكلة. دعونا نرى كيف.
انتقل إلى apache-kafka
>> config
وفتح server.properties
ملف. هنا يمكنك تكوين العديد من خصائص kafka ، مثل مسارات أدلة السجل ، وساعات الاحتفاظ بالسجلات ، وعدد الأقسام ، وما إلى ذلك.
داخل server.properties
، يجب علينا تغيير مسار ملف دليل السجل من الملف المؤقت /tmp
الدليل إلى دليل دائم. يحتوي دليل السجل على البيانات التي تم إنشاؤها أو كتابتها في خادم كافكا. لتغيير المسار ، قم بتحديث ملف log.dirs
متغير من /tmp/kafka-logs
إلى c:/apache-kafka/kafka-logs
. سيؤدي ذلك إلى تخزين سجلاتك بشكل دائم.
log.dirs=c:/apache-kafka/kafka-logs
يحتوي خادم Zookeeper أيضًا على بعض ملفات السجل لتخزين البيانات الوصفية لخوادم كافكا. لتغيير المسار ، كرر الخطوة أعلاه ، أي فتح zookeeper.properties
ملف واستبدال المسار على النحو التالي.
dataDir=c:/apache-kafka/zookeeper-logs
سيعمل خادم zookeeper هذا كمدير موارد لخادم kafka الخاص بنا.
قم بتشغيل خوادم Kafka و Zookeeper
لتشغيل خادم zookeeper ، افتح موجه cmd جديدًا داخل الدليل الأصلي وقم بتشغيل الأمر أدناه.
$ .binwindowszookeeper-server-start.bat .configzookeeper.properties
صورة المؤلف
استمر في تشغيل مثيل zookeeper.
لتشغيل خادم kafka ، افتح موجه cmd منفصل وقم بتنفيذ الكود أدناه.
$ .binwindowskafka-server-start.bat .configserver.properties
حافظ على تشغيل خوادم kafka و zookeeper ، وفي القسم التالي ، سننشئ وظائف المنتج والمستهلك والتي ستقرأ البيانات وتكتبها على خادم kafka.
خلق وظائف المنتج والمستهلك
لإنشاء وظائف المنتج والمستهلك ، سنأخذ مثالاً لتطبيق التجارة الإلكترونية الذي ناقشناه سابقًا. ستعمل خدمة "الطلبات" كمنتج ، والذي يكتب تفاصيل الطلب إلى خادم kafka ، وستعمل خدمة البريد الإلكتروني والتحليلات كمستهلك ، والذي يقرأ تلك البيانات من الخادم. ستعمل خدمة المعاملات كمستهلك وكذلك كمنتج. يقرأ تفاصيل الطلب ويعيد كتابتها مرة أخرى بعد تأكيد المعاملة.
لكن أولاً ، نحتاج إلى تثبيت مكتبة كافكا بيثون ، التي تحتوي على وظائف داخلية للمنتِج والمستهلكين.
$ pip install kafka-python
الآن ، قم بإنشاء دليل جديد باسم kafka-tutorial
. سننشئ ملفات python داخل هذا الدليل تحتوي على الوظائف المطلوبة.
$ mkdir kafka-tutorial
$ cd .kafka-tutorial
وظيفة المنتج:
الآن ، قم بإنشاء ملف python باسم `rides.py` والصق الكود التالي فيه.
rides.py
import kafka
import json
import time
import random topicName = "ride_details"
producer = kafka.KafkaProducer(bootstrap_servers="localhost:9092") for i in range(1, 10): ride = { "id": i, "customer_id": f"user_{i}", "location": f"Lat: {random.randint(-90, 90)}, Long: {random.randint(-90, 90)}", } producer.send(topicName, json.dumps(ride).encode("utf-8")) print(f"Ride Details Send Succesfully!") time.sleep(5)
التفسير:
أولاً ، قمنا باستيراد جميع المكتبات اللازمة بما في ذلك الكافكة. ثم يتم تحديد اسم الموضوع وقائمة بالعناصر المختلفة. تذكر أن الموضوع عبارة عن مجموعة تحتوي على أنواع متشابهة من الرسائل. في هذا المثال ، سيحتوي هذا الموضوع على جميع الطلبات.
بعد ذلك ، نقوم بإنشاء مثيل للدالة KafkaProducer وربطها بخادم kafka الذي يعمل على المضيف المحلي: 9092. إذا كان خادم kafka الخاص بك يعمل على عنوان ومنفذ مختلفين ، فيجب عليك ذكر عنوان IP الخاص بالخادم ورقم المنفذ هناك.
بعد ذلك ، سنقوم بإنشاء بعض الطلبات بتنسيق JSON ونكتبها إلى خادم kafka على اسم الموضوع المحدد. تُستخدم وظيفة النوم لإنشاء فجوة بين الطلبات اللاحقة.
وظائف المستهلك:
transaction.py
import json
import kafka
import random RIDE_DETAILS_KAFKA_TOPIC = "ride_details"
RIDES_CONFIRMED_KAFKA_TOPIC = "ride_confirmed" consumer = kafka.KafkaConsumer( RIDE_DETAILS_KAFKA_TOPIC, bootstrap_servers="localhost:9092"
)
producer = kafka.KafkaProducer(bootstrap_servers="localhost:9092") print("Listening Ride Details")
while True: for data in consumer: print("Loading Transaction..") message = json.loads(data.value.decode()) customer_id = message["customer_id"] location = message["location"] confirmed_ride = { "customer_id": customer_id, "customer_email": f"{customer_id}@xyz.com", "location": location, "alloted_driver": f"driver_{customer_id}", "pickup_time": f"{random.randint(1, 20)}mins", } print(f"Transaction Completed..({customer_id})") producer.send( RIDES_CONFIRMED_KAFKA_TOPIC, json.dumps(confirmed_ride).encode("utf-8") )
التفسير:
• transaction.py
يتم استخدام الملف لتأكيد الانتقالات التي أجراها المستخدمون وتعيين سائق لهم ووقت الالتقاط المقدر. تقرأ تفاصيل الرحلة من خادم الكافكة وتكتبها مرة أخرى في خادم الكافكة بعد تأكيد الركوب.
الآن ، قم بإنشاء ملفي python باسم email.py
و analytics.py
، والتي تُستخدم لإرسال رسائل بريد إلكتروني إلى العميل لتأكيد الرحلة وإجراء بعض التحليلات على التوالي. يتم إنشاء هذه الملفات فقط لإثبات أنه حتى العديد من المستهلكين يمكنهم قراءة البيانات من خادم كافكا في وقت واحد.
email.py
import kafka
import json RIDES_CONFIRMED_KAFKA_TOPIC = "ride_confirmed"
consumer = kafka.KafkaConsumer( RIDES_CONFIRMED_KAFKA_TOPIC, bootstrap_servers="localhost:9092"
) print("Listening Confirmed Rides!")
while True: for data in consumer: message = json.loads(data.value.decode()) email = message["customer_email"] print(f"Email sent to {email}!")
analysis.py
import kafka
import json RIDES_CONFIRMED_KAFKA_TOPIC = "ride_confirmed"
consumer = kafka.KafkaConsumer( RIDES_CONFIRMED_KAFKA_TOPIC, bootstrap_servers="localhost:9092"
) print("Listening Confirmed Rides!")
while True: for data in consumer: message = json.loads(data.value.decode()) id = message["customer_id"] driver_details = message["alloted_driver"] pickup_time = message["pickup_time"] print(f"Data sent to ML Model for analysis ({id})!")
الآن ، انتهينا من التطبيق ، في القسم التالي ، سنقوم بتشغيل جميع الخدمات في وقت واحد والتحقق من الأداء.
اختبر التطبيق
قم بتشغيل كل ملف واحدًا تلو الآخر في أربعة موجهات أوامر منفصلة.
$ python transaction.py
$ python email.py
$ python analysis.py
$ python ride.py
صورة المؤلف
يمكنك استلام مخرجات من جميع الملفات في وقت واحد عندما يتم دفع تفاصيل الرحلة إلى الخادم. يمكنك أيضًا زيادة سرعة المعالجة عن طريق إزالة وظيفة التأخير في ملف rides.py
ملف. قام ملف "rides.py" بدفع البيانات إلى خادم kafka ، والملفات الثلاثة الأخرى تقرأ هذه البيانات في وقت واحد من خادم kafka وتعمل وفقًا لذلك.
أتمنى أن تحصل على فهم أساسي لأباتشي كافكا وكيفية تنفيذه.
في هذه المقالة ، تعرفنا على Apache Kafka وعمله وتنفيذه العملي باستخدام حالة استخدام لتطبيق حجز سيارات الأجرة. يتطلب تصميم خط أنابيب قابل للتطوير مع كافكا تخطيطًا وتنفيذًا دقيقين. يمكنك زيادة عدد الوسطاء والأقسام لجعل هذه التطبيقات أكثر قابلية للتوسع. تتم معالجة كل قسم بشكل مستقل بحيث يمكن توزيع الحمل بينهم. أيضًا ، يمكنك تحسين تكوين kafka عن طريق تعيين حجم ذاكرة التخزين المؤقت أو حجم المخزن المؤقت أو عدد سلاسل الرسائل.
GitHub جيثب: رابط للشفرة الكاملة المستخدمة في المقالة.
شكرا لقراءة هذا المقال. إذا كان لديك أي تعليقات أو اقتراحات ، فلا تتردد في الاتصال بي لينكد إن.
آريان جارج هو بي تك. طالب هندسة كهربائية ، حاليا في السنة الأخيرة من دراسته الجامعية. يكمن اهتمامه في مجال تطوير الويب والتعلم الآلي. لقد سعى وراء هذا الاهتمام وأنا حريص على العمل أكثر في هذه الاتجاهات.
- محتوى مدعوم من تحسين محركات البحث وتوزيع العلاقات العامة. تضخيم اليوم.
- بلاتوبلوكشين. Web3 Metaverse Intelligence. تضخيم المعرفة. الوصول هنا.
- المصدر https://www.kdnuggets.com/2023/04/build-scalable-data-architecture-apache-kafka.html?utm_source=rss&utm_medium=rss&utm_campaign=how-to-build-a-scalable-data-architecture-with-apache-kafka
- :يكون
- 1
- 10
- 11
- 7
- a
- من نحن
- فوق
- وفقا لذلك
- عمل
- وأضاف
- إضافي
- العنوان
- إداري
- بعد
- الكل
- من بين
- كمية
- تحليل
- تحليلات
- و
- أباتشي
- اباتشي كافكا
- واجهات برمجة التطبيقات
- التطبيق
- تطبيق
- التطبيقات
- هندسة معمارية
- هي
- البند
- AS
- أسوشيتد
- At
- الى الخلف
- خلفية
- على أساس
- الأساسية
- BAT
- BE
- قبل
- أقل من
- الفوائد
- ما بين
- موجز
- وسيط
- وسطاء
- العازلة
- نساعدك في بناء
- by
- مخبأ
- تسمى
- CAN
- لا تستطيع
- حذر
- حقيبة
- الفئة
- CD
- معين
- تغيير
- التحقق
- مبوب
- كتلة
- الكود
- جماعي
- COM
- تعليقات
- التواصل
- إكمال
- الطلب مكتمل
- عنصر
- مكونات
- الكمبيوتر
- الاعداد
- أكد
- تأكيد
- تم تأكيد
- التواصل
- تستهلك
- مستهلك
- المستهلكين
- التواصل
- يحتوي
- تنسيق
- خلق
- خلق
- خلق
- حاليا
- زبون
- البيانات
- تحليلات البيانات
- معالجة المعلومات
- قاعدة البيانات
- يوم
- الترتيب
- تعريف
- تأخير
- تقديم
- شرح
- التبعية
- اعتمادا
- تصميم
- تفاصيل
- المتقدمة
- التطوير التجاري
- مختلف
- الدلائل
- ناقش
- وزعت
- توزيع
- إلى أسفل
- بإمكانك تحميله
- الوقت الضائع
- قيادة
- سائق
- حيوي
- e
- التجارة الإلكترونية
- كل
- في وقت سابق
- إما
- الهندسة الكهربائية
- البريد الإلكتروني
- رسائل البريد الإلكتروني
- الهندسة
- مقدر
- إلخ
- الأثير (ETH)
- حتى
- مثال
- تنفيذ
- استخراج
- واجه
- مواجهة
- حقل
- قم بتقديم
- ملفات
- نهائي
- أخيرا
- الاسم الأول
- ركز
- متابعيك
- متابعات
- في حالة
- النموذج المرفق
- شكل
- دورة تأسيسية
- مجانا
- تبدأ من
- وظيفة
- وظائف
- إضافي
- فجوة
- توليد
- ولدت
- دولار فقط واحصل على خصم XNUMX% على جميع
- GitHub جيثب:
- أكبر
- تجمع
- يد
- مقبض
- يملك
- صحة الإنسان
- هنا
- مرتفع
- أمل
- أفقي
- ساعات العمل
- كيفية
- كيفية
- HTTPS
- i
- ID
- محدد
- معرف
- صورة
- تنفيذ
- التنفيذ
- استيراد
- in
- يشمل
- بما فيه
- القيمة الاسمية
- بشكل مستقل
- تثبيت
- تثبيت
- مثل
- مصلحة
- IP
- قضية
- IT
- العناصر
- انها
- جافا
- JPG
- جسون
- كافكا
- KD nuggets
- القفل
- معروف
- لغة
- اللغات
- كبير
- كمون
- آخر
- تعلم
- ومستوياتها
- المكتبات
- المكتبة
- مثل
- مما سيحدث
- LINK
- لينكدين:
- قائمة
- استماع
- تحميل
- جار التحميل
- موقع
- طويل
- آلة
- آلة التعلم
- صنع
- تحتفظ
- جعل
- يصنع
- القيام ب
- مدير
- يدير
- كثير
- الرسالة
- رسائل
- البيانات الوصفية
- ملايين
- أدنى
- الحد الأدنى
- ML
- نموذج
- شهر
- الأكثر من ذلك
- متعدد
- الاسم
- عين
- ضروري
- حاجة
- نت فلیکس
- جديد
- التالي
- عدد
- of
- on
- ONE
- جاكيت
- المصدر المفتوح
- تحسين
- طلب
- الطلبات
- منظمات
- أخرى
- الناتج
- تغلب
- أزواج
- خاص
- مرور
- مسار
- وسائل الدفع
- نفذ
- أداء
- ينفذ
- دائم
- بشكل دائم
- بيك اب
- خط أنابيب
- تخطيط
- أفلاطون
- الذكاء افلاطون البيانات
- أفلاطون داتا
- من فضلك
- الملوثات العضوية الثابتة
- ان يرتفع المركز
- عملية
- مبدأ
- المشكلة
- العمليات
- معالجة
- منتج
- المنتجين
- برمجة وتطوير
- HAS
- نشر
- نشرت
- الناشر
- دفع
- بايثون
- سريع
- عشوائية
- عرض
- نادي القراءة
- في الوقت الحقيقي
- معلومات الوقت الحقيقي
- تسلم
- يتلقى
- سجل
- تذكر
- إزالة
- إزالة
- كرر
- يحل محل
- طلب
- مطلوب
- يتطلب
- مورد
- مسؤول
- استبقاء
- Ride
- يجري
- تشغيل
- s
- نفسه
- سكالا
- التدرجية
- تحجيم
- حجم
- التحجيم
- القسم
- مرسل
- مستقل
- خوادم
- الخدمة
- خدماتنا
- طقم
- ضبط
- عدة
- مشاركة
- تغلق
- مماثل
- معا
- عزباء
- المقاس
- النوم
- So
- تطبيقات الكمبيوتر
- بعض
- سرعة
- معيار
- المحافظة
- الحالة
- خطوة
- خطوات
- متجر
- تخزين
- فروعنا
- متدفق
- تدفق الخدمات
- طالب
- لاحق
- مناسب
- نظام
- أنظمة
- جدول
- أخذ
- المهام
- التكنولوجيا
- مؤقت
- أن
- •
- من مشاركة
- منهم
- تشبه
- ثلاثة
- عبر
- الإنتاجية
- الوقت
- المهلة
- إلى
- موضوع
- المواضيع
- تقليدي
- صفقة
- المعاملات
- الانتقالات
- صحيح
- البرنامج التعليمي
- أنواع
- اوبر
- فهم
- فهم
- فريد من نوعه
- فريد
- تحديث
- تستخدم
- حالة الاستخدام
- مستخدم
- المستخدمين
- قيمنا
- مختلف
- الإصدار
- متقلب
- مجلدات
- وول مارت
- الويب
- تطوير شبكة الويب
- أسبوع
- حسن
- التي
- في حين
- من الذى
- واسع الانتشار
- سوف
- نوافذ
- مع
- بدون
- للعمل
- عامل
- أعمال
- اكتب
- مكتوب
- عام
- حل متجر العقارات الشامل الخاص بك في جورجيا
- زفيرنت
- الرمز البريدي