العمل مع Kafka في Kotlin: نظرة عامة على المكتبات وأمثلة عملية
Apache Kafka هي منصة موزعة لمعالجة البيانات المتدفقة، والتي أصبحت المعيار الفعلي في بنية الخدمات المصغرة. Kotlin، كونه لغة JVM حديثة، متوافق تمامًا مع نظام Java البيئي، مما يسمح باستخدام جميع المكتبات الشائعة لـ Kafka. في هذه المقالة، سننظر في ثلاثة مناهج رئيسية: عميل Java الرسمي لـ Kafka، وSpring Kafka، والمكتبة خفيفة الوزن Kafkakit. جميع الأمثلة مكتوبة بلغة Kotlin.
1. عميل Kafka الرسمي (عميل Java)
مكتبة kafka-clients من Apache هي الأساس الذي تُبنى عليه جميع التغليفات الأخرى. توفر واجهة برمجة تطبيقات منخفضة المستوى للمنتجين والمستهلكين. بالنسبة لـ Kotlin، يكفي إضافة التبعية في build.gradle.kts:
implementation("org.apache.kafka:kafka-clients:3.6.0")مثال على المنتج بلغة 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("خطأ في الإرسال: ${exception.message}") } else { println("تم الإرسال إلى القسم ${metadata.partition()} الإزاحة ${metadata.offset()}") } } producer.close()}مثال على المستهلك بلغة 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("تم الاستلام: key=${record.key()}, value=${record.value()}, offset=${record.offset()}") } }}2. Spring Kafka مع Kotlin
إذا كنت تستخدم Spring Boot، فإن Spring Kafka هو الخيار الطبيعي. يوفر نهجًا تصريحيًا من خلال التعليقات التوضيحية والتكوين التلقائي. أضف التبعية:
implementation("org.springframework.kafka:spring-kafka")التكوين في 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المنتج باستخدام KafkaTemplate
import org.springfram