Trabajo con Kafka en Kotlin: visión general de bibliotecas y ejemplos prácticos
Apache Kafka es una plataforma distribuida para el procesamiento de datos en flujo, que se ha convertido en el estándar de facto en la arquitectura de microservicios. Kotlin, al ser un lenguaje JVM moderno, es completamente compatible con el ecosistema Java, lo que permite utilizar todas las bibliotecas populares para Kafka. En este artículo, analizaremos tres enfoques principales: el cliente oficial de Kafka para Java, Spring Kafka y la biblioteca ligera Kafkakit. Todos los ejemplos están escritos en Kotlin.
1. Cliente oficial de Kafka (Cliente Java)
La biblioteca kafka-clients de Apache es la base sobre la que se construyen todos los demás envoltorios. Proporciona una API de bajo nivel para productores y consumidores. Para Kotlin, basta con añadir la dependencia en build.gradle.kts:
implementation("org.apache.kafka:kafka-clients:3.6.0")Ejemplo de productor en 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("Error de envío: ${exception.message}") } else { println("Enviado a partición ${metadata.partition()} offset ${metadata.offset()}") } } producer.close()}Ejemplo de consumidor en 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("Recibido: key=${record.key()}, value=${record.value()}, offset=${record.offset()}") } }}2. Spring Kafka con Kotlin
Si usas Spring Boot, Spring Kafka es la elección natural. Proporciona un enfoque declarativo mediante anotaciones y configuración automática. Añade la dependencia:
implementation("org.springframework.kafka:spring-kafka")Configuración en 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: earliestProductor con KafkaTemplate
import org.springfram También en la biblioteca
Anvil para Kotlin: guía completa con ejemplos prácticos
Rate Limiting en Kotlin: bibliotecas y ejemplos prácticos
Planificador de tareas PHP: gestor de colas similar a cron en PHP