Hey Matthias, I'm not sure I follow your question, the producer will not automatically close when there is fatal error IIUC.
Boyang On Tue, May 5, 2020 at 6:16 PM 张祥 <xiangzhang1...@gmail.com> wrote: > Thanks for the comment Matthias. > > In fact, I cannot think of why we cannot close the producer no matter what. > On the other hand, it is also okay to reuse the producer when the error is > not fatal. @Guozhang Wang <wangg...@gmail.com> @Boyang Chen > <boy...@confluent.io> > > Matthias J. Sax <mj...@apache.org> 于2020年5月1日周五 上午7:52写道: > > > Thanks for the KIP. Make sense to me. I think you can start a vote. > > > > One minor comment about the code example: From my understanding, a > > producer should always be closed (independent if there was no error, a > > transient error, or a fatal error). If that is correct, than the code > > example seems to be miss-leading? > > > > > > -Matthias > > > > On 4/25/20 6:08 PM, 张祥 wrote: > > > Sorry, but this KIP is still open to discussion, any comments and ideas > > > would be appreciated, Thanks. > > > > > > 张祥 <xiangzhang1...@gmail.com> 于2020年4月17日周五 下午1:04写道: > > > > > >> Guozhang, thanks for the valuable suggestion. > > >> > > >> A new part called "suggested coding pattern" has been added and I copy > > the > > >> core code here: > > >> > > >> try { > > >> producer.beginTransaction(); > > >> for (int i = 0; i < 100; i++) > > >> producer.send(new ProducerRecord<>("my-topic", > > >> Integer.toString(i), Integer.toString(i))); > > >> producer.commitTransaction(); > > >> } catch (Exception e) { > > >> producer.abortTransaction(); > > >> if(e instanceof IllegalStateException || > > >> e instanceof ProducerFencedException || > > >> e instanceof UnsupportedVersionException || > > >> e instanceof AuthorizationException || > > >> e instanceof OutOfOrderSequenceException) { > > >> producer.close(); > > >> } > > >> } > > >> > > >> As you can see, in the catch block, all fatal exceptions need to be > > >> listed, I am not sure I have listed all of them and I wonder if there > > is a > > >> better way to do this. > > >> > > >> > > >> Guozhang Wang <wangg...@gmail.com> 于2020年4月17日周五 上午8:50写道: > > >> > > >>> Xiang, thanks for the written KIP. I just have one meta comment and > > >>> otherwise it looks good to me: could you also add a section about > > >>> suggested > > >>> coding patterns (especially how try - catch should be implemented) as > > we > > >>> discussed on the JIRA to the wiki page as well? > > >>> > > >>> And please also note that besides the javadoc of the function, on top > > of > > >>> the KafkaProducer class there are also comments regarding example > > snippet: > > >>> > > >>> ``` > > >>> > > >>> * <pre> > > >>> * {@code > > >>> * Properties props = new Properties(); > > >>> * props.put("bootstrap.servers", "localhost:9092"); > > >>> * props.put("transactional.id", "my-transactional-id"); > > >>> * Producer<String, String> producer = new KafkaProducer<>(props, new > > >>> StringSerializer(), new StringSerializer()); > > >>> * > > >>> * producer.initTransactions(); > > >>> * > > >>> * try { > > >>> * producer.beginTransaction(); > > >>> * for (int i = 0; i < 100; i++) > > >>> * producer.send(new ProducerRecord<>("my-topic", > > >>> Integer.toString(i), Integer.toString(i))); > > >>> * producer.commitTransaction(); > > >>> * } catch (ProducerFencedException | OutOfOrderSequenceException | > > >>> AuthorizationException e) { > > >>> * // We can't recover from these exceptions, so our only option > is > > >>> to close the producer and exit. > > >>> * producer.close(); > > >>> * } catch (KafkaException e) { > > >>> * // For all other exceptions, just abort the transaction and try > > >>> again. > > >>> * producer.abortTransaction(); > > >>> * } > > >>> * producer.close(); > > >>> > > >>> * } </pre> > > >>> ``` > > >>> > > >>> I think with this change we do not need to educate users that they > > should > > >>> distinguish the types of exceptions when calling `abortTxn`, instead > > they > > >>> only need to depend on the exception to decide whether to `close` the > > >>> producer, so the above recommendation could look like: > > >>> > > >>> try { > > >>> > > >>> } catch {Exception e} { > > >>> > > >>> producer.abortTxn; > > >>> > > >>> if (e instanceof /*fatal exceptions*/) { > > >>> producer.close(); > > >>> } > > >>> } > > >>> > > >>> > > >>> Guozhang > > >>> > > >>> On Thu, Apr 16, 2020 at 12:14 AM 张祥 <xiangzhang1...@gmail.com> > wrote: > > >>> > > >>>> Thanks for the structure change Boyang. And I agree with you on the > > weak > > >>>> proposal part, I have adjusted it according to your suggestion. > Thanks > > >>>> again! > > >>>> > > >>>> Boyang Chen <reluctanthero...@gmail.com> 于2020年4月16日周四 下午2:39写道: > > >>>> > > >>>>> Thanks for the KIP Xiang! > > >>>>> > > >>>>> I think the motivation looks good, and I just did a slight > structure > > >>>> change > > >>>>> to separate "Proposed Changes" and "Public Interfaces", hope you > > don't > > >>>>> mind. > > >>>>> > > >>>>> However, "we can determine whether the producer client is already > in > > >>>> error > > >>>>> state in abortTransaction" sounds a bit weak about the actual > > >>> proposal, > > >>>>> instead we could propose something as "we would remember whether a > > >>> fatal > > >>>>> exception has already been thrown to the application level, so that > > in > > >>>>> abort transaction we will not throw again, thus making the function > > >>> safe > > >>>> to > > >>>>> be called in an error state". > > >>>>> > > >>>>> Other than that, I think the KIP is in pretty good shape. > > >>>>> > > >>>>> Boyang > > >>>>> > > >>>>> On Wed, Apr 15, 2020 at 7:07 PM 张祥 <xiangzhang1...@gmail.com> > wrote: > > >>>>> > > >>>>>> Hi everyone, > > >>>>>> > > >>>>>> I have opened a small KIP about safely aborting transaction during > > >>>>>> shutdown. I'd like to use this thread to discuss about it and any > > >>>>> feedback > > >>>>>> is appreciated (sorry for earlier KIP number mistake). Here is a > > >>> link > > >>>> to > > >>>>>> KIP-596 : > > >>>>>> > > >>>>>> > > >>>>> > > >>>> > > >>> > > > https://cwiki.apache.org/confluence/display/KAFKA/KIP-596%3A+Safely+abort+Producer+transactions+during+application+shutdown > > >>>>>> > > >>>>>> Thank you! > > >>>>>> > > >>>>> > > >>>> > > >>> > > >>> > > >>> -- > > >>> -- Guozhang > > >>> > > >> > > > > > > > >