Hi all, Thanks for all the feedback thus far. I've updated the KIP with all the suggestions. I will not open up a vote.
Thanks, Aakash On Sun, May 17, 2020 at 3:45 PM Randall Hauch <rha...@gmail.com> wrote: > All good points regarding `Future<Void>` instead of > `Future<RecordMetadata>`, so +1 to that change. > > A few more nits. The following sentences should be removed because they > actually describe a change from the current DLQ functionality that already > sets `max.in.flight.requests.per.connection=1` by default: > > "In order to avoid error records being written out of order (for example, > due to retries), the developer should always use > max.in.flight.requests.per.connection=1 in their implementation for writing > error records. If the developer determines that order is not important and > they want extreme performance, they can always increase this number." > > Another is a bit ambiguous, so I suggest changing: > > "The error reporting functionality is designed to be asynchronous but can > be made synchronous if desired. By default, error reporting will be > asynchronous; processing of the subsequent errant record will not be > blocked by the successful processing of the prior errant record. However, > if the developer prefers synchronous functionality, they can block > processing of the next record with future.get()." > > to: > > "The error reporting functionality is asynchronous. Tasks can use the > resulting future to wait for the record and exception to be written to > Kafka." > > Can we please move the example to a new "Example Usage" section that is > *after* the "Interface" section? That way the order of the sections is > "Method", "Interface", and "Example Usage", and it's more clear how the API > is being changed. Also, the first sentence introducing the example is > currently: > > "The usage will look like the following:" > > but IMO it should actually say it's an example: > > "The following is an example of how a sink task can use this error reporter > and support connectors being deployed in earlier versions of the Connect > runtime:" > > It seems we have pretty good consensus, so I think the KIP is ready for a > vote after the above minor corrections are made. > > Best regards, > > Randall > > On Sun, May 17, 2020 at 4:51 PM Arjun Satish <arjun.sat...@gmail.com> > wrote: > > > Thanks for all the feedback, folks. > > > > re: having a callback as a parameter, I agree that at this point, it > might > > not add much value to the proposal. > > > > re: synchronous vs asynchronous, is the motivation performance/higher > > throughput? Taking a step back, calling report(..) in the new interface > > does a couple of things: > > > > 1. at a fundamental level, it is a signal to the framework that a failure > > occurred when processing records, specifically due to the given record. > > 2. depending on whether errors.log and errors.deadletterqueue has been > set, > > some messages are written to zero or more destinations. > > 3. depending on the value of errors.tolerance (none or all), the task is > > failed after reporters have completed. > > > > for kip-610, the asynchronous method has the advantage of working with > the > > internal dead letter queue (which has been transparent to the developer > so > > far). but, how does async method help if the DLQ is not enabled? in this > > case RecordMetadata is not very useful, AFAICT? also, if we add more > error > > reporters in the future (say, for example, a new reporter in a future > that > > writes to a RDBMS), would the async version return success on all or > > nothing, and what about partial successes? > > > > overall, if we really need async behavior, I'd prefer to just use > > Future<Void>. but if we can keep it simple, then let's go with a > > synchronous function with the parameters Randall proposed above (with > > return type as void, and if any of the reporters fail, the task is failed > > if error.tolerance is none, and kept alive if tolerance is all), and > maybe > > add asynchronous methods in a future KIP? > > > > Best, > > >