Trabajo con Kafka en Swift (iOS/macOS): bibliotecas, clientes y ejemplos
\n\nApache Kafka es una plataforma distribuida para transmisión de datos en flujo, ampliamente utilizada para construir arquitecturas basadas en eventos, recopilación de registros, procesamiento de análisis y trabajo con microservicios. En el ecosistema Swift (iOS/macOS), Kafka no es una tecnología nativa, pero existen varias bibliotecas maduras que permiten integrar aplicaciones Swift con brokers de Kafka. En este artículo, analizaremos las herramientas principales, su instalación y escribiremos un productor y un consumidor simples en Swift.
\n\n¿Por qué necesitas Kafka en una aplicación Swift?
\nAunque Kafka se asocia más frecuentemente con el backend de servidores, las aplicaciones móviles y de escritorio en Swift pueden usar Kafka para:
\n- \n
- Recibir notificaciones push en tiempo real a través de WebSocket + Kafka; \n
- Enviar eventos de comportamiento del usuario a un servidor de análisis; \n
- Sincronizar datos entre múltiples dispositivos en tiempo real; \n
- Registrar eventos en el lado del cliente para su posterior envío a un sistema centralizado. \n
Bibliotecas principales para trabajar con Kafka en Swift
\nActualmente, existen tres enfoques principales para integrar Kafka en proyectos Swift:
\n\n1. Confluent Swift Client (recomendado)
\nConfluent Swift Client es un envoltorio oficial sobre librdkafka de la empresa Confluent. La biblioteca admite un conjunto completo de funciones: productores, consumidores, administración de tópicos, SSL, autenticación SASL. Funciona en iOS y macOS.
Instalación mediante Swift Package Manager:
\n// Package.swift\ndependencies: [\n .package(url: "https://github.com/confluentinc/confluent-kafka-swift.git", from: "0.1.0")\n]\n\nEjemplo de productor (Producer) en Swift
\nCreemos un productor simple que envía una cadena al tópico 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 = "¡Hola desde 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 al enviar: \\(error)")\n } else {\n print("Mensaje enviado a la partición \\(deliveryReport?.partition ?? -1)")\n }\n}\n\nproducer.flush()\n\nEjemplo de consumidor (Consumer) en 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) ?? "no se pudo decodificar"\n print("Recibido: \\(message)")\n }\n }\n}\n\n2. KafkaSwift (alternativa ligera)
\nKafkaSwift es una biblioteca minimalista escrita en Swift puro sin dependencias de bibliotecas C. Adecuada para escenarios simples, pero no admite funciones avanzadas (SSL, SASL, particionamiento).
\nInstalación: mediante CocoaPods: pod 'KafkaSwift'.
Ejemplo de envío:
\nimport KafkaSwift\n\nlet kafka = try Kafka(host: "localhost", port: 9092)\ntry kafka.send(message: "Mensaje de prueba", topic: "test-topic")\n\n3. Perfect-Kafka (para Swift del lado del servidor)
\nPerfect-Kafka es parte del framework Perfect, orientado a aplicaciones de servidor en Swift (macOS, Linux). Es