Travailler avec Kafka en Kotlin : aperçu des bibliothèques et exemples pratiques
Apache Kafka est une plateforme distribuée de traitement de flux de données, devenue un standard de facto dans l'architecture microservices. Kotlin, en tant que langage JVM moderne, est entièrement compatible avec l'écosystème Java, ce qui permet d'utiliser toutes les bibliothèques populaires pour Kafka. Dans cet article, nous examinerons trois approches principales : le client Java officiel de Kafka, Spring Kafka et la bibliothèque légère Kafkakit. Tous les exemples sont écrits en Kotlin.
1. Client Kafka officiel (client Java)
La bibliothèque kafka-clients d'Apache est la base sur laquelle toutes les autres surcouches sont construites. Elle fournit une API de bas niveau pour les producteurs et les consommateurs. Pour Kotlin, il suffit d'ajouter la dépendance dans build.gradle.kts :
implementation("org.apache.kafka:kafka-clients:3.6.0")Exemple de producteur 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("Erreur d'envoi : ${exception.message}") } else { println("Envoyé dans la partition ${metadata.partition()} offset ${metadata.offset()}") } } producer.close()}Exemple de consommateur 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("Reçu : key=${record.key()}, value=${record.value()}, offset=${record.offset()}") } }}2. Spring Kafka avec Kotlin
Si vous utilisez Spring Boot, Spring Kafka est le choix naturel. Il offre une approche déclarative via des annotations et une configuration automatique. Ajoutez la dépendance :
implementation("org.springframework.kafka:spring-kafka")Configuration dans 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: earliestProducteur avec KafkaTemplate
import org.springfram Aussi dans la bibliothèque
Travailler avec Kafka en Swift (iOS/macOS) : bibliothèques, clients et exemples
ORM pour Swift (iOS/macOS) : comparaison et exemples d'utilisation
gRPC C++ : Guide complet avec exemples pour développeurs
Travailler avec les archives ZIP en Java : guide complet de java.util.zip