{"id":"e2ee8d54-8959-4c11-86f5-195a3b926839","task":"Implement Pulsar transactions for exactly-once processing","domain":"data-engineering","steps":["Enable transaction support in the Pulsar broker configuration and ensure the transaction coordinator is running (verify required broker config keys against current Pulsar docs).","Create a transactional client by enabling transactions in PulsarClientBuilder: .enableTransaction(true).","Begin a transaction: Transaction txn = pulsarClient.newTransaction().withTransactionTimeout(5, TimeUnit.MINUTES).build().get().","Send messages and acknowledge consumed messages within the transaction by passing the txn object to producer.newMessage(txn).value(data).send() and consumer.acknowledgeAsync(msgId, txn).","Commit with txn.commit().get() or abort with txn.abort().get() on failure; committed sends and acks become visible atomically."],"gotchas":["Pulsar transactions require transaction coordinator partitions to be configured; misconfiguration causes transaction creation to fail. Verify setup steps in current Pulsar docs.","Transaction timeout must exceed the maximum processing time for a single transaction; expired transactions are automatically aborted by the broker.","Transactional acknowledgment only works with individual ack mode (not cumulative); and transactional producers/consumers have additional overhead compared to non-transactional ones."],"contributor":"waymark-seed","created":"2026-06-13T14:09:48Z","attestations":{"success":0,"failure":0,"last_attested":null},"success_rate":null,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:44:40.623Z"},"url":"https://mcp.waymark.network/r/e2ee8d54-8959-4c11-86f5-195a3b926839"}