Trabalhando com Kafka em Swift (iOS/macOS)
Apache Kafka é uma plataforma distribuída para streaming de dados, amplamente utilizada em arquitetura de microsserviços, análise em tempo real e sistemas de troca de mensagens. Para desenvolvedores iOS/macOS, a integração com Kafka pode ser necessária ao criar aplicativos que processam eventos em tempo real, trabalham com dispositivos IoT ou interagem com um backend em Java/Go. Neste artigo, veremos as principais bibliotecas para trabalhar com Kafka em Swift, como conectá-las e exemplos de código.
Por que usar Kafka em aplicativos móveis/de desktop?
Embora o Kafka seja mais frequentemente associado ao lado do servidor, existem cenários em que aplicativos cliente interagem diretamente com os brokers:
- Logging e análise: envio de eventos de uso do aplicativo para o servidor.
- Chat e notificações: recebimento de mensagens em tempo real via Kafka em vez de WebSocket.
- Sincronização de dados: atualização de dados locais quando há alterações em um sistema distribuído.
- IoT e sensores: transmissão de dados do dispositivo para o servidor via Kafka.
Principais bibliotecas para Swift
Atualmente, existem várias soluções maduras para trabalhar com Kafka em Swift:
- SwiftLiteKafka — um wrapper leve em C para librdkafka, suporta iOS e macOS.
- Perfect-Kafka — parte do ecossistema Perfect, voltada para Swift no servidor (macOS/Linux), mas pode ser adaptada para clientes.
- KafkaSwift — uma implementação pura em Swift (sem dependências C), mas com desempenho limitado.
A mais estável e performática é considerada SwiftLiteKafka, portanto, vamos focar nela a seguir.
Instalação do SwiftLiteKafka
A biblioteca é distribuída via Swift Package Manager. Adicione a dependência no Package.swift ou via Xcode:
// Package.swiftdependencies: [ .package(url: "https://github.com/swift-server/swift-lite-kafka.git", from: "1.0.0")]Para iOS, também é necessário incluir o suporte à biblioteca C librdkafka — ela é automaticamente baixada como dependência.
Exemplo básico: Producer (envio de mensagens)
Vamos criar um produtor simples que envia uma string para o tópico "test-topic":
import SwiftLiteKafka
let config = KafkaConfig()config.bootstrapServers = "localhost:9092"
let producer = try KafkaProducer(config: config)defer { producer.close() }
let message = KafkaMessage( value: "Olá do Swift!".data(using: .utf8)!, key: "key1".data(using: .utf8))
try producer.send(message, to: "test-topic")print("Mensagem enviada")Observe: send é uma chamada síncrona. Para envio assíncrono, use callbacks ou async/await (Swift 5.5+).
Exemplo básico: Consumer (leitura de mensagens)
Exemplo de assinatura de tópico e leitura de mensagens em loop:
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("Recebido: \\(value)") }}Para aplicativos reais, recomenda-se usar async/await ou Combine para não bloquear a thread principal.
Recursos avançados
- SSL/TLS: configuração de criptografia via
KafkaConfig(propriedadessecurityProtocol,sslCACertificate
Também na biblioteca
Monitoramento de aplicações PHP com as bibliotecas php-ast e xhprof
iTextSharp para C# (.NET): guia completo com exemplos
Cache em Swift (iOS/macOS): Redis, NSCache e outras soluções
Trabalhando com datas em JavaScript (Node.js): bibliotecas populares
Trabalho com XML em Swift: parsing, criação e processamento de dados (iOS/macOS)