Thanks for the clearly written KIP, no further comments from my end. -Bill
On Wed, Dec 6, 2017 at 9:52 AM, Matt Farmer <m...@frmr.me> wrote: > There is already a vote thread for this KIP. I can bump it so that it’s > towards the top of your inbox. > > With regard to your concerns: > > 1) We do not have the "ProductionExceptionHandler" interface defined in the > wiki page, thought it is sort of clear that it is a one-function interface > with record and exception. Could you add it? > > > It is defined, it’s just not defined using a code snippet. The KIP reads as > follows: > > === > > A public interface named ProductionExceptionHandler with a single method, > handle, that has the following signature: > > - ProductionExceptionHandlerResponse handle(ProducerRecord<byte[], > byte[]> record, Exception exception) > > > === > > If you’d like me to add a code snippet illustrating this that’s simple for > me to do, but it seemed superfluous. > > 2) A quick question about your example code: where would be the "logger" > object be created? > > > SLF4J loggers are typically created as a class member in the class. Such > as: > > private Logger logger = LoggerFactory.getLogger(HelloWorld.class); > > I omit that in my implementation examples for brevity. > > On December 6, 2017 at 2:14:58 AM, Guozhang Wang (wangg...@gmail.com) > wrote: > > Hello Matt, > > Thanks for writing up the KIP. I made a pass over it and here is a few > minor comments. I think you can consider starting a voting thread for this > KIP while addressing them. > > 1) We do not have the "ProductionExceptionHandler" interface defined in the > wiki page, thought it is sort of clear that it is a one-function interface > with record and exception. Could you add it? > > 2) A quick question about your example code: where would be the "logger" > object be created? Note that the implementation of this interface have to > give a non-param constructor, or as a static field of the class but in that > case you would not be able to log which instance is throwing this error (we > may have multiple producers within a single instance, even within a > thread). Just a reminder to consider in your implementation. > > > Guozhang > > On Tue, Dec 5, 2017 at 3:15 PM, Matthias J. Sax <matth...@confluent.io> > wrote: > > > Thanks a lot for the update! Great write-up! Very clearly explained what > > the change will look like! > > > > Looks good to me. No further comments from my side. > > > > > > -Matthias > > > > > > On 12/5/17 9:14 AM, Matt Farmer wrote: > > > I have updated this KIP accordingly. > > > > > > Can you please take a look and let me know if what I wrote looks > correct > > to > > > you? > > > > > > https://cwiki.apache.org/confluence/display/KAFKA/KIP- > > 210+-+Provide+for+custom+error+handling++when+Kafka+ > > Streams+fails+to+produce > > > > > > Thanks! > > > > > > Matt > > > > > > > > > On December 4, 2017 at 9:39:13 PM, Matt Farmer (m...@frmr.me) wrote: > > > > > > Hey Matthias, thanks for getting back to me. > > > > > > That's fine. But if we add it to `test` package, we don't need to talk > > > about it in the KIP. `test` is not public API. > > > > > > Yes, that makes sense. It was in the KIP originally because I was, at > one > > > point, planning on including it. We can remove it now that we’ve > decided > > we > > > won’t include it in the public API. > > > > > > Understood. That makes sense. We should explain this clearly in the KIP > > > and maybe log all other following exceptions at DEBUG level? > > > > > > > > > I thought it was clear in the KIP, but I can go back and double check > my > > > wording and revise it to try and make it clearer. > > > > > > I’ll take a look at doing more work on the KIP and the Pull Request > > > tomorrow. > > > > > > Thanks again! > > > > > > On December 4, 2017 at 5:50:33 PM, Matthias J. Sax ( > > matth...@confluent.io) > > > wrote: > > > > > > Hey, > > > > > > About your questions: > > > > > >>>> Acknowledged, so is ProducerFencedException the only kind of > > exception I > > >>>> need to change my behavior on? Or are there other types I need to > > > check? Is > > >>>> there a comprehensive list somewhere? > > > > > > I cannot think if any other atm. We should list all fatal exceptions > for > > > which we don't call the handler and explain why (exception is "global" > > > and will affect all other records, too | ProducerFenced is > self-healing). > > > > > > We started to collect and categorize exception here (not completed > yet): > > > https://cwiki.apache.org/confluence/display/KAFKA/ > > Kafka+Streams+Architecture#KafkaStreamsArchitecture-TypesofExceptions > > > : > > > > > > This list should be a good starting point though. > > > > > >> I include it in the test package because I have tests that assert that > > if > > >> the record collector impl encounters an Exception and receives a > > CONTINUE > > >> that it actually does CONTINUE. > > > > > > That's fine. But if we add it to `test` package, we don't need to talk > > > about it in the KIP. `test` is not public API. > > > > > >> I didn't want to invoke the handler in places where the CONTINUE or > FAIL > > >> result would just be ignored. Presumably, after a FAIL has been > > returned, > > >> subsequent exceptions are likely to be repeats or noise from my > > >> understanding of the code paths. If this is incorrect we can revisit. > > > > > > Understood. That makes sense. We should explain this clearly in the KIP > > > and maybe log all other following exceptions at DEBUG level? > > > > > > > > > -Matthias > > > > > > > > > On 12/1/17 11:43 AM, Matt Farmer wrote: > > >> Bump! It's been three days here and I haven't seen any further > feedback. > > >> Eager to get this resolved, approved, and merged. =) > > >> > > >> On Tue, Nov 28, 2017 at 9:53 AM Matt Farmer <m...@frmr.me> wrote: > > >> > > >>> Hi there, sorry for the delay in responding. Last week had a holiday > > and > > >>> several busy work days in it so I'm just now getting around to > > > responding. > > >>> > > >>>> We would only exclude > > >>>> exception Streams can handle itself (like ProducerFencedException) > -- > > >>>> thus, if the handler has code to react to this, it would not be bad, > > as > > >>>> this code is just never called. > > >>> [...] > > >>>> Thus, I am still in favor of not calling the > > ProductionExceptionHandler > > >>>> for fatal exception. > > >>> > > >>> Acknowledged, so is ProducerFencedException the only kind of > exception > > I > > >>> need to change my behavior on? Or are there other types I need to > > check? > > > Is > > >>> there a comprehensive list somewhere? > > >>> > > >>>> About the "always continue" case. Sounds good to me to remove it > (not > > >>>> sure why we need it in test package?) > > >>> > > >>> I include it in the test package because I have tests that assert > that > > if > > >>> the record collector impl encounters an Exception and receives a > > CONTINUE > > >>> that it actually does CONTINUE. > > >>> > > >>>> What is there reasoning for invoking the handler only for the first > > >>>> exception? > > >>> > > >>> I didn't want to invoke the handler in places where the CONTINUE or > > FAIL > > >>> result would just be ignored. Presumably, after a FAIL has been > > returned, > > >>> subsequent exceptions are likely to be repeats or noise from my > > >>> understanding of the code paths. If this is incorrect we can revisit. > > >>> > > >>> Once I get the answers to these questions I can make another pass on > > the > > >>> pull request! > > >>> > > >>> Matt > > >>> > > >>> On Mon, Nov 20, 2017 at 4:07 PM Matthias J. Sax < > matth...@confluent.io > > > > > >>> wrote: > > >>> > > >>>> Thanks for following up! > > >>>> > > >>>> One thought about an older reply from you: > > >>>> > > >>>>>>>> I strongly disagree here. The purpose of this handler isn't > *just* > > > to > > >>>>>>>> make a decision for streams. There may also be desirable side > > >>>> effects that > > >>>>>>>> users wish to cause when production exceptions occur. There may > be > > >>>>>>>> side-effects that they wish to cause when > AuthenticationExceptions > > >>>> occur, > > >>>>>>>> as well. We should still give them the hooks to preform those > side > > >>>> effects. > > >>>> > > >>>> And your follow up: > > >>>> > > >>>>>> - I think I would rather invoke it for all exceptions that could > > >>>> occur > > >>>>>> from attempting to produce - even those exceptions were returning > > >>>> CONTINUE > > >>>>>> may not be a good idea (e.g. Authorization exception). Until there > > >>>> is a > > >>>>>> different type for exceptions that are totally fatal (for example > a > > >>>>>> FatalStreamsException or some sort), maintaining a list of > > >>>> exceptions that > > >>>>>> you can intercept with this handler and exceptions you cannot > would > > >>>> be > > >>>>>> really error-prone and hard to keep correct. > > >>>> > > >>>> I understand what you are saying, however, consider that Streams > needs > > >>>> to die for a fatal exception. Thus, if you call the handler for a > > fatal > > >>>> exception, we would need to ignore the return value and fail -- this > > >>>> seems to be rather intuitive. Furthermore, users can register an > > >>>> uncaught-exception-handler and side effects for fatal errors can be > > >>>> triggered there. > > >>>> > > >>>> Btw: an AuthorizationException is fatal -- not sure what you mean by > > an > > >>>> "totally fatal" exception -- there is no superlative to fatal from > my > > >>>> understanding. > > >>>> > > >>>> About maintaining a list of exceptions: I don't think this is too > > hard, > > >>>> and users also don't need to worry about it IMHO. We would only > > exclude > > >>>> exception Streams can handle itself (like ProducerFencedException) > -- > > >>>> thus, if the handler has code to react to this, it would not be bad, > > as > > >>>> this code is just never called. In case that there is an exception > > >>>> Streams could actually handle but we still call the handler (ie, > bug), > > >>>> there should be no harm either -- the handler needs to return either > > >>>> CONTINUE or FAIL and we would obey. It could only happen, that > Streams > > >>>> dies---as request by the user(!)---even if Streams could actually > > handle > > >>>> the error and move on. But this seems to be not a issue from my > point > > of > > >>>> view. > > >>>> > > >>>> Thus, I am still in favor of not calling the > > ProductionExceptionHandler > > >>>> for fatal exception. > > >>>> > > >>>> > > >>>> > > >>>> About the "always continue" case. Sounds good to me to remove it > (not > > >>>> sure why we need it in test package?) and to rename the "failing" > > >>>> handler to "Default" (even if "default" is less descriptive and I > > would > > >>>> still prefer "Fail" in the name). > > >>>> > > >>>> > > >>>> Last question: > > >>>> > > >>>>>> - Continue to *only* invoke it on the first exception that we > > >>>>>> encounter (before sendException is set) > > >>>> > > >>>> > > >>>> What is there reasoning for invoking the handler only for the first > > >>>> exception? > > >>>> > > >>>> > > >>>> > > >>>> > > >>>> -Matthias > > >>>> > > >>>> On 11/20/17 10:43 AM, Matt Farmer wrote: > > >>>>> Alright, here are some updates I'm planning to make after thinking > on > > >>>> this > > >>>>> for awhile: > > >>>>> > > >>>>> - Given that the "always continue" handler isn't something I'd > > >>>> recommend > > >>>>> for production use as is, I'm going to move it into the test > > >>>> namespace and > > >>>>> remove it from mention in the public API. > > >>>>> - I'm going to rename the "AlwaysFailProductionExceptionHandler" > to > > >>>>> "DefaultProductionExceptionHandler" > > >>>>> - Given that the API for the exception handler involves being > > >>>> invoked by > > >>>>> streams to make a decision about whether or not to continue — I > > >>>> think that > > >>>>> we should: > > >>>>> - Continue to *only* invoke it on the first exception that we > > >>>>> encounter (before sendException is set) > > >>>>> - Stop invoking it for the self-healing fenced exceptions. > > >>>>> - I think I would rather invoke it for all exceptions that could > > >>>> occur > > >>>>> from attempting to produce - even those exceptions were returning > > >>>> CONTINUE > > >>>>> may not be a good idea (e.g. Authorization exception). Until there > > >>>> is a > > >>>>> different type for exceptions that are totally fatal (for example a > > >>>>> FatalStreamsException or some sort), maintaining a list of > > >>>> exceptions that > > >>>>> you can intercept with this handler and exceptions you cannot would > > >>>> be > > >>>>> really error-prone and hard to keep correct. > > >>>>> - I'm happy to file a KIP for the creation of this new Exception > > >>>> type > > >>>>> if there is interest. > > >>>>> > > >>>>> @ Matthias — What do you think about the above? > > >>>>> > > >>>>> On Tue, Nov 14, 2017 at 9:44 AM Matt Farmer <m...@frmr.me> wrote: > > >>>>> > > >>>>>> I responded before reading your code review and didn't see the bit > > >>>> about > > >>>>>> how ProducerFencedException is self-healing. This error handling > > logic > > >>>> is > > >>>>>> *quite* confusing to reason about... I think I'm going to sit down > > > with > > >>>>>> the code a bit more today, but I'm inclined to think that if the > > > fenced > > >>>>>> exceptions are, indeed, self healing that we still invoke the > > handler > > >>>> but > > >>>>>> ignore its result for those exceptions. > > >>>>>> > > >>>>>> On Tue, Nov 14, 2017 at 9:37 AM Matt Farmer <m...@frmr.me> wrote: > > >>>>>> > > >>>>>>> Hi there, > > >>>>>>> > > >>>>>>> Following up here... > > >>>>>>> > > >>>>>>>> One tiny comment: I would prefer to remove the "Always" from the > > >>>>>>> handler implementation names -- it sounds "cleaner" to me without > > it. > > >>>>>>> > > >>>>>>> Let me think on this. I generally prefer expressiveness to > > > clean-ness, > > >>>>>>> and I think that comes out in the names I chose for things. The > > straw > > >>>> man > > >>>>>>> in my head is the person that tried to substitute in the > > >>>> "AlwaysContinue" > > >>>>>>> variant and the "Always" is a trigger to really consider whether > or > > >>>> not > > >>>>>>> they *always* want to try to continue. > > >>>>>>> > > >>>>>>> To be truthful, after some thought, using the "AlwaysContinue" > > > variant > > >>>>>>> isn't something I'd recommend generally in a production system. > > >>>> Ideally > > >>>>>>> these handlers are targeted at handling a specific series of > > >>>> exceptions > > >>>>>>> that a user wants to ignore, and not ignoring all exceptions. > More > > on > > >>>> this > > >>>>>>> in a minute. > > >>>>>>> > > >>>>>>>> For the first category, it seems to not make sense to call the > > >>>> handle but > > >>>>>>> Streams should always fail. If we follow this design, the KIP > > should > > >>>> list > > >>>>>>> all exceptions for which the handler is not called. > > >>>>>>> > > >>>>>>> I strongly disagree here. The purpose of this handler isn't > *just* > > to > > >>>>>>> make a decision for streams. There may also be desirable side > > effects > > >>>> that > > >>>>>>> users wish to cause when production exceptions occur. There may > be > > >>>>>>> side-effects that they wish to cause when > AuthenticationExceptions > > >>>> occur, > > >>>>>>> as well. We should still give them the hooks to preform those > side > > >>>> effects. > > >>>>>>> > > >>>>>>> In light of the above, I'm thinking that the > > >>>>>>> "AlwaysContinueProductionExceptionHandler" variant should > > probably be > > >>>>>>> removed from the public API and moved into tests since that's > where > > >>>> it's > > >>>>>>> most useful. The more I think on it, the more I feel that having > > that > > >>>> in > > >>>>>>> the public API is a landmine. If you agree, then, we can rename > the > > >>>>>>> "AlwaysFailProductionExceptionHandler" to > > >>>>>>> "DefaultProductionExceptionHandler". > > >>>>>>> > > >>>>>>> Thoughts? > > >>>>>>> > > >>>>>>> On Fri, Nov 10, 2017 at 6:13 PM Matthias J. Sax < > > >>>> matth...@confluent.io> > > >>>>>>> wrote: > > >>>>>>> > > >>>>>>>> I just review the PR, and there is one thing we should discuss. > > >>>>>>>> > > >>>>>>>> There are different types of exceptions that could occur. Some > > apply > > >>>> to > > >>>>>>>> all records (like Authorization exception) while others are for > > >>>> single > > >>>>>>>> records only (like record too large). > > >>>>>>>> > > >>>>>>>> For the first category, it seems to not make sense to call the > > > handle > > >>>>>>>> but Streams should always fail. If we follow this design, the > KIP > > >>>> should > > >>>>>>>> list all exceptions for which the handler is not called. > > >>>>>>>> > > >>>>>>>> WDYT? > > >>>>>>>> > > >>>>>>>> > > >>>>>>>> -Matthias > > >>>>>>>> > > >>>>>>>> > > >>>>>>>> On 11/10/17 2:56 PM, Matthias J. Sax wrote: > > >>>>>>>>> Just catching up on this KIP. > > >>>>>>>>> > > >>>>>>>>> One tiny comment: I would prefer to remove the "Always" from > the > > >>>>>>>> handler > > >>>>>>>>> implementation names -- it sounds "cleaner" to me without it. > > >>>>>>>>> > > >>>>>>>>> > > >>>>>>>>> -Matthias > > >>>>>>>>> > > >>>>>>>>> On 11/5/17 12:57 PM, Matt Farmer wrote: > > >>>>>>>>>> It is agreed, then. I've updated the pull request. I'm trying > to > > >>>> also > > >>>>>>>>>> update the KIP accordingly, but cwiki is being slow and > dropping > > >>>>>>>>>> connections..... I'll try again a bit later but please > consider > > > the > > >>>>>>>> KIP > > >>>>>>>>>> updated for all intents and purposes. heh. > > >>>>>>>>>> > > >>>>>>>>>> On Sun, Nov 5, 2017 at 3:45 PM Guozhang Wang < > > wangg...@gmail.com> > > >>>>>>>> wrote: > > >>>>>>>>>> > > >>>>>>>>>>> That makes sense. > > >>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> Guozhang > > >>>>>>>>>>> > > >>>>>>>>>>> On Sun, Nov 5, 2017 at 12:33 PM, Matt Farmer <m...@frmr.me> > > >>>> wrote: > > >>>>>>>>>>> > > >>>>>>>>>>>> Interesting. I'm not sure I agree. I've been bitten many > times > > > by > > >>>>>>>>>>>> unintentionally shipping code that fails to properly > implement > > >>>>>>>> logging. I > > >>>>>>>>>>>> always discover this at the exact *worst* moment, too. > > (Normally > > >>>> at > > >>>>>>>> 3 AM > > >>>>>>>>>>>> during an on-call shift. Hah.) However, if others feel the > > same > > >>>> way > > >>>>>>>> I > > >>>>>>>>>>> could > > >>>>>>>>>>>> probably be convinced to remove it. > > >>>>>>>>>>>> > > >>>>>>>>>>>> We could also meet halfway and say that when a customized > > >>>>>>>>>>>> ProductionExceptionHandler instructs Streams to CONTINUE, we > > log > > >>>> at > > >>>>>>>> DEBUG > > >>>>>>>>>>>> level instead of WARN level. Would that alternative be > > appealing > > >>>> to > > >>>>>>>> you? > > >>>>>>>>>>>> > > >>>>>>>>>>>> On Sun, Nov 5, 2017 at 12:32 PM Guozhang Wang < > > >>>> wangg...@gmail.com> > > >>>>>>>>>>> wrote: > > >>>>>>>>>>>> > > >>>>>>>>>>>>> Thanks for the updates. I made a pass over the wiki again > and > > > it > > >>>>>>>> looks > > >>>>>>>>>>>>> good. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> About whether record collector should still internally log > > the > > >>>>>>>> error in > > >>>>>>>>>>>>> addition to what the customized ProductionExceptionHandler > > >>>> does. I > > >>>>>>>>>>>>> personally would prefer only to log if the returned value > is > > >>>> FAIL > > >>>>>>>> to > > >>>>>>>>>>>>> indicate that this thread is going to shutdown and trigger > > the > > >>>>>>>>>>> exception > > >>>>>>>>>>>>> handler. > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> Guozhang > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> On Sun, Nov 5, 2017 at 6:09 AM, Matt Farmer <m...@frmr.me> > > >>>> wrote: > > >>>>>>>>>>>>> > > >>>>>>>>>>>>>> Hello, a bit later than I'd anticipated, but I've updated > > this > > >>>>>>>> KIP as > > >>>>>>>>>>>>>> outlined above. The updated KIP is now ready for review > > again! > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>> On Sat, Nov 4, 2017 at 1:03 PM Matt Farmer <m...@frmr.me> > > >>>> wrote: > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> Ah. I actually created both of those in the PR and forgot > > to > > >>>>>>>>>>> mention > > >>>>>>>>>>>>> them > > >>>>>>>>>>>>>>> by name in the KIP! Thanks for pointing out the > oversight. > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> I’ll revise the KIP this afternoon accordingly. > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> The logging is actually provided for in the record > > collector. > > >>>>>>>>>>>> Whenever > > >>>>>>>>>>>>> a > > >>>>>>>>>>>>>>> handler continues it’ll log a warning to ensure that it’s > > >>>>>>>>>>>> *impossible* > > >>>>>>>>>>>>> to > > >>>>>>>>>>>>>>> write a handler that totally suppresses production > > exceptions > > >>>>>>>> from > > >>>>>>>>>>>> the > > >>>>>>>>>>>>>> log. > > >>>>>>>>>>>>>>> As such, the default continue handler just returns the > > >>>> continue > > >>>>>>>>>>>> value. > > >>>>>>>>>>>>> I > > >>>>>>>>>>>>>>> can add details about those semantics to the KIP as well. > > >>>>>>>>>>>>>>> On Sat, Nov 4, 2017 at 12:46 PM Matthias J. Sax < > > >>>>>>>>>>>> matth...@confluent.io > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> One more comment. > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> You mention a default implementation for the handler > that > > >>>>>>>> fails. I > > >>>>>>>>>>>>>>>> think, this should be part of the public API and thus > > should > > >>>>>>>> have > > >>>>>>>>>>> a > > >>>>>>>>>>>>>>>> proper defined named that is mentioned in the KIP. > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> We could also add a second implementation for the > > >>>>>>>> log-and-move-on > > >>>>>>>>>>>>>>>> strategy, as both are the two most common cases. This > > class > > >>>>>>>> should > > >>>>>>>>>>>>> also > > >>>>>>>>>>>>>>>> be part of public API (so users can just set in the > > config) > > >>>>>>>> with a > > >>>>>>>>>>>>>>>> proper name. > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> Otherwise, I like the KIP a lot! Thanks. > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> -Matthias > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> On 11/1/17 12:23 AM, Matt Farmer wrote: > > >>>>>>>>>>>>>>>>> Thanks for the heads up. Yes, I think my changes are > > >>>> compatible > > >>>>>>>>>>>> with > > >>>>>>>>>>>>>>>> that > > >>>>>>>>>>>>>>>>> PR, but there will be a merge conflict that happens > > > whenever > > >>>>>>>> one > > >>>>>>>>>>>> of > > >>>>>>>>>>>>>> the > > >>>>>>>>>>>>>>>> PRs > > >>>>>>>>>>>>>>>>> is merged. Happy to reconcile the changes in my PR if > > 4148 > > >>>> goes > > >>>>>>>>>>> in > > >>>>>>>>>>>>>>>> first. :) > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> On Tue, Oct 31, 2017 at 6:44 PM Guozhang Wang < > > >>>>>>>>>>> wangg...@gmail.com > > >>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> That sounds reasonable, thanks Matt. > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> As for the implementation, please note that there is > > >>>> another > > >>>>>>>>>>>>> ongoing > > >>>>>>>>>>>>>> PR > > >>>>>>>>>>>>>>>>>> that may touch the same classes that you are working > on: > > >>>>>>>>>>>>>>>>>> https://github.com/apache/kafka/pull/4148 > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> So it may help if you can also take a look at that PR > > and > > >>>> see > > >>>>>>>>>>> if > > >>>>>>>>>>>> it > > >>>>>>>>>>>>>> is > > >>>>>>>>>>>>>>>>>> compatible with your changes. > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> Guozhang > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> On Tue, Oct 31, 2017 at 10:59 AM, Matt Farmer < > > >>>> m...@frmr.me> > > >>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> I've opened this pull request to implement the KIP as > > >>>>>>>>>>> currently > > >>>>>>>>>>>>>>>> written: > > >>>>>>>>>>>>>>>>>>> https://github.com/apache/kafka/pull/4165. It still > > needs > > >>>>>>>>>>> some > > >>>>>>>>>>>>>> tests > > >>>>>>>>>>>>>>>>>>> added, > > >>>>>>>>>>>>>>>>>>> but largely represents the shape I was going for. > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> If there are more points that folks would like to > > > discuss, > > >>>>>>>>>>>> please > > >>>>>>>>>>>>>> let > > >>>>>>>>>>>>>>>> me > > >>>>>>>>>>>>>>>>>>> know. If I don't hear anything by tomorrow afternoon > > I'll > > >>>>>>>>>>>> probably > > >>>>>>>>>>>>>>>> start > > >>>>>>>>>>>>>>>>>> a > > >>>>>>>>>>>>>>>>>>> [VOTE] thread. > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> Thanks, > > >>>>>>>>>>>>>>>>>>> Matt > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> On Fri, Oct 27, 2017 at 7:33 PM Matt Farmer < > > m...@frmr.me > > >>>>> > > >>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> I can’t think of a reason that would be problematic. > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> Most of the time I would write a handler like this, > I > > >>>> either > > >>>>>>>>>>>> want > > >>>>>>>>>>>>>> to > > >>>>>>>>>>>>>>>>>>>> ignore the error or fail and bring everything down > so > > >>>> that I > > >>>>>>>>>>>> can > > >>>>>>>>>>>>>> spin > > >>>>>>>>>>>>>>>>>> it > > >>>>>>>>>>>>>>>>>>>> back up later and resume from earlier offsets. When > we > > >>>> start > > >>>>>>>>>>> up > > >>>>>>>>>>>>>> after > > >>>>>>>>>>>>>>>>>>>> crashing we’ll eventually try to process the message > > we > > >>>>>>>>>>> failed > > >>>>>>>>>>>> to > > >>>>>>>>>>>>>>>>>> produce > > >>>>>>>>>>>>>>>>>>>> again. > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> I’m concerned that “putting in a queue for later” > > opens > > >>>> you > > >>>>>>>>>>> up > > >>>>>>>>>>>> to > > >>>>>>>>>>>>>>>>>> putting > > >>>>>>>>>>>>>>>>>>>> messages into the destination topic in an unexpected > > >>>> order. > > >>>>>>>>>>>>> However > > >>>>>>>>>>>>>>>> if > > >>>>>>>>>>>>>>>>>>>> others feel differently, I’m happy to talk about it. > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> On Fri, Oct 27, 2017 at 7:10 PM Guozhang Wang < > > >>>>>>>>>>>>> wangg...@gmail.com> > > >>>>>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> Please correct me if I'm wrong, but my > understanding > > > is > > >>>>>>>>>>> that > > >>>>>>>>>>>>> the > > >>>>>>>>>>>>>>>>>>> record > > >>>>>>>>>>>>>>>>>>>>>> metadata is always null if an exception occurred > > while > > >>>>>>>>>>> trying > > >>>>>>>>>>>>> to > > >>>>>>>>>>>>>>>>>>>>> produce. > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> That is right. Thanks. > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> I looked at the example code, and one thing I > > realized > > >>>> that > > >>>>>>>>>>>>> since > > >>>>>>>>>>>>>> we > > >>>>>>>>>>>>>>>>>> are > > >>>>>>>>>>>>>>>>>>>>> not passing the context in the handle function, we > > may > > >>>> not > > >>>>>>>>>>> be > > >>>>>>>>>>>>>>>>>> implement > > >>>>>>>>>>>>>>>>>>>>> the > > >>>>>>>>>>>>>>>>>>>>> logic to send the fail records into another queue > for > > >>>>>>>> future > > >>>>>>>>>>>>>>>>>> processing. > > >>>>>>>>>>>>>>>>>>>>> Would people think that would be a big issue? > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> Guozhang > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> On Thu, Oct 26, 2017 at 12:14 PM, Matt Farmer < > > >>>>>>>> m...@frmr.me > > >>>>>>>>>>>> > > >>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> Hello all, > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> I've updated the KIP based on this conversation, > and > > >>>> made > > >>>>>>>>>>> it > > >>>>>>>>>>>> so > > >>>>>>>>>>>>>>>> that > > >>>>>>>>>>>>>>>>>>> its > > >>>>>>>>>>>>>>>>>>>>>> interface, config setting, and parameters line up > > more > > >>>>>>>>>>>> closely > > >>>>>>>>>>>>>> with > > >>>>>>>>>>>>>>>>>>> the > > >>>>>>>>>>>>>>>>>>>>>> interface in KIP-161 (deserialization handler). > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> I believe there are a few specific questions I > need > > to > > >>>>>>>>>>> reply > > >>>>>>>>>>>>>>>> to..... > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> The question I had about then handle parameters > are > > >>>>>>>> around > > >>>>>>>>>>>> the > > >>>>>>>>>>>>>>>>>>> record, > > >>>>>>>>>>>>>>>>>>>>>>> should it be `ProducerRecord<byte[], byte[]>`, or > > be > > >>>>>>>>>>>> generics > > >>>>>>>>>>>>> of > > >>>>>>>>>>>>>>>>>>>>>>> `ProducerRecord<? extends K, ? extends V>` or > > >>>>>>>>>>>>> `ProducerRecord<? > > >>>>>>>>>>>>>>>>>>>>> extends > > >>>>>>>>>>>>>>>>>>>>>>> Object, ? extends Object>`? > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> At this point in the code we're guaranteed that > this > > >>>> is a > > >>>>>>>>>>>>>>>>>>>>>> ProducerRecord<byte[], byte[]>, so the generics > > would > > >>>> just > > >>>>>>>>>>>> make > > >>>>>>>>>>>>>> it > > >>>>>>>>>>>>>>>>>>>>> harder > > >>>>>>>>>>>>>>>>>>>>>> to work with the key and value. > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> Also, should the handle function include the > > >>>>>>>>>>>> `RecordMetadata` > > >>>>>>>>>>>>> as > > >>>>>>>>>>>>>>>>>>> well > > >>>>>>>>>>>>>>>>>>>>> in > > >>>>>>>>>>>>>>>>>>>>>>> case it is not null? > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> Please correct me if I'm wrong, but my > understanding > > > is > > >>>>>>>>>>> that > > >>>>>>>>>>>>> the > > >>>>>>>>>>>>>>>>>>> record > > >>>>>>>>>>>>>>>>>>>>>> metadata is always null if an exception occurred > > while > > >>>>>>>>>>> trying > > >>>>>>>>>>>>> to > > >>>>>>>>>>>>>>>>>>>>> produce. > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> We may probably try to write down at least the > > >>>> following > > >>>>>>>>>>>>>> handling > > >>>>>>>>>>>>>>>>>>>>> logic > > >>>>>>>>>>>>>>>>>>>>>> and > > >>>>>>>>>>>>>>>>>>>>>>> see if the given API is sufficient for it > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> I've added some examples to the KIP. Let me know > > what > > >>>> you > > >>>>>>>>>>>>> think. > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> Cheers, > > >>>>>>>>>>>>>>>>>>>>>> Matt > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> On Mon, Oct 23, 2017 at 9:00 PM Matt Farmer < > > >>>> m...@frmr.me > > >>>>>>>>> > > >>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> Thanks for this feedback. I’m at a conference > right > > >>>> now > > >>>>>>>>>>> and > > >>>>>>>>>>>> am > > >>>>>>>>>>>>>>>>>>>>> planning > > >>>>>>>>>>>>>>>>>>>>>> on > > >>>>>>>>>>>>>>>>>>>>>>> updating the KIP again with details from this > > >>>>>>>> conversation > > >>>>>>>>>>>>> later > > >>>>>>>>>>>>>>>>>>> this > > >>>>>>>>>>>>>>>>>>>>>> week. > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> I’ll shoot you a more detailed response then! :) > > >>>>>>>>>>>>>>>>>>>>>>> On Mon, Oct 23, 2017 at 8:16 PM Guozhang Wang < > > >>>>>>>>>>>>>> wangg...@gmail.com > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> Thanks for the KIP Matt. > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> Regarding the handle interface of > > >>>>>>>>>>>>>> ProductionExceptionHandlerResp > > >>>>>>>>>>>>>>>>>>> onse, > > >>>>>>>>>>>>>>>>>>>>>>>> could > > >>>>>>>>>>>>>>>>>>>>>>>> you write it on the wiki also, along with the > > actual > > >>>>>>>>>>> added > > >>>>>>>>>>>>>> config > > >>>>>>>>>>>>>>>>>>>>> names > > >>>>>>>>>>>>>>>>>>>>>>>> (e.g. what > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP- > > >>>>>>>>>>>> 161%3A+streams+ > > >>>>>>>>>>>>>>>>>>>>>> deserialization+exception+handlers > > >>>>>>>>>>>>>>>>>>>>>>>> described). > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> The question I had about then handle parameters > > are > > >>>>>>>>>>> around > > >>>>>>>>>>>>> the > > >>>>>>>>>>>>>>>>>>>>> record, > > >>>>>>>>>>>>>>>>>>>>>>>> should it be `ProducerRecord<byte[], byte[]>`, > or > > be > > >>>>>>>>>>>> generics > > >>>>>>>>>>>>>> of > > >>>>>>>>>>>>>>>>>>>>>>>> `ProducerRecord<? extends K, ? extends V>` or > > >>>>>>>>>>>>> `ProducerRecord<? > > >>>>>>>>>>>>>>>>>>>>> extends > > >>>>>>>>>>>>>>>>>>>>>>>> Object, ? extends Object>`? > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> Also, should the handle function include the > > >>>>>>>>>>>> `RecordMetadata` > > >>>>>>>>>>>>>> as > > >>>>>>>>>>>>>>>>>>>>> well in > > >>>>>>>>>>>>>>>>>>>>>>>> case it is not null? > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> We may probably try to write down at least the > > >>>> following > > >>>>>>>>>>>>>> handling > > >>>>>>>>>>>>>>>>>>>>> logic > > >>>>>>>>>>>>>>>>>>>>>>>> and > > >>>>>>>>>>>>>>>>>>>>>>>> see if the given API is sufficient for it: 1) > > throw > > >>>>>>>>>>>> exception > > >>>>>>>>>>>>>>>>>>>>>> immediately > > >>>>>>>>>>>>>>>>>>>>>>>> to fail fast and stop the world, 2) log the > error > > > and > > >>>>>>>>>>> drop > > >>>>>>>>>>>>>> record > > >>>>>>>>>>>>>>>>>>> and > > >>>>>>>>>>>>>>>>>>>>>>>> proceed silently, 3) send such errors to a > > specific > > >>>>>>>>>>> "error" > > >>>>>>>>>>>>>> Kafka > > >>>>>>>>>>>>>>>>>>>>> topic, > > >>>>>>>>>>>>>>>>>>>>>>>> or > > >>>>>>>>>>>>>>>>>>>>>>>> record it as an app-level metrics ( > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>> https://kafka.apache.org/documentation/#kafka_streams_ > > >>>>>>>>>>>>>> monitoring > > >>>>>>>>>>>>>>>>>> ) > > >>>>>>>>>>>>>>>>>>>>> for > > >>>>>>>>>>>>>>>>>>>>>>>> monitoring. > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> Guozhang > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> On Fri, Oct 20, 2017 at 5:47 PM, Matt Farmer < > > >>>>>>>>>>> m...@frmr.me > > >>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>> I did some more digging tonight. > > >>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>> @Ted: It looks like the deserialization handler > > > uses > > >>>>>>>>>>>>>>>>>>>>>>>>> "default.deserialization.exception.handler" > for > > the > > >>>>>>>>>>>> config > > >>>>>>>>>>>>>>>>>>> name. No > > >>>>>>>>>>>>>>>>>>>>>>>>> ".class" on the end. I'm inclined to think this > > >>>> should > > >>>>>>>>>>> use > > >>>>>>>>>>>>>>>>>>>>>>>>> "default.production.exception.handler". > > >>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>> On Fri, Oct 20, 2017 at 8:22 PM Matt Farmer < > > >>>>>>>>>>> m...@frmr.me > > >>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>> Okay, I've dug into this a little bit. > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>> I think getting access to the serialized > record > > is > > >>>>>>>>>>>>> possible, > > >>>>>>>>>>>>>>>>>>> and > > >>>>>>>>>>>>>>>>>>>>>>>> changing > > >>>>>>>>>>>>>>>>>>>>>>>>>> the naming and return type is certainly > doable. > > >>>>>>>>>>> However, > > >>>>>>>>>>>>>>>>>>> because > > >>>>>>>>>>>>>>>>>>>>>> we're > > >>>>>>>>>>>>>>>>>>>>>>>>>> hooking into the onCompletion callback we have > > no > > >>>>>>>>>>>> guarantee > > >>>>>>>>>>>>>>>>>>> that > > >>>>>>>>>>>>>>>>>>>>> the > > >>>>>>>>>>>>>>>>>>>>>>>>>> ProcessorContext state hasn't changed by the > > time > > >>>> this > > >>>>>>>>>>>>>>>>>>> particular > > >>>>>>>>>>>>>>>>>>>>>>>> handler > > >>>>>>>>>>>>>>>>>>>>>>>>>> runs. So I think the signature would change to > > >>>>>>>>>>> something > > >>>>>>>>>>>>>>>>>> like: > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>> ProductionExceptionHandlerResponse > handle(final > > >>>>>>>>>>>>>>>>>>>>> ProducerRecord<..> > > >>>>>>>>>>>>>>>>>>>>>>>>> record, > > >>>>>>>>>>>>>>>>>>>>>>>>>> final Exception exception) > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>> Would this be acceptable? > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>> On Thu, Oct 19, 2017 at 7:33 PM Matt Farmer < > > >>>>>>>>>>>> m...@frmr.me> > > >>>>>>>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> Ah good idea. Hmmm. I can line up the naming > > and > > >>>>>>>>>>> return > > >>>>>>>>>>>>> type > > >>>>>>>>>>>>>>>>>>> but > > >>>>>>>>>>>>>>>>>>>>>> I’m > > >>>>>>>>>>>>>>>>>>>>>>>> not > > >>>>>>>>>>>>>>>>>>>>>>>>>>> sure if I can get my hands on the context and > > the > > >>>>>>>>>>> record > > >>>>>>>>>>>>>>>>>>> itself > > >>>>>>>>>>>>>>>>>>>>>>>> without > > >>>>>>>>>>>>>>>>>>>>>>>>>>> other changes. > > >>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> Let me dig in and follow up here tomorrow. > > >>>>>>>>>>>>>>>>>>>>>>>>>>> On Thu, Oct 19, 2017 at 7:14 PM Matthias J. > > Sax < > > >>>>>>>>>>>>>>>>>>>>>>>> matth...@confluent.io> > > >>>>>>>>>>>>>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the KIP. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> Are you familiar with KIP-161? > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP- > > >>>>>>>>>>>> 161%3A+streams+ > > >>>>>>>>>>>>>>>>>>>>>>>>> deserialization+exception+handlers > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> I thinks, we should align the design > > (parameter > > >>>>>>>>>>> naming, > > >>>>>>>>>>>>>>>>>>> return > > >>>>>>>>>>>>>>>>>>>>>>>> types, > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> class names etc) of KIP-210 to KIP-161 to > get > > a > > >>>>>>>>>>> unified > > >>>>>>>>>>>>>>>>>> user > > >>>>>>>>>>>>>>>>>>>>>>>>> experience. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> -Matthias > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> On 10/18/17 4:20 PM, Matt Farmer wrote: > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> I’ll create the JIRA ticket. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> I think that config name will work. I’ll > > update > > >>>> the > > >>>>>>>>>>>> KIP > > >>>>>>>>>>>>>>>>>>>>>>>> accordingly. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Wed, Oct 18, 2017 at 6:09 PM Ted Yu < > > >>>>>>>>>>>>>>>>>>> yuzhih...@gmail.com> > > >>>>>>>>>>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Can you create JIRA that corresponds to > the > > >>>> KIP ? > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> For the new config, how about naming it > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> production.exception.processor.class > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ? This way it is clear that class name > > should > > >>>> be > > >>>>>>>>>>>>>>>>>>> specified. > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Cheers > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Wed, Oct 18, 2017 at 2:40 PM, Matt > > Farmer < > > >>>>>>>>>>>>>>>>>>> m...@frmr.me> > > >>>>>>>>>>>>>>>>>>>>>>>> wrote: > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hello everyone, > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> This is the discussion thread for the > KIP > > >>>> that I > > >>>>>>>>>>>> just > > >>>>>>>>>>>>>>>>>>> filed > > >>>>>>>>>>>>>>>>>>>>>>>> here: > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP- > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 210+-+Provide+for+custom+ > > >>>>>>>>>>>> error+handling++when+Kafka+ > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Streams+fails+to+produce > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Looking forward to getting some feedback > > from > > >>>>>>>>>>> folks > > >>>>>>>>>>>>>>>>>> about > > >>>>>>>>>>>>>>>>>>>>> this > > >>>>>>>>>>>>>>>>>>>>>>>> idea > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> and > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> working toward a solution we can > > contribute > > >>>> back. > > >>>>>>>>>>> :) > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Cheers, > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Matt Farmer > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>>> -- > > >>>>>>>>>>>>>>>>>>>>>>>> -- Guozhang > > >>>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>>> -- > > >>>>>>>>>>>>>>>>>>>>> -- Guozhang > > >>>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>>> -- > > >>>>>>>>>>>>>>>>>> -- Guozhang > > >>>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>>>> > > >>>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> > > >>>>>>>>>>>>> -- > > >>>>>>>>>>>>> -- Guozhang > > >>>>>>>>>>>>> > > >>>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> -- > > >>>>>>>>>>> -- Guozhang > > >>>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>>> > > >>>>>>>> > > >>>>>>>> > > >>>>> > > >>>> > > >>>> > > >> > > > > > > > > > > -- > -- Guozhang >