在 Kotlin 中使用 Kafka:库、配置与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 Kotlin 中使用 Kafka:库概览与实践示例



Apache Kafka 是一个分布式事件流平台,广泛应用于现代微服务架构中。在 Kotlin 生态系统中,有两个主要库可用于 Kafka:Kafka Clients(Apache 官方 Java 客户端)和 Kafka Streams(流处理库)。由于 Kotlin 与 Java 完全兼容,您可以直接使用这些库,也可以使用 Kotlin 特有的封装来编写更简洁的代码。



1. Kafka Clients —— 生产者和消费者的基本操作



Apache Kafka Clients 是官方 Java 库,提供了用于发送和接收消息的低级 API。在 Kotlin 中,通过 Maven 或 Gradle 引入:



// build.gradle.ktsdependencies {    implementation("org.apache.kafka:kafka-clients:3.6.0")}


以下是用 Kotlin 创建生产者(producer)的示例:



import org.apache.kafka.clients.producer.KafkaProducerimport org.apache.kafka.clients.producer.ProducerRecordimport java.util.Properties

fun main() { 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") }

val producer = KafkaProducer<String, String>(props) val record = ProducerRecord("my-topic", "key1", "Hello from Kotlin!")

producer.send(record) { metadata, exception -> if (exception != null) { println("发送错误:${exception.message}") } else { println("已发送到分区 ${metadata.partition()},偏移量 ${metadata.offset()}") } }

producer.close()}


类似地,创建消费者(consumer)来读取消息:



import org.apache.kafka.clients.consumer.ConsumerRecordsimport org.apache.kafka.clients.consumer.KafkaConsumerimport java.time.Durationimport java.util.Properties

fun main() { val props = Properties().apply { put("bootstrap.servers", "localhost:9092") put("group.id", "my-group") put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer") put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer") put("auto.offset.reset", "earliest") }

val consumer = KafkaConsumer<String, String>(props) consumer.subscribe(listOf("my-topic"))

while (true) { val records: ConsumerRecords<String, String> = consumer.poll(Duration.ofMillis(100)) records.forEach { record -> println("收到:键 = ${record.key()},值 = ${record.value()},偏移量 = ${record.offset()}") } }}


2. Kafka Streams —— 流式数据处理



Kafka Streams 是一个用于构建基于 Kafka 的流处理应用程序的库。它允许在客户端直接执行数据流的转换、聚合和连接。引入方式:



dependencies {    implementation("org.apache.kafka:kafka-streams:3.6.0")}


以下是一个简单应用程序的示例,它从主题中读取消息,将其转换为大写,然后写入另一个主题:



import org.apache.kafka.streams.KafkaStreamsimport org.apache.kafka.streams.StreamsBuilderimport org.apache.kafka.streams.StreamsConfigimport org.apache.kafka.streams.kstream.KStreamimport java.util.Properties

fun main() { val props = Properties().apply { put(StreamsConfig.APPLICATION_ID_CONFIG, "uppercase-app") put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "local

推荐