My apologies, had a typo. Meant to say "I will now open up a vote."

Thanks,
Aakash

On Sun, May 17, 2020 at 4:55 PM Aakash Shah <as...@confluent.io> wrote:

> 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,
>> >
>>
>

Reply via email to