Good morning, Any additional feedback and/or review on the PR for this change would be greatly appreciated:
https://github.com/apache/kafka/pull/11382 Knowles On Tue, Nov 16, 2021 at 4:02 PM Knowles Atchison Jr <katchiso...@gmail.com> wrote: > Thank you all for the feedback, the KIP has been updated. > > On Tue, Nov 16, 2021 at 10:46 AM Arjun Satish <arjun.sat...@gmail.com> > wrote: > >> One more nit: the RetryWithToleranceOperator class is not a public >> interface. So we do not have to call the changes in them out in the Public >> Interfaces section. >> >> >> On Tue, Nov 16, 2021 at 10:42 AM Arjun Satish <arjun.sat...@gmail.com> >> wrote: >> >> > Chris' point about upgrades is valid. An existing configuration will now >> > have additional behavior. We should clearly call this out in the kip, >> and >> > whenever they are prepared -- the release notes. It's a bit crummy when >> > upgrading, but I do think it's better than introducing a new >> configuration >> > in the long term. >> > >> > On Mon, Nov 15, 2021 at 2:52 PM Knowles Atchison Jr < >> katchiso...@gmail.com> >> > wrote: >> > >> >> Chris, >> >> >> >> Thank you for the feedback. I can certainly update the KIP to state >> that >> >> once exactly one support is in place, the task would be failed even if >> >> error.tolerance were set to all. Programmatically it would still >> require >> >> PRs to be merged to build on top of. I also liked my original >> >> implementation of the hook as it gave the connector writers the most >> >> flexibility in handling producer errors. I changed the original >> >> implementation as the progression/changes still supported my use case >> and >> >> I >> >> thought it would move this process along faster. >> >> >> >> Knowles >> >> >> >> On Thu, Nov 11, 2021 at 3:43 PM Chris Egerton >> <chr...@confluent.io.invalid >> >> > >> >> wrote: >> >> >> >> > Hi Knowles, >> >> > >> >> > I think this looks good for the most part but I'd still like to see >> an >> >> > explicit mention in the KIP (and proposed doc/Javadoc changes) that >> >> states >> >> > that, with exactly-once support enabled, producer exceptions that >> result >> >> > from failures related to exactly-once support (including but not >> >> limited to >> >> > ProducerFencedExcecption instances ( >> >> > >> >> > >> >> >> https://kafka.apache.org/30/javadoc/org/apache/kafka/common/errors/ProducerFencedException.html >> >> > )) >> >> > will not be skipped even with "errors.tolerance" set to "all", and >> will >> >> > instead unconditionally cause the task to fail. Your proposal that >> >> > "WorkerSourceTask could check the configuration before handing off >> the >> >> > records and exception to this function" seems great as long as we >> update >> >> > "handing off the records and exceptions to this function" to the >> >> > newly-proposed behavior of "logging the exception and continuing to >> poll >> >> > the task for data". >> >> > >> >> > I'm also a little bit wary of updating the existing >> "errors.tolerance" >> >> > configuration to have new behavior that users can't opt out of >> without >> >> also >> >> > opting out of the current behavior they get with "errors.tolerance" >> set >> >> to >> >> > "all", but I think I've found a decent argument in favor of it. One >> >> thought >> >> > that came to mind is whether this use case was originally considered >> >> when >> >> > KIP-298 was being discussed. However, it appears that KAFKA-8586 ( >> >> > https://issues.apache.org/jira/browse/KAFKA-8586), the fix for which >> >> > caused >> >> > tasks to fail on non-retriable, asynchronous producer exceptions >> >> instead of >> >> > logging them and continuing, was discovered over a full year after >> the >> >> > changes for KIP-298 (https://github.com/apache/kafka/pull/5065) were >> >> > merged. I suspect that the current proposal aligns nicely with the >> >> original >> >> > design intent of KIP-298, and that if KAFKA-8586 were discovered >> before >> >> or >> >> > during discussion for KIP-298, non-retriable, asynchronous producer >> >> > exceptions would have been included in its scope. With that in mind, >> >> > although it may cause issues for some niche use cases, I think that >> >> this is >> >> > a valid change and would be worth the tradeoff of potentially >> >> complicating >> >> > life for a small number of users. I'd be interested in Arjun's >> thoughts >> >> on >> >> > this though (as he designed and implemented KIP-298), and if this >> >> analysis >> >> > is agreeable, we may want to document that information in the KIP as >> >> well >> >> > to strengthen our case for not introducing a new configuration >> property >> >> and >> >> > instead making this behavior tied to the existing "errors.tolerance" >> >> > property with no opt-out besides using a new value for that property. >> >> > >> >> > My last thought is that, although it may be outside the scope of this >> >> KIP, >> >> > I believe your original proposal of giving tasks a hook to handle >> >> > downstream exceptions is actually quite valid. The DLQ feature for >> sink >> >> > connectors is an extremely valuable one as it prevents data loss when >> >> > "errors.tolerance" is set to "all" by allowing users to reprocess >> >> > problematic records at a later date without stopping the flow of >> data in >> >> > their connector entirely. As others have noted, it's difficult if not >> >> > outright impossible to provide a Kafka DLQ topic for source >> connectors >> >> with >> >> > the same guarantees, and so allowing source connectors the option of >> >> > storing problematic records back in the system that they came from >> seems >> >> > like a reasonable alternative. I think we're probably past the point >> of >> >> > making that happen in this KIP, but I don't believe the changes >> you've >> >> > proposed make that any harder in the future than it is now (which is >> >> > great!), and I wanted to voice my general support for a mechanism >> like >> >> this >> >> > in case you or someone following along think it'd be worth it to >> pursue >> >> at >> >> > a later date. >> >> > >> >> > Thanks for your KIP and thanks for your patience with the process! >> >> > >> >> > Cheers, >> >> > >> >> > Chris >> >> > >> >> > On Fri, Nov 5, 2021 at 8:26 AM Knowles Atchison Jr < >> >> katchiso...@gmail.com> >> >> > wrote: >> >> > >> >> > > Good morning, >> >> > > >> >> > > If there is no additional feedback, I am going to call a vote for >> this >> >> > KIP >> >> > > on Monday. >> >> > > >> >> > > Knowles >> >> > > >> >> > > On Tue, Nov 2, 2021 at 10:00 AM Knowles Atchison Jr < >> >> > katchiso...@gmail.com >> >> > > > >> >> > > wrote: >> >> > > >> >> > > > Third time's the charm. >> >> > > > >> >> > > > I've added a getter for the RetryWithToleranceOperator to get the >> >> > > > ToleranceType. I've updated WorkerSourceTask to check this >> setting >> >> to >> >> > see >> >> > > > if it is ToleranceType.ALL. >> >> > > > >> >> > > > Setting "errors.tolerance" to "all" solves both problems: >> >> > > > >> >> > > > 1. Use an existing configuration >> >> > > > 2. Moves the configuration back to the connector/task level >> instead >> >> of >> >> > at >> >> > > > the connect worker level. >> >> > > > >> >> > > > I've updated the KIP and PR. >> >> > > > >> >> > > > Additional thoughts and feedback are welcome. >> >> > > > >> >> > > > Knowles >> >> > > > >> >> > > > On Mon, Nov 1, 2021 at 2:00 AM Arjun Satish < >> arjun.sat...@gmail.com >> >> > >> >> > > > wrote: >> >> > > > >> >> > > >> Looks really nice. Thanks for the changes. Couple of >> suggestions: >> >> > > >> >> >> > > >> 1. Can we reuse any of the existing configs, instead of >> >> introducing a >> >> > > new >> >> > > >> one? I’m wondering if the error.tolerance configuration’s scope >> >> can be >> >> > > >> increased to include produce errors as well. That’ll help us >> keep >> >> > number >> >> > > >> of >> >> > > >> configs in check. Effectively, if error.tolerance is set to all, >> >> then >> >> > > the >> >> > > >> behavior would be like how you describe the worker would ignore >> >> > producer >> >> > > >> errors. >> >> > > >> >> >> > > >> 2. If we do choose to have a new config, could you please call >> out >> >> the >> >> > > >> possible values it can take in the kip? >> >> > > >> >> >> > > >> Thanks again! >> >> > > >> >> >> > > >> Best, >> >> > > >> >> >> > > >> >> >> > > >> On Fri, Oct 29, 2021 at 9:53 AM Knowles Atchison Jr < >> >> > > >> katchiso...@gmail.com> >> >> > > >> wrote: >> >> > > >> >> >> > > >> > Arjun, >> >> > > >> > >> >> > > >> > Thank you for your feedback, I have updated the KIP. >> >> > > >> > >> >> > > >> > This solution is more elegant than my original proposal; >> however, >> >> > > after >> >> > > >> > working on the implementation, we have now pushed the >> >> configuration >> >> > > from >> >> > > >> > the connector/task itself back to the connect worker. All >> tasks >> >> > > running >> >> > > >> on >> >> > > >> > the worker would share this ignore producer exception >> >> configuration >> >> > > >> flag. >> >> > > >> > This works for my use cases where I cannot envision setting >> this >> >> for >> >> > > >> only >> >> > > >> > one type of connector we have, but this does take the choice >> out >> >> of >> >> > > the >> >> > > >> > hands of the connector developer. I suppose that is for the >> best, >> >> > in a >> >> > > >> > vacuum only the worker should have a say in how it handles >> >> message >> >> > > >> > production. >> >> > > >> > >> >> > > >> > Additional thoughts and feedback are welcome. >> >> > > >> > >> >> > > >> > Knowles >> >> > > >> > >> >> > > >> > On Thu, Oct 28, 2021 at 10:54 AM Arjun Satish < >> >> > arjun.sat...@gmail.com >> >> > > > >> >> > > >> > wrote: >> >> > > >> > >> >> > > >> > > Yes, that makes sense. And it fits in very nicely with the >> >> current >> >> > > >> error >> >> > > >> > > handling framework. >> >> > > >> > > >> >> > > >> > > On Thu, Oct 28, 2021 at 10:39 AM Knowles Atchison Jr < >> >> > > >> > > katchiso...@gmail.com> >> >> > > >> > > wrote: >> >> > > >> > > >> >> > > >> > > > That would work. I originally thought that it would be >> >> confusing >> >> > > to >> >> > > >> > > > overload that function when a Record that wasn't actually >> >> > written, >> >> > > >> but >> >> > > >> > > > looking at SourceTask more closely, in >> >> > commitRecord(SourceRecord, >> >> > > >> > > > RecordMetadata), the RecordMetadata is set to null in the >> >> event >> >> > > of a >> >> > > >> > > > filtered transformation so the framework is already doing >> >> this >> >> > in >> >> > > a >> >> > > >> > > certain >> >> > > >> > > > regard. >> >> > > >> > > > >> >> > > >> > > > Knowles >> >> > > >> > > > >> >> > > >> > > > On Thu, Oct 28, 2021 at 10:29 AM Arjun Satish < >> >> > > >> arjun.sat...@gmail.com> >> >> > > >> > > > wrote: >> >> > > >> > > > >> >> > > >> > > > > To ack the message back to the source system, we already >> >> have >> >> > a >> >> > > >> > > > > commitRecord method. Once the bad record is handled by >> >> > skip/dlq, >> >> > > >> we >> >> > > >> > > could >> >> > > >> > > > > just call commitRecord() on it? >> >> > > >> > > > > >> >> > > >> > > > > On Thu, Oct 28, 2021 at 9:35 AM Knowles Atchison Jr < >> >> > > >> > > > katchiso...@gmail.com >> >> > > >> > > > > > >> >> > > >> > > > > wrote: >> >> > > >> > > > > >> >> > > >> > > > > > Hi Chris, >> >> > > >> > > > > > >> >> > > >> > > > > > Thank you for your reply! >> >> > > >> > > > > > >> >> > > >> > > > > > It is a clarity error regarding the javadoc. I am not >> >> > > >> operationally >> >> > > >> > > > > > familiar with all of the exceptions Kafka considers >> >> > > >> non-retriable, >> >> > > >> > > so I >> >> > > >> > > > > > pulled the list from Callback.java: >> >> > > >> > > > > > >> >> > > >> > > > > > >> >> > > >> > > > > >> >> > > >> > > > >> >> > > >> > > >> >> > > >> > >> >> > > >> >> >> > > >> >> > >> >> >> https://github.com/apache/kafka/blob/1afe2a5190e9c98e38c84dc793f4303ea51bc19b/clients/src/main/java/org/apache/kafka/clients/producer/Callback.java#L35 >> >> > > >> > > > > > to be an illustrative example of the types of >> exceptions >> >> > that >> >> > > >> would >> >> > > >> > > > kill >> >> > > >> > > > > > the connector outright. Any exception thrown during >> the >> >> > > producer >> >> > > >> > > write >> >> > > >> > > > > will >> >> > > >> > > > > > be passed to this handler. I will update the KIP/PR >> to be >> >> > more >> >> > > >> > clear >> >> > > >> > > on >> >> > > >> > > > > > this matter. >> >> > > >> > > > > > >> >> > > >> > > > > > You raise an excellent point, how should the framework >> >> > protect >> >> > > >> the >> >> > > >> > > > > > connector or developer from themselves? If a connector >> >> > enables >> >> > > >> > > > > exactly-once >> >> > > >> > > > > > semantics, it would make sense to me to have the task >> >> > killed. >> >> > > >> The >> >> > > >> > > > > framework >> >> > > >> > > > > > should enforce this type of misconfiguration that >> would >> >> > break >> >> > > >> the >> >> > > >> > > > > internal >> >> > > >> > > > > > semantics of KIP-618. WorkerSourceTask could check the >> >> > > >> > configuration >> >> > > >> > > > > before >> >> > > >> > > > > > handing off the records and exception to this >> function, >> >> fail >> >> > > >> > initial >> >> > > >> > > > > > configuration check, or something of that nature. >> >> > > >> > > > > > >> >> > > >> > > > > > Hi Arjun, >> >> > > >> > > > > > >> >> > > >> > > > > > Thank you for your response! >> >> > > >> > > > > > >> >> > > >> > > > > > My specific use case is our custom JMS connector. We >> ack >> >> > back >> >> > > to >> >> > > >> > the >> >> > > >> > > > jms >> >> > > >> > > > > > broker once Kafka commits the record. We thread out >> our >> >> JMS >> >> > > >> > consumer >> >> > > >> > > > such >> >> > > >> > > > > > that I would need access to the SourceRecord to >> confirm >> >> we >> >> > are >> >> > > >> > going >> >> > > >> > > to >> >> > > >> > > > > > throw away the message. >> >> > > >> > > > > > >> >> > > >> > > > > > Skipping such records, writing some log messages, >> and/or >> >> > > writing >> >> > > >> > some >> >> > > >> > > > > error >> >> > > >> > > > > > context to a DLQ would cover most if not all of the >> use >> >> > cases >> >> > > I >> >> > > >> > > > envision. >> >> > > >> > > > > > >> >> > > >> > > > > > "discard.message.on.producer.exception": "true" >> >> > > >> > > > > > >> >> > > >> > > > > > or some equivalent would get my personal use case 99% >> of >> >> the >> >> > > way >> >> > > >> > > > there. I >> >> > > >> > > > > > would still need some kind of callback from inside the >> >> > > connector >> >> > > >> > with >> >> > > >> > > > the >> >> > > >> > > > > > Source Record to successfully ack back to my source >> >> system. >> >> > > >> > > > > > >> >> > > >> > > > > > I have updated the KIP regarding the callback being >> >> executed >> >> > > in >> >> > > >> a >> >> > > >> > > > > different >> >> > > >> > > > > > thread than poll(). >> >> > > >> > > > > > >> >> > > >> > > > > > Knowles >> >> > > >> > > > > > >> >> > > >> > > > > > On Thu, Oct 28, 2021 at 2:02 AM Arjun Satish < >> >> > > >> > arjun.sat...@gmail.com >> >> > > >> > > > >> >> > > >> > > > > > wrote: >> >> > > >> > > > > > >> >> > > >> > > > > > > Hi Knowles, >> >> > > >> > > > > > > >> >> > > >> > > > > > > Thanks for the KIP! >> >> > > >> > > > > > > >> >> > > >> > > > > > > Could you please call out some use-cases on what the >> >> > source >> >> > > >> > > > connectors >> >> > > >> > > > > > > would do when they hit such exceptions? I'm >> wondering >> >> if >> >> > we >> >> > > >> would >> >> > > >> > > > need >> >> > > >> > > > > to >> >> > > >> > > > > > > do anything other than skipping such records, >> writing >> >> some >> >> > > log >> >> > > >> > > > > messages, >> >> > > >> > > > > > > and/or writing some error context to a DLQ? >> >> > > >> > > > > > > >> >> > > >> > > > > > > One of the goals for Connect was to abstract away >> >> > > intricacies >> >> > > >> of >> >> > > >> > > > Kafka >> >> > > >> > > > > > > topics, clients etc, so that connectors could focus >> on >> >> the >> >> > > >> > external >> >> > > >> > > > > > systems >> >> > > >> > > > > > > themselves. Ideally, we'd want to see if we could >> call >> >> out >> >> > > the >> >> > > >> > most >> >> > > >> > > > > > common >> >> > > >> > > > > > > cases and handle them in the framework itself, >> instead >> >> of >> >> > > >> > > delegating >> >> > > >> > > > > them >> >> > > >> > > > > > > back to the connector. This way, instead of the new >> >> API, >> >> > > we'd >> >> > > >> > > > probably >> >> > > >> > > > > > > introduce some more configuration options, but they >> >> could >> >> > be >> >> > > >> > > > applicable >> >> > > >> > > > > > to >> >> > > >> > > > > > > all the connectors that are out there. >> >> > > >> > > > > > > >> >> > > >> > > > > > > Also, If the above mentioned are the most common >> uses, >> >> > then >> >> > > we >> >> > > >> > > could >> >> > > >> > > > > > apply >> >> > > >> > > > > > > KIP-298 (with some adjustments) to source connectors >> >> for >> >> > > >> > > > non-retriable >> >> > > >> > > > > > > producer errors. >> >> > > >> > > > > > > >> >> > > >> > > > > > > If we decide to go with the API you are referring to >> >> > though, >> >> > > >> > would >> >> > > >> > > > the >> >> > > >> > > > > > > preTransformation record suffice? SMTs can be >> causing >> >> the >> >> > > >> actual >> >> > > >> > > > issues >> >> > > >> > > > > > > (for example, changing the topic name) that cause >> these >> >> > > >> > > non-retriable >> >> > > >> > > > > > > exceptions. The new callback might be receiving >> >> > insufficient >> >> > > >> > > context >> >> > > >> > > > to >> >> > > >> > > > > > do >> >> > > >> > > > > > > any corrective action. >> >> > > >> > > > > > > >> >> > > >> > > > > > > In the documentation for the new API, we might want >> to >> >> > > specify >> >> > > >> > that >> >> > > >> > > > > this >> >> > > >> > > > > > > callback will be called from a different thread than >> >> the >> >> > > ones >> >> > > >> > > calling >> >> > > >> > > > > > > poll(). So any shared objects must be protected >> >> > > appropriately. >> >> > > >> > > > > > > >> >> > > >> > > > > > > Cheers, >> >> > > >> > > > > > > >> >> > > >> > > > > > > On Wed, Oct 27, 2021 at 7:01 PM Chris Egerton >> >> > > >> > > > > > <chr...@confluent.io.invalid >> >> > > >> > > > > > > > >> >> > > >> > > > > > > wrote: >> >> > > >> > > > > > > >> >> > > >> > > > > > > > Hi Knowles, >> >> > > >> > > > > > > > >> >> > > >> > > > > > > > Thanks for the KIP. I may have more to say later >> but >> >> > > there's >> >> > > >> > one >> >> > > >> > > > > thing >> >> > > >> > > > > > > I'd >> >> > > >> > > > > > > > like to make sure to share now. In the Javadocs >> for >> >> the >> >> > > >> > proposed >> >> > > >> > > > > > > > SourceTask::ignoreNonRetriableProducerException >> >> method, >> >> > > >> > > > > > > > the InvalidProducerEpochException exception class >> is >> >> > > >> included >> >> > > >> > as >> >> > > >> > > an >> >> > > >> > > > > > > example >> >> > > >> > > > > > > > of a non-retriable exception that may cause the >> new >> >> > > >> SourceTask >> >> > > >> > > > method >> >> > > >> > > > > > to >> >> > > >> > > > > > > be >> >> > > >> > > > > > > > invoked. This exception should only arise if the >> >> source >> >> > > >> task's >> >> > > >> > > > > producer >> >> > > >> > > > > > > is >> >> > > >> > > > > > > > a transactional producer, which is currently never >> >> the >> >> > > case >> >> > > >> > and, >> >> > > >> > > > once >> >> > > >> > > > > > > > KIP-618 ( >> >> > > >> > > https://cwiki.apache.org/confluence/display/KAFKA/KIP-618 >> >> > > >> > > > ) >> >> > > >> > > > > is >> >> > > >> > > > > > > > merged, will only be the case when the task is >> >> running >> >> > > with >> >> > > >> > > > > > exactly-once >> >> > > >> > > > > > > > support. I wonder if it's safe to allow >> connectors to >> >> > > >> discard >> >> > > >> > > this >> >> > > >> > > > > > > > exception when they're running with exactly-once >> >> > support, >> >> > > >> or if >> >> > > >> > > the >> >> > > >> > > > > > task >> >> > > >> > > > > > > > should still be unconditionally failed in that >> case? >> >> > > >> > > > > > > > >> >> > > >> > > > > > > > Cheers, >> >> > > >> > > > > > > > >> >> > > >> > > > > > > > Chris >> >> > > >> > > > > > > > >> >> > > >> > > > > > > > On Wed, Oct 27, 2021 at 5:39 PM John Roesler < >> >> > > >> > > vvcep...@apache.org> >> >> > > >> > > > > > > wrote: >> >> > > >> > > > > > > > >> >> > > >> > > > > > > > > Hi Knowles, >> >> > > >> > > > > > > > > >> >> > > >> > > > > > > > > Thanks for the reply! That all sounds >> reasonable to >> >> > me, >> >> > > >> and >> >> > > >> > > > > > > > > that's a good catch regarding the SourceRecord. >> >> > > >> > > > > > > > > >> >> > > >> > > > > > > > > Thanks, >> >> > > >> > > > > > > > > -John >> >> > > >> > > > > > > > > >> >> > > >> > > > > > > > > On Wed, 2021-10-27 at 15:32 -0400, Knowles >> >> Atchison Jr >> >> > > >> > > > > > > > > wrote: >> >> > > >> > > > > > > > > > John, >> >> > > >> > > > > > > > > > >> >> > > >> > > > > > > > > > Thank you for the response and feedback! >> >> > > >> > > > > > > > > > >> >> > > >> > > > > > > > > > I originally started my first pass with the >> >> > > >> > > > > ProducerRecord<byte[], >> >> > > >> > > > > > > > > byte[]>. >> >> > > >> > > > > > > > > > For our connector, we need some of the >> >> information >> >> > out >> >> > > >> of >> >> > > >> > the >> >> > > >> > > > > > > > > SourceRecord >> >> > > >> > > > > > > > > > to ack our source system. If I had the actual >> >> > > >> > > ProducerRecord, I >> >> > > >> > > > > > would >> >> > > >> > > > > > > > > have >> >> > > >> > > > > > > > > > to convert it back before I would be able to >> do >> >> > > anything >> >> > > >> > > useful >> >> > > >> > > > > > with >> >> > > >> > > > > > > > it. >> >> > > >> > > > > > > > > I >> >> > > >> > > > > > > > > > think there is merit in providing both >> records as >> >> > > >> > parameters >> >> > > >> > > to >> >> > > >> > > > > > this >> >> > > >> > > > > > > > > > callback. Then connector writers can decide >> >> which of >> >> > > the >> >> > > >> > > > > > > > representations >> >> > > >> > > > > > > > > of >> >> > > >> > > > > > > > > > the data is most useful to them. I also >> noticed >> >> that >> >> > > in >> >> > > >> my >> >> > > >> > > PR I >> >> > > >> > > > > was >> >> > > >> > > > > > > > > sending >> >> > > >> > > > > > > > > > the SourceRecord post transformation, when we >> >> really >> >> > > >> should >> >> > > >> > > be >> >> > > >> > > > > > > sending >> >> > > >> > > > > > > > > the >> >> > > >> > > > > > > > > > preTransformRecord. >> >> > > >> > > > > > > > > > >> >> > > >> > > > > > > > > > The Streams solution to this is very >> interesting. >> >> > > Given >> >> > > >> the >> >> > > >> > > > > nature >> >> > > >> > > > > > > of a >> >> > > >> > > > > > > > > > connector, to me it makes the most sense for >> the >> >> api >> >> > > >> call >> >> > > >> > to >> >> > > >> > > be >> >> > > >> > > > > > part >> >> > > >> > > > > > > of >> >> > > >> > > > > > > > > > that task rather than an external class that >> is >> >> > > >> > configurable. >> >> > > >> > > > > This >> >> > > >> > > > > > > > allows >> >> > > >> > > > > > > > > > the connector to use state it may have at the >> >> time >> >> > to >> >> > > >> > inform >> >> > > >> > > > > > > decisions >> >> > > >> > > > > > > > on >> >> > > >> > > > > > > > > > what to do with these producer exceptions. >> >> > > >> > > > > > > > > > >> >> > > >> > > > > > > > > > I have updated the KIP and PR. >> >> > > >> > > > > > > > > > >> >> > > >> > > > > > > > > > Knowles >> >> > > >> > > > > > > > > > >> >> > > >> > > > > > > > > > On Wed, Oct 27, 2021 at 1:03 PM John Roesler < >> >> > > >> > > > > vvcep...@apache.org> >> >> > > >> > > > > > > > > wrote: >> >> > > >> > > > > > > > > > >> >> > > >> > > > > > > > > > > Good morning, Knowles, >> >> > > >> > > > > > > > > > > >> >> > > >> > > > > > > > > > > Thanks for the KIP! >> >> > > >> > > > > > > > > > > >> >> > > >> > > > > > > > > > > To address your latest questions, it is >> fine to >> >> > call >> >> > > >> for >> >> > > >> > a >> >> > > >> > > > > > > > > > > vote if a KIP doesn't generate much >> discussion. >> >> > > Either >> >> > > >> > the >> >> > > >> > > > > > > > > > > KIP was just not controversial enough for >> >> anyone >> >> > to >> >> > > >> > > comment, >> >> > > >> > > > > > > > > > > in which case a vote is appropriate; or no >> one >> >> had >> >> > > >> time >> >> > > >> > to >> >> > > >> > > > > > > > > > > review it, in which case, calling for a vote >> >> might >> >> > > be >> >> > > >> > more >> >> > > >> > > > > > > > > > > provacative and elicit a response. >> >> > > >> > > > > > > > > > > >> >> > > >> > > > > > > > > > > As far as pinging people directly, one idea >> >> would >> >> > be >> >> > > >> to >> >> > > >> > > look >> >> > > >> > > > > > > > > > > at the git history (git blame/praise) for >> the >> >> > files >> >> > > >> > you're >> >> > > >> > > > > > > > > > > changing to see which committers have >> recently >> >> > been >> >> > > >> > > > > > > > > > > involved. Those are the folks who are most >> >> likely >> >> > to >> >> > > >> have >> >> > > >> > > > > > > > > > > valuable feedback on your proposal. It might >> >> not >> >> > be >> >> > > >> > > > > > > > > > > appropriate to directly email them, but I >> have >> >> > seen >> >> > > >> KIP >> >> > > >> > > > > > > > > > > discussions before that requested feedback >> from >> >> > > >> people by >> >> > > >> > > > > > > > > > > name. It's probably not best to lead with >> that, >> >> > but >> >> > > >> since >> >> > > >> > > no >> >> > > >> > > > > > > > > > > one has responded so far, it might not hurt. >> >> I'm >> >> > > sure >> >> > > >> > that >> >> > > >> > > > > > > > > > > the reason they haven't noticed your KIP is >> >> just >> >> > > that >> >> > > >> > they >> >> > > >> > > > > > > > > > > are so busy it slipped their radar. They >> might >> >> > > >> actually >> >> > > >> > > > > > > > > > > appreciate a more direct ping at this point. >> >> > > >> > > > > > > > > > > >> >> > > >> > > > > > > > > > > I'm happy to review, but as a caveat, I >> don't >> >> have >> >> > > >> much >> >> > > >> > > > > > > > > > > experience with using or maintaining >> Connect, >> >> so >> >> > > >> caveat >> >> > > >> > > > > > > > > > > emptor as far as my review goes. >> >> > > >> > > > > > > > > > > >> >> > > >> > > > > > > > > > > First of all, thanks for the well written >> KIP. >> >> > > Without >> >> > > >> > much >> >> > > >> > > > > > > > > > > context, I was able to understand the >> >> motivation >> >> > and >> >> > > >> > > > > > > > > > > proposal easily just by reading your >> document. >> >> > > >> > > > > > > > > > > >> >> > > >> > > > > > > > > > > I think your proposal is a good one. It >> seems >> >> like >> >> > > it >> >> > > >> > would >> >> > > >> > > > > > > > > > > be pretty obvious as a user what (if >> anything) >> >> to >> >> > do >> >> > > >> with >> >> > > >> > > > > > > > > > > the proposed method. >> >> > > >> > > > > > > > > > > >> >> > > >> > > > > > > > > > > For your reference, this proposal reminds >> me of >> >> > > these >> >> > > >> > > > > > > > > > > capabilities in Streams: >> >> > > >> > > > > > > > > > > >> >> > > >> > > > > > > > > > > >> >> > > >> > > > > > > > > >> >> > > >> > > > > > > > >> >> > > >> > > > > > > >> >> > > >> > > > > > >> >> > > >> > > > > >> >> > > >> > > > >> >> > > >> > > >> >> > > >> > >> >> > > >> >> >> > > >> >> > >> >> >> https://github.com/apache/kafka/blob/trunk/streams/src/main/java/org/apache/kafka/streams/errors/DeserializationExceptionHandler.java >> >> > > >> > > > > > > > > > > and >> >> > > >> > > > > > > > > > > >> >> > > >> > > > > > > > > > > >> >> > > >> > > > > > > > > >> >> > > >> > > > > > > > >> >> > > >> > > > > > > >> >> > > >> > > > > > >> >> > > >> > > > > >> >> > > >> > > > >> >> > > >> > > >> >> > > >> > >> >> > > >> >> >> > > >> >> > >> >> >> https://github.com/apache/kafka/blob/trunk/streams/src/main/java/org/apache/kafka/streams/errors/ProductionExceptionHandler.java >> >> > > >> > > > > > > > > > > . >> >> > > >> > > > > > > > > > > >> >> > > >> > > > > > > > > > > I'm not sure if there's value in bringing >> your >> >> > > >> proposed >> >> > > >> > > > > > > > > > > interface closer to that pattern or not. >> >> Streams >> >> > and >> >> > > >> > > Connect >> >> > > >> > > > > > > > > > > are quite different domains after all. At >> >> least, I >> >> > > >> wanted >> >> > > >> > > > > > > > > > > you to be aware of them so you could >> consider >> >> the >> >> > > >> > > > > > > > > > > alternative API strategy they present. >> >> > > >> > > > > > > > > > > >> >> > > >> > > > > > > > > > > Regardless, I do wonder if it would be >> helpful >> >> to >> >> > > also >> >> > > >> > > > > > > > > > > include the actual ProducerRecord we tried >> to >> >> > send, >> >> > > >> since >> >> > > >> > > > > > > > > > > there's a non-trivial transformation that >> takes >> >> > > place >> >> > > >> to >> >> > > >> > > > > > > > > > > convert the SourceRecord into a >> ProducerRecord. >> >> > I'm >> >> > > >> not >> >> > > >> > > sure >> >> > > >> > > > > > > > > > > what people would do with it, exactly, but >> it >> >> > might >> >> > > be >> >> > > >> > > > > > > > > > > helpful in deciding what to do about the >> >> > exception, >> >> > > or >> >> > > >> > > maybe >> >> > > >> > > > > > > > > > > even in understanding the exception. >> >> > > >> > > > > > > > > > > >> >> > > >> > > > > > > > > > > Those are the only thoughts that come to my >> >> mind! >> >> > > >> Thanks >> >> > > >> > > > > > > > > > > again, >> >> > > >> > > > > > > > > > > -John >> >> > > >> > > > > > > > > > > >> >> > > >> > > > > > > > > > > On Wed, 2021-10-27 at 09:16 -0400, Knowles >> >> > Atchison >> >> > > Jr >> >> > > >> > > > > > > > > > > wrote: >> >> > > >> > > > > > > > > > > > Good morning, >> >> > > >> > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > Bumping this thread. Is there someone >> >> specific >> >> > on >> >> > > >> the >> >> > > >> > > > Connect >> >> > > >> > > > > > > > > framework >> >> > > >> > > > > > > > > > > > team that I should ping? Is it >> appropriate to >> >> > just >> >> > > >> > call a >> >> > > >> > > > > vote? >> >> > > >> > > > > > > All >> >> > > >> > > > > > > > > > > source >> >> > > >> > > > > > > > > > > > connectors are dead in the water without a >> >> way >> >> > to >> >> > > >> > handle >> >> > > >> > > > > > producer >> >> > > >> > > > > > > > > write >> >> > > >> > > > > > > > > > > > exceptions. Thank you. >> >> > > >> > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > Knowles >> >> > > >> > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > On Mon, Oct 18, 2021 at 8:33 AM >> Christopher >> >> > > Shannon >> >> > > >> < >> >> > > >> > > > > > > > > > > > christopher.l.shan...@gmail.com> wrote: >> >> > > >> > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > I also would find this feature useful to >> >> > handle >> >> > > >> > errors >> >> > > >> > > > > > better, >> >> > > >> > > > > > > > does >> >> > > >> > > > > > > > > > > anyone >> >> > > >> > > > > > > > > > > > > have any comments or feedback? >> >> > > >> > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > On Mon, Oct 11, 2021 at 8:52 AM Knowles >> >> > Atchison >> >> > > >> Jr < >> >> > > >> > > > > > > > > > > katchiso...@gmail.com >> >> > > >> > > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > wrote: >> >> > > >> > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > > Good morning, >> >> > > >> > > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > > Bumping this for visibility. I would >> like >> >> > this >> >> > > >> to >> >> > > >> > go >> >> > > >> > > > into >> >> > > >> > > > > > the >> >> > > >> > > > > > > > > next >> >> > > >> > > > > > > > > > > > > release. >> >> > > >> > > > > > > > > > > > > > KIP freeze is Friday. >> >> > > >> > > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > > Any comments and feedback are welcome. >> >> > > >> > > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > > Knowles >> >> > > >> > > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > > On Tue, Oct 5, 2021 at 4:24 PM Knowles >> >> > > Atchison >> >> > > >> Jr >> >> > > >> > < >> >> > > >> > > > > > > > > > > > > katchiso...@gmail.com> >> >> > > >> > > > > > > > > > > > > > wrote: >> >> > > >> > > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > > > Hello all, >> >> > > >> > > > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > > > I would like to discuss the >> following >> >> KIP: >> >> > > >> > > > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > >> >> > > >> > > > > > > > > >> >> > > >> > > > > > > > >> >> > > >> > > > > > > >> >> > > >> > > > > > >> >> > > >> > > > > >> >> > > >> > > > >> >> > > >> > > >> >> > > >> > >> >> > > >> >> >> > > >> >> > >> >> >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-779%3A+Allow+Source+Tasks+to+Handle+Producer+Exceptions >> >> > > >> > > > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > > > The main purpose is to allow Source >> >> Tasks >> >> > > the >> >> > > >> > > ability >> >> > > >> > > > > to >> >> > > >> > > > > > > see >> >> > > >> > > > > > > > > > > underlying >> >> > > >> > > > > > > > > > > > > > > Producer Exceptions and decide what >> to >> >> do >> >> > > >> rather >> >> > > >> > > than >> >> > > >> > > > > > being >> >> > > >> > > > > > > > > > > killed. In >> >> > > >> > > > > > > > > > > > > > our >> >> > > >> > > > > > > > > > > > > > > use cases we would want to log/write >> >> off >> >> > > some >> >> > > >> > > > > information >> >> > > >> > > > > > > and >> >> > > >> > > > > > > > > > > continue >> >> > > >> > > > > > > > > > > > > > > processing. >> >> > > >> > > > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > > > PR is here: >> >> > > >> > > > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > > > >> >> > https://github.com/apache/kafka/pull/11382 >> >> > > >> > > > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > > > Any comments and feedback are >> welcome. >> >> > > >> > > > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > > > Knowles >> >> > > >> > > > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > > > >> >> > > >> > > > > > > > > > > >> >> > > >> > > > > > > > > > > >> >> > > >> > > > > > > > > > > >> >> > > >> > > > > > > > > >> >> > > >> > > > > > > > > >> >> > > >> > > > > > > > > >> >> > > >> > > > > > > > >> >> > > >> > > > > > > >> >> > > >> > > > > > >> >> > > >> > > > > >> >> > > >> > > > >> >> > > >> > > >> >> > > >> > >> >> > > >> >> >> > > > >> >> > > >> >> > >> >> >> > >> >