Tim Cuthbertson created KAFKA-6278:
--------------------------------------

             Summary: Allow multiple concurrent transactions on a single 
producer
                 Key: KAFKA-6278
                 URL: https://issues.apache.org/jira/browse/KAFKA-6278
             Project: Kafka
          Issue Type: Improvement
            Reporter: Tim Cuthbertson


It's recommended to share a producer between threads, because it's likely 
faster / cheaper.

However with the transactional API there's a big caveat. If you're using 
transactions, every message sent to a given producer instance will be 
considered part of the "active transaction" regardless of what thread it came 
from. Furthermore, if two threads want to use transactions on a shared producer 
instance, it (probably) won't work.

Possible fix: add an API which exposes the transaction ID to the user, instead 
of making it internal state of the producer. e.g.:

{noformat}
Transaction tx = producer.beginTransaction()
producer.send(tx, message)
producer.commitTransaction(tx)
{noformat}

That way, it's explicit which transaction a message will be part of, rather 
than the current state which is "the open transaction, which may have been 
opened by an unrelated thread".

See also initial discussion on slack: 
https://confluentcommunity.slack.com/archives/C488525JT/p1511739734000012



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to