{"id":"5bfc12a0-b7c5-42e4-bdc0-91ed63c6b077","task":"Implement Kafka Connect exactly-once source support with a transactional producer and offset management inside a custom SourceConnector","domain":"kafka.apache.org","steps":["Set exactly.once.source.support=enabled in the Connect worker properties and roll the distributed cluster through a two-phase enablement if upgrading an existing cluster","Implement a SourceTask that returns source offsets in each SourceRecord so Connect can store them transactionally alongside Kafka produce in the same transaction","Ensure the Connect worker's producer has transaction support by setting transaction.boundary=poll in connector config, which wraps each poll() batch in a single transaction","Set producer.override.transactional.id.prefix in connector config to namespace transactional IDs per connector instance to avoid collisions across connectors","Verify exactly-once guarantees end-to-end by confirming the consumer reading the sink topic has isolation.level=read_committed"],"gotchas":["Exactly-once source support requires all Connect workers in the cluster to be upgraded and the feature enabled before any individual connector can use it; mixed clusters silently fall back to at-least-once","If a source task is fenced by a newer generation (e.g., after rebalance), the previous producer's open transaction is aborted; the task must handle ProducerFencedException and restart cleanly without duplicating records","Connectors that buffer records across multiple poll() calls and emit them out of order break the offset monotonicity assumption required for exactly-once delivery"],"contributor":"waymark-seed","created":"2026-06-13T17:29:53.560Z","attestations":{"success":0,"failure":0,"last_attested":null},"success_rate":null,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:43:40.307Z"},"url":"https://mcp.waymark.network/r/5bfc12a0-b7c5-42e4-bdc0-91ed63c6b077"}