Travailler avec Kafka en Swift (iOS/macOS)
Apache Kafka est une plateforme distribuée de streaming de données, largement utilisée dans l'architecture de microservices, l'analyse en temps réel et les systèmes de messagerie. Pour les développeurs iOS/macOS, l'intégration de Kafka peut être nécessaire lors de la création d'applications qui traitent des événements en temps réel, fonctionnent avec des appareils IoT ou interagissent avec un backend en Java/Go. Dans cet article, nous examinerons les principales bibliothèques pour travailler avec Kafka en Swift, les méthodes pour les connecter et des exemples de code.
Pourquoi Kafka dans les applications mobiles/de bureau ?
Bien que Kafka soit plus souvent associé au côté serveur, il existe des scénarios où les applications clientes interagissent directement avec les courtiers :
- Journalisation et analyse : envoi d'événements d'utilisation de l'application au serveur.
- Chat et notifications : réception de messages en temps réel via Kafka au lieu de WebSocket.
- Synchronisation des données : mise à jour des données locales lors de modifications dans un système distribué.
- IoT et capteurs : transmission de données de l'appareil au serveur via Kafka.
Bibliothèques principales pour Swift
Actuellement, il existe plusieurs solutions matures pour travailler avec Kafka en Swift :
- SwiftLiteKafka — une surcouche légère en C pour librdkafka, prend en charge iOS et macOS.
- Perfect-Kafka — fait partie de l'écosystème Perfect, orienté vers le Swift serveur (macOS/Linux), mais peut être adapté pour les clients.
- KafkaSwift — une implémentation pure en Swift (sans dépendances C), mais avec des performances limitées.
La plus stable et la plus performante est considérée comme SwiftLiteKafka, c'est pourquoi nous allons l'examiner par la suite.
Installation de SwiftLiteKafka
La bibliothèque est distribuée via Swift Package Manager. Ajoutez la dépendance dans Package.swift ou via Xcode :
// Package.swiftdependencies: [ .package(url: "https://github.com/swift-server/swift-lite-kafka.git", from: "1.0.0")]Pour iOS, il est également nécessaire d'inclure le support de la bibliothèque C librdkafka — elle est automatiquement récupérée comme dépendance.
Exemple de base : Producteur (envoi de messages)
Créons un producteur simple qui envoie une chaîne dans le topic "test-topic" :
import SwiftLiteKafka
let config = KafkaConfig()config.bootstrapServers = "localhost:9092"
let producer = try KafkaProducer(config: config)defer { producer.close() }
let message = KafkaMessage( value: "Bonjour depuis Swift!".data(using: .utf8)!, key: "key1".data(using: .utf8))
try producer.send(message, to: "test-topic")print("Message envoyé")Notez que send est un appel synchrone. Pour un envoi asynchrone, utilisez des callbacks ou async/await (Swift 5.5+).
Exemple de base : Consommateur (lecture de messages)
Exemple d'abonnement à un topic et de lecture de messages en boucle :
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("Reçu : \\(value)") }}Pour les applications réelles, il est recommandé d'utiliser async/await ou Combine pour ne pas bloquer le thread principal.
Fonctionnalités avancées
- SSL/TLS : configuration du chiffrement via
KafkaConfig(propriétéssecurityProtocol,sslCACertificate).
Aussi dans la bibliothèque
Bibliothèque WebSocket Swift : Starscream pour iOS/macOS
candle Rust : guide complet avec exemples pratiques
Authentification et autorisation en Java : Spring Security et JWT
R.swift Swift : guide complet avec exemples et tutoriel