Spring framework works around this by providing a method like doInTransaction( listofstuff).
Behind the scenes it manages a pool of transactional producers with ids like transaction_prefix + id. So each call to dointransaction may initiate a transaction. On Friday, November 15, 2019, Matthias J. Sax <matth...@confluent.io> wrote: > That's correct. And each would need to use a different `transactional.id`. > > > -Matthias > > On 11/14/19 11:17 AM, Anindya Haldar wrote: > > Thanks for the information. Does that mean that each producer thread, in > case it wants to have its own transactions, should use its own instance of > KafkaProducer? > > > > Sincerely, > > Anindya Haldar > > Oracle Responsys > > > > > >> On Nov 13, 2019, at 11:31 PM, Matthias J. Sax <matth...@confluent.io> > wrote: > >> > >> That is not possible. A producer can only have a single open > >> transaction. If your example, the call of thread-2 to start a new > >> transactions would fail and an exception would be thrown. > >> > >> -Matthias > >> > >> On 11/13/19 10:52 AM, Anindya Haldar wrote: > >>> The producer API doc (https://kafka.apache.org/23/ > javadoc/index.html?org/apache/kafka/clients/producer/KafkaProducer.html < > https://kafka.apache.org/23/javadoc/index.html?org/apache/ > kafka/clients/producer/KafkaProducer.html>) says that KafkaProducer is > thread safe. > >>> > >>> What I was trying to figure out is what the relationship is between a > thread context and a transaction initiated in that thread. When multiple > threads are using a single producer instance and initiating transactions > are those transaction boundaries scoped to the thread context, or do they > step on each others’ toes? > >>> > >>> Suppose two threads are sharing the same producer instance the > following way: > >>> > >>> thread-1 begins a transaction T1 > >>> thread-1 starts sending messages in T! > >>> thread-2 begins a transaction T2 > >>> thread-2 sends some messages in T2 > >>> thread-2 gets and error and rolls back its transaction T2 > >>> > >>> At this point does the rollback of transaction T2 by the thread-2 > affect the transaction T1 remaining open and used by thread-1 in any > fashion? It is not clear to me from the API documentation. Will very much > appreciate some insights into the behavior here. Similar questions also > arise for commits by threads independently of each other. > >>> > >>> Sincerely, > >>> Anindya Haldar > >>> Oracle Responsys > >>> > >>> > >> > > > > -- Sorry this was sent from mobile. Will do less grammar and spell check than usual.