Trabalhando com Kafka em Kotlin: visão geral das bibliotecas e exemplos práticos
Apache Kafka é uma plataforma distribuída para processamento de fluxo de dados, que se tornou o padrão de facto na arquitetura de microsserviços. Kotlin, sendo uma linguagem JVM moderna, é totalmente compatível com o ecossistema Java, permitindo o uso de todas as bibliotecas populares para Kafka. Neste artigo, abordaremos três abordagens principais: o cliente Java oficial do Kafka, o Spring Kafka e a biblioteca leve Kafkakit. Todos os exemplos são escritos em Kotlin.
1. Cliente Kafka Oficial (Cliente Java)
A biblioteca kafka-clients da Apache é a base sobre a qual todas as outras abstrações são construídas. Ela fornece uma API de baixo nível para produtores e consumidores. Para Kotlin, basta adicionar a dependência no build.gradle.kts:
implementation("org.apache.kafka:kafka-clients:3.6.0")Exemplo de produtor em Kotlin
import org.apache.kafka.clients.producer.KafkaProducerimport org.apache.kafka.clients.producer.ProducerRecordimport java.util.Properties
fun createProducer(): KafkaProducer<String, String> { val props = Properties().apply { put("bootstrap.servers", "localhost:9092") put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer") put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer") } return KafkaProducer(props)}
fun main() { val producer = createProducer() val record = ProducerRecord("my-topic", "key1", "Hello from Kotlin!") producer.send(record) { metadata, exception -> if (exception != null) { println("Erro ao enviar: ${exception.message}") } else { println("Enviado para partition ${metadata.partition()} offset ${metadata.offset()}") } } producer.close()}Exemplo de consumidor em Kotlin
import org.apache.kafka.clients.consumer.ConsumerRecordsimport org.apache.kafka.clients.consumer.KafkaConsumerimport java.time.Durationimport java.util.Properties
fun createConsumer(): KafkaConsumer<String, String> { val props = Properties().apply { put("bootstrap.servers", "localhost:9092") put("group.id", "kotlin-group") put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer") put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer") put("auto.offset.reset", "earliest") } return KafkaConsumer(props)}
fun main() { val consumer = createConsumer() consumer.subscribe(listOf("my-topic"))
while (true) { val records: ConsumerRecords<String, String> = consumer.poll(Duration.ofMillis(100)) records.forEach { record -> println("Recebido: key=${record.key()}, value=${record.value()}, offset=${record.offset()}") } }}2. Spring Kafka com Kotlin
Se você está usando Spring Boot, o Spring Kafka é a escolha natural. Ele fornece uma abordagem declarativa por meio de anotações e configuração automática. Adicione a dependência:
implementation("org.springframework.kafka:spring-kafka")Configuração no application.yml
spring: kafka: bootstrap-servers: localhost:9092 producer: key-serializer: org.apache.kafka.common.serialization.StringSerializer value-serializer: org.apache.kafka.common.serialization.StringSerializer consumer: group-id: spring-kotlin-group key-deserializer: org.apache.kafka.common.serialization.StringDeserializer value-deserializer: org.apache.kafka.common.serialization.StringDeserializer auto-offset-reset: earliestProdutor com KafkaTemplate
import org.springfram