Travailler avec Apache Kafka en Swift (iOS/macOS) : bibliothèques et exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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és securityProtocol, sslCACertificate).

Recommendations