Hi,
There is a design document for transaction support linked at the bottom of 
KIP-98 that you can read here
https://docs.google.com/document/d/11Jqy_GjUGtdXJK94XGsEIK7CP1SnQGdp2eF0wSw9ra8 
.
That describes some of the recovery/retry mechanisms. The design relies on 
partition availability
to make forward progress. If components restart, they carry on from where they 
left off.

Andrew Schofield
IBM Event Streams

On 19/12/2018, 13:37, "Jose Raul Perez Rodriguez" 
<joseraul.subscript...@gmail.com> wrote:

    Hi, thanks for the answer, it was helpful.
    
    So, if there are several topic-partitions in a transaction, the reads 
    are eventually consistent; it is possible some message from that 
    transaction are not available yet, until some recovery/retry mechanism 
    is completed for the fail topic-partitions? If this is the case, what 
    kind of recovery/retry mechanism is implemented to deal with this, and 
    keep kafka transactions eventually consistent.
    
    Thanks in advance,
    
    
    On 12/19/18 2:17 PM, Andrew Schofield wrote:
    > Hi,
    > This is very similar to traditional two-phase commit. There are 
essentially multiple logs
    > being used - one per TopicPartition involved and the overall transaction 
log. At the point
    > where COMMIT is being written to the TopicPartitions, it is assumed that 
it will be possible to
    > write all of these without error and it is assumed that it will be 
possible to write COMMITTED
    > to the transaction log. Once a single COMMIT has been written, it's too 
late to abort the
    > transaction and everything has to go forwards to complete the commit to 
end up in a consistent
    > state.
    >
    > When a consumer sees COMMIT for a transaction, it can deliver any 
messages it has held
    > buffered for that transaction. It's not really sure whether COMMITTED was 
written successfully
    > and fully replicated. It would generally be considered "good enough" to 
make this assumption.
    >
    > Andrew Schofield
    > IBM Event Streams
    >
    > On 18/12/2018, 21:51, "Jose Raul Perez Rodriguez" 
<joseraul.subscript...@gmail.com> wrote:
    >
    >      Hi all,
    >      
    >      Reading this
    >      
<https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fcwiki.apache.org%2Fconfluence%2Fdisplay%2FKAFKA%2FKIP-98%2B-%2BExactly%2BOnce%2BDelivery%2Band%2BTransactional%2BMessaging&amp;data=02%7C01%7C%7Cf25d15fb694e498608da08d665b71564%7C84df9e7fe9f640afb435aaaaaaaaaaaa%7C1%7C0%7C636808234337757549&amp;sdata=MtPOa%2Fi8%2B2dRmvMpwOPGAfXHvBvTZ6%2FMDqHtz7iX6vU%3D&amp;reserved=0>
    >      document about transactions in Kafka, specifically epigraphs 5.2
    >      WriteTxnMarkerRequest and 5.3 Writing the final Commit or Abort 
Message.
    >      
    >      What I understand  from *5.2* is that the coordinator sends a "write 
txt
    >      market request" to each topic/partition leader in the transaction, 
then,
    >      each leader broker in those topic-partition write a Commit or Abort
    >      message to the log, then, using this information the Consumer for 
that
    >      particular topic-partition decide to read the messages (in case of
    >      Commit) or to drop the message (in case of Abort).
    >      
    >      My doubt is; those messages that passed the "write txt market 
request"
    >      phase for a particular topic-partition (the Commit cases) are just
    >      delivered to the user?, or hided from the user until full transaction
    >      confirms it Committed?, in the case is delivered to the user, there
    >      could be inconsistent reads, because another topic-partition could 
fail
    >      and then the full transaction needs to abort. On the other hand, if
    >      those messages are not delivered to user until the Consumer reads a
    >      Commit message for the full transaction *(5.3*), here is my second
    >      question; how this works?, i.e how a Consumer is aware that a 
particular
    >      message belonging to a transaction can be delivered to the user, i.e 
the
    >      transaction that owns the succeed message?
    >      
    >      I hope is clear this explanation, I have not found this question in 
any doc.
    >      
    >      Thanks in advance,
    >      
    >      
    >
    

Reply via email to