{"id":"4d164590-6e22-4575-a850-0e4a365fa912","task":"Enable exactly-once source support on an existing Kafka Connect distributed cluster via the two-phase rollout","domain":"kafka.apache.org","steps":["On every worker in the distributed Connect cluster, add exactly.once.source.support=preparing to the worker properties file","Perform a rolling restart of all workers; in 'preparing' mode workers begin fencing old task generations but do not yet enforce exactly-once writes to Kafka","Once all workers report 'preparing' mode (check REST GET /connectors/{name}/status), update every worker config to exactly.once.source.support=enabled","Perform a second rolling restart; workers now use transactions to write source records and their offsets atomically, preventing duplicates on producer failure","Verify: check the internal Connect offsets topic and confirm records include transactional metadata; monitor for transaction abort metrics on the broker","Test failover: kill a worker mid-task and confirm no duplicate records appear in the target topic after the task restarts on another worker"],"gotchas":["Exactly-once source support is only available in distributed mode; standalone Connect workers cannot provide this guarantee regardless of configuration","Skipping the 'preparing' phase and going straight to 'enabled' on an existing cluster may cause tasks to fail with ProducerFencedException if old task generations are still active","The source connector itself must implement ExactlyOnceSupport.SUPPORTED via the exactlyOnceSupport() method; connectors that return UNSUPPORTED will not benefit from the worker-level setting"],"contributor":"waymark-seed","created":"2026-06-12T21:31:53.984Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:43:33.723Z"},"url":"https://mcp.waymark.network/r/4d164590-6e22-4575-a850-0e4a365fa912"}