vamossagar12 opened a new pull request, #13801:
URL: https://github.com/apache/kafka/pull/13801

   Description from the ticket:
   When exactly-once support is enabled for source connectors, source offsets 
can potentially be written to two different offsets topics: a topic specific to 
the connector, and the global offsets topic (which was used for all connectors 
prior to KIP-618 / version 3.3.0).
   
   Precedence is given to offsets in the per-connector offsets topic, but if 
none are found for a given partition, then the global offsets topic is used as 
a fallback.
   
   When committing offsets, a transaction is used to ensure that source records 
and source offsets are written to the Kafka cluster targeted by the source 
connector. This transaction only includes the connector-specific offsets topic. 
Writes to the global offsets topic take place after writes to the 
connector-specific offsets topic have completed successfully, and if they fail, 
a warning message is logged, but no other action is taken.
   
   Normally, this ensures that, for offsets committed by exactly-once-supported 
source connectors, the per-connector offsets topic is at least as up-to-date as 
the global offsets topic, and sometimes even ahead.
   
   However, for tombstone offsets, we lose that guarantee. If a tombstone 
offset is successfully written to the per-connector offsets topic, but cannot 
be written to the global offsets topic, then the global offsets topic will 
still contain that source offset, but the per-connector topic will not. Due to 
the fallback-on-global logic used by the worker, if a task requests offsets for 
one of the tombstoned partitions, the worker will provide it with the offsets 
present in the global offsets topic, instead of indicating to the task that no 
offsets can be found.
   
   This PR explicitly fails the offset flush for cases when the dual write 
fails on secondary store. Note that one of the proposed approaches on the JIRA 
ticket was to explicitly write tombstone records to secondary stores first 
before attempting to write to primary store. This PR doesn't choose to do so 
for 2 reasons =>
   
   1. Tombstone events happening are rare events as per ticket. And the 
probability of them failing on secondary and succeeding on primary is even 
lesser than that.
   2. There is no guarantee that when we explicitly write tombstone records to 
secondary store, the write would succeed. So, we might still end up in the same 
situation as above.
   Considering these things, this PR errs on the side of correctness for these 
rare events.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: jira-unsubscr...@kafka.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to