Trabajo con Kafka en Kotlin: bibliotecas y ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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: earliest


Productor con KafkaTemplate



import org.springfram                    

Recommendations