العمل مع Apache Kafka في Swift (iOS/macOS): المكتبات والأمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع Kafka في Swift (iOS/macOS)



Apache Kafka هي منصة موزعة لتدفق البيانات، تُستخدم على نطاق واسع في بنية الخدمات المصغرة، التحليلات في الوقت الفعلي، وأنظمة تبادل الرسائل. لمطوري iOS/macOS، قد يكون دمج Kafka ضروريًا عند إنشاء تطبيقات تعالج الأحداث في الوقت الفعلي، أو تعمل مع أجهزة إنترنت الأشياء (IoT)، أو تتفاعل مع الواجهة الخلفية بلغة Java/Go. في هذه المقالة، سنستعرض المكتبات الرئيسية للعمل مع Kafka في Swift، وطرق ربطها، وأمثلة على الكود.



لماذا نحتاج Kafka في تطبيقات الجوال/سطح المكتب؟

على الرغم من أن Kafka غالبًا ما يرتبط بالجانب الخادم، إلا أن هناك سيناريوهات تتفاعل فيها تطبيقات العميل مباشرة مع الوسطاء:

  • التسجيل والتحليلات: إرسال أحداث استخدام التطبيق إلى الخادم.
  • الدردشة والإشعارات: تلقي الرسائل في الوقت الفعلي عبر Kafka بدلاً من WebSocket.
  • مزامنة البيانات: تحديث البيانات المحلية عند حدوث تغييرات في النظام الموزع.
  • إنترنت الأشياء وأجهزة الاستشعار: نقل البيانات من الجهاز إلى الخادم عبر Kafka.


المكتبات الرئيسية لـ Swift

حاليًا، توجد عدة حلول ناضجة للعمل مع Kafka في Swift:

  • SwiftLiteKafka — غلاف خفيف الوزن بلغة C لمكتبة librdkafka، يدعم iOS وmacOS.
  • Perfect-Kafka — جزء من نظام Perfect البيئي، موجه لـ Swift من جانب الخادم (macOS/Linux)، ولكن يمكن تكييفه للعملاء.
  • KafkaSwift — تنفيذ نقي بلغة Swift (بدون تبعيات C)، ولكن بأداء محدود.

الأكثر استقرارًا وأداءً هو SwiftLiteKafka، لذا سنركز عليه فيما يلي.



تثبيت SwiftLiteKafka

يتم توزيع المكتبة عبر Swift Package Manager. أضف التبعية في Package.swift أو عبر Xcode:

// Package.swiftdependencies: [    .package(url: "https://github.com/swift-server/swift-lite-kafka.git", from: "1.0.0")]

لنظام iOS، يجب أيضًا تضمين دعم مكتبة C librdkafka — يتم سحبها تلقائيًا كتبعية.



مثال أساسي: المنتج (إرسال الرسائل)

لننشئ منتجًا بسيطًا يرسل سلسلة نصية إلى موضوع "test-topic":

import SwiftLiteKafka

let config = KafkaConfig()config.bootstrapServers = "localhost:9092"

let producer = try KafkaProducer(config: config)defer { producer.close() }

let message = KafkaMessage( value: "مرحباً من Swift!".data(using: .utf8)!, key: "key1".data(using: .utf8))

try producer.send(message, to: "test-topic")print("تم إرسال الرسالة")

لاحظ: send هو استدعاء متزامن. للإرسال غير المتزامن، استخدم عمليات الاسترجاع أو async/await (Swift 5.5+).



مثال أساسي: المستهلك (قراءة الرسائل)

مثال على الاشتراك في موضوع وقراءة الرسائل في حلقة:

import SwiftLiteKafka

let config = KafkaConfig()config.bootstrapServers = "localhost:9092"config.groupId = "swift-consumer-group"

let consumer = try KafkaConsumer(config: config)consumer.subscribe(topics: ["test-topic"])

while true { let message = try consumer.poll(timeout: .seconds(1)) if let msg = message { let value = String(data: msg.value, encoding: .utf8) ?? "nil" print("تم الاستلام: \\(value)") }}

للتطبيقات الحقيقية، يُوصى باستخدام async/await أو Combine لتجنب حظر الخيط الرئيسي.



إمكانيات متقدمة

  • SSL/TLS: إعداد التشفير عبر KafkaConfig (خصائص securityProtocol، sslCACertificate).

توصيات