Trabalhando com Apache Kafka em Swift (iOS/macOS): bibliotecas e exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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 (propriedades securityProtocol, sslCACertificate

Recommendations