Sobes.tech
Senior

Ar buvo naudojamos Kafka transakcijos (tiksliai vieną kartą semantika)?

sobes.tech AI

Atsakymas iš AI

Taip, Apache Kafka palaiko transakcijas, kurios užtikrina tiksliai vieną kartą (exactly-once) semantiką įrašant pranešimus. Tai pasiekiama naudojant transakcijų gamintoją, kuris grupuoja kelis įrašus į vieną atominę operaciją. Kotlin'e, naudojant Kafka Producer API, galima konfigūruoti transakcijas, kad būtų garantuota, jog pranešimai arba visiškai įrašomi, arba visai ne, išvengiant dubliavimosi klaidų atveju.

Pavyzdys, kaip inicijuoti transakcijų gamintoją Kotlin'e:

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"))
    // kitos operacijos
    producer.commitTransaction()
} catch (e: Exception) {
    producer.abortTransaction()
}