Sobes.tech
Senior

Au fost utilizate tranzacții Kafka (semantica exact o dată)?

sobes.tech AI

Răspuns de la AI

Da, Apache Kafka suportă tranzacții care asigură semantica exactly-once în timpul scrierii mesajelor. Acest lucru se realizează cu ajutorul unui producător tranzacțional care grupează mai multe înregistrări într-o operație atomică. În Kotlin, folosind API-ul Kafka Producer, se pot configura tranzacții pentru a garanta că mesajele fie sunt complet scrise, fie nu sunt deloc, evitând duplicarea în caz de defecțiuni.

Exemplu de inițializare a unui producător tranzacțional în Kotlin:

val props = Properties().apply {
    put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092")
    put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer::class.java.name)
    put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer::class.java.name)
    put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG, "true")
    put(ProducerConfig.TRANSACTIONAL_ID_CONFIG, "my-transactional-id")
}

val producer = KafkaProducer<String, String>(props)
producer.initTransactions()

try {
    producer.beginTransaction()
    producer.send(ProducerRecord("topic", "key", "value"))
    // alte operații
    producer.commitTransaction()
} catch (e: Exception) {
    producer.abortTransaction()
}