العمل مع Kafka في Swift (iOS/macOS): المكتبات، العملاء والأمثلة
\n\nApache Kafka هي منصة موزعة لنقل البيانات المتدفقة، تُستخدم على نطاق واسع لبناء بنى تعتمد على الأحداث (event-driven architectures)، وجمع السجلات، ومعالجة التحليلات، والعمل مع الخدمات المصغرة. في نظام Swift البيئي (iOS/macOS)، لا تعتبر Kafka تقنية أصلية، ولكن توجد عدة مكتبات ناضجة تسمح بدمج تطبيقات Swift مع وسطاء Kafka. في هذه المقالة، سنستعرض الأدوات الرئيسية، وطريقة تثبيتها، ونكتب منتجًا ومستهلكًا بسيطين بلغة Swift.
\n\nلماذا نحتاج Kafka في تطبيق Swift؟
\nعلى الرغم من أن Kafka غالبًا ما ترتبط بالخادم الخلفي، إلا أن تطبيقات الهواتف المحمولة وسطح المكتب المكتوبة بلغة Swift يمكنها استخدام Kafka من أجل:
\n- \n
- تلقي الإشعارات الفورية في الوقت الحقيقي عبر WebSocket + Kafka؛ \n
- إرسال أحداث سلوك المستخدم إلى خادم التحليلات؛ \n
- مزامنة البيانات بين أجهزة متعددة في الوقت الحقيقي؛
- تسجيل السجلات من جانب العميل مع إرسالها لاحقًا إلى نظام مركزي.
المكتبات الرئيسية للعمل مع Kafka في Swift
\nحاليًا، هناك ثلاثة طرق رئيسية لدمج Kafka في مشاريع Swift:
\n\n1. عميل Confluent Swift (موصى به)
\nعميل Confluent Swift هو غلاف رسمي حول librdkafka من شركة Confluent. تدعم المكتبة مجموعة كاملة من الوظائف: المنتجون، المستهلكون، إدارة المواضيع، SSL، مصادقة SASL. تعمل على iOS و macOS.
التثبيت عبر Swift Package Manager:
\n// Package.swift\ndependencies: [\n .package(url: "https://github.com/confluentinc/confluent-kafka-swift.git", from: "0.1.0")\n]\n\nمثال على المنتج (Producer) بلغة Swift
\nلننشئ منتجًا بسيطًا يرسل سلسلة نصية إلى الموضوع test-topic:
import ConfluentKafka\n\nlet config = KafkaConfig()\nconfig["bootstrap.servers"] = "localhost:9092"\nconfig["client.id"] = "swift-producer"\n\nlet producer = try KafkaProducer(config: config)\n\nlet message = "مرحبًا من Swift!"\nlet record = KafkaProducerRecord(topic: "test-topic", value: message.data(using: .utf8)!)\n\ntry producer.send(record: record) { error, deliveryReport in\n if let error = error {\n print("خطأ في الإرسال: \\(error)")\n } else {\n print("تم إرسال الرسالة إلى القسم \\(deliveryReport?.partition ?? -1)")\n }\n}\n\nproducer.flush()\n\nمثال على المستهلك (Consumer) بلغة Swift
\nimport ConfluentKafka\n\nlet config = KafkaConfig()\nconfig["bootstrap.servers"] = "localhost:9092"\nconfig["group.id"] = "swift-consumer-group"\nconfig["auto.offset.reset"] = "earliest"\n\nlet consumer = try KafkaConsumer(config: config)\ntry consumer.subscribe(topics: ["test-topic"])\n\nwhile true {\n let records = try consumer.poll(timeout: 1.0)\n for record in records {\n if let value = record.value {\n let message = String(data: value, encoding: .utf8) ?? "فشل فك الترميز"\n print("تم الاستلام: \\(message)")\n }\n }\n}\n\n2. KafkaSwift (بديل خفيف الوزن)
\nKafkaSwift هي مكتبة بسيطة مكتوبة بلغة Swift نقية بدون تبعيات لمكتبات C. مناسبة للسيناريوهات البسيطة، ولكنها لا تدعم الميزات المتقدمة (SSL، SASL، التقسيم).
\nالتثبيت: عبر CocoaPods: pod 'KafkaSwift'.
مثال على الإرسال:
\nimport KafkaSwift\n\nlet kafka = try Kafka(host: "localhost", port: 9092)\ntry kafka.send(message: "رسالة اختبارية", topic: "test-topic")\n\n3. Perfect-Kafka (لـ Swift من جانب الخادم)
\nPerfect-Kafka هي جزء من إطار عمل Perfect، موجهة لتطبيقات الخادم بلغة Swift (macOS، Linux). إص