Matthias, thanks for your feedback.

I can see the following alternatives to deal with `processValues()`:

1. Runtime key validation (current proposal)
2. Using Void type. Guozhang already points out some important
considerations about allocating `Record` twice.
3. Adding a new ValueRecord, proposed by Matthias. This one would carry
some of the problems of the second alternative as ValueRecord will have to
be created from a Record. Also, either by having a public constructor or
creation from a Record, the key _can_ be changed without being captured by
the Topology.
4. Reducing the KIP scope to `process` only, and removing/postponing
`processValues` for a later DSL redesign.

A couple of additional comments:

About the Record API:

IIUC, the issue with allocating new objects is coming from the current
design of the Record API.
If a user does record.withKey(...).withValue(...) is already leading to a
couple of instatiations.
My impression is that if the cost/value of immutability has been weighed
already, then maybe the considerations for alternative 2 can be disregarded?
Either way, if the cost of recreation of objects is something we want to
minimize, then maybe adding a Builder to the record should help to reduce
the allocations.

About the key validation:

So far, the only way I can see to _really_ validate a key doesn't change at
compile-time is by not exposing it at all — as we are doing it today with
Transform.
Otherwise, deal with it at runtime — as we have been dealing with Transform
without the ability to forward.
Processor API already —by definition— means lower-level abstraction,
therefore users should be aware of the potential runtime exceptions if the
key changes.
This is why I'm leaning towards alternative 1.

Looking forward to your feedback.
As a reminder, the vote thread is still open. Feel free to add your vote or
amend if needed.

Cheers,


On Fri, 4 Mar 2022 at 06:51, Matthias J. Sax <mj...@apache.org> wrote:

> John, thanks for verifying source compatibility. My impression was that
> it should be source compatible, I was just not 100% sure.
>
> The question about `processValues()` is really a hard one. Guozhang's
> point is very good one. Maybe we need to be pragmatic and accept the
> runtime check (even if I deeply hate this solution compare to a compile
> time check).
>
> Other possibilities to address this issue might just become too ugly? It
> seems it would require to add a new `ValueProcessorContext` that offers
> a `#forward(ValueRecord)` method (with `ValueRecord` being a `Record`
> with immutable key? Not sure if we would be willing to go down this
> route? Personally, I would be ok with it, as a strongly prefer compile
> time checks and I am happy to extend the API surface area to achieve it
> -- however, I won't be surprised if others don't like this idea...
>
>
>
> -Matthias
>
> On 2/27/22 6:20 AM, Jorge Esteban Quilcate Otoya wrote:
> > Thanks, Guozhang.
> >
> >> Compared with reference checks and runtime exceptions for those who
> >> mistakenly change the key, I think that enforcing everyone to `setValue`
> >> may incur more costs..
> >
> > This is a fair point. I agree that this may incur in more costs than key
> > checking.
> >
> > Will hold for more feedback, but if we agree I will update the KIP during
> > the week.
> >
> > Cheers,
> > Jorge.
> >
> >
> > On Sun, 27 Feb 2022 at 00:50, Guozhang Wang <wangg...@gmail.com> wrote:
> >
> >> Hello folks,
> >>
> >> Regarding the outstanding question, I'm actually a bit leaning towards
> the
> >> second option since that `withKey()` itself always creates a new Record
> >> object. This has a few implications:
> >>
> >> * That we would have to discard the previous Record object to be GC'ed
> with
> >> the new object --- note in practice, processing value does not mean
> you'd
> >> have to replace the whole value with `withValue`, but maybe you just
> need
> >> to manipulate some fields of the value object if it is a JSon / etc.
> >> * It may become an obstacle for further runtime optimizations e.g. skip
> >> serdes and interpret processing as direct byte manipulations.
> >>
> >> Compared with reference checks and runtime exceptions for those who
> >> mistakenly change the key, I think that enforcing everyone to `setValue`
> >> may incur more costs..
> >>
> >> Guozhang
> >>
> >> On Fri, Feb 25, 2022 at 12:54 PM Jorge Esteban Quilcate Otoya <
> >> quilcate.jo...@gmail.com> wrote:
> >>
> >>> Hi all,
> >>>
> >>> Appreciate very much all the great feedback received so far.
> >>>
> >>>> After applying that interface change, I don't see any syntax
> >>> errors in our tests (which use those methods), and the
> >>> StreamBuilderTest still passes for me.
> >>>
> >>> This is awesome John, thank you for your efforts here.
> >>>
> >>>> Jorge, do you mind clarifying these points in the Compatibility
> section
> >>> of your KIP?
> >>>
> >>> +1. I have clarified the impact of changing the return type in the KIP.
> >>>
> >>>> I think the other outstanding question for you is whether
> >>>> the output key type for processValues should be K or Void.
> >>>>
> >>>> One thing I realized belatedly was that if we do set it to
> >>>> Void, then users will actually have to override the key when
> >>>> forwarding, like `record.withKey(null)`, whereas if we keep
> >>>> it is K, all users have to do is not touch the key at all.
> >>>
> >>> This is a tricky one.
> >>> On one hand, with Void type for key output, we force the users to cast
> to
> >>> Void and change the key to null,
> >>> though this can be documented on the API, so the users are aware of the
> >>> peculiarity of forwarding within `processValues`.
> >>> On the other hand, keeping the key type as output doesn't _require_ to
> do
> >>> any change of keys,
> >>> but this could lead to key-checking runtime exceptions.
> >>>
> >>> I slightly inclined myself for the first option and change the type to
> >>> `Void`.
> >>> This will impose a bit of pain on the users to gain some type-safety
> and
> >>> avoid runtime exceptions.
> >>> We can justify this requirement as a way to prove that the key hasn't
> >>> changed.
> >>>
> >>> Btw, thanks for this idea Matthias!
> >>>
> >>>
> >>> On Fri, 25 Feb 2022 at 17:10, John Roesler <vvcep...@apache.org>
> wrote:
> >>>
> >>>> Oh, one more thing Jorge,
> >>>>
> >>>> I think the other outstanding question for you is whether
> >>>> the output key type for processValues should be K or Void. I
> >>>> get the impression that all of us don't feel too strongly
> >>>> about it, so I think the ball is in your court to consider
> >>>> everyone's points and make a call (with justification).
> >>>>
> >>>> One thing I realized belatedly was that if we do set it to
> >>>> Void, then users will actually have to override the key when
> >>>> forwarding, like `record.withKey(null)`, whereas if we keep
> >>>> it as K, all users have to do is not touch the key at all.
> >>>>
> >>>> Thanks,
> >>>> -John
> >>>>
> >>>> On Fri, 2022-02-25 at 11:07 -0600, John Roesler wrote:
> >>>>> Hello all,
> >>>>>
> >>>>> I'll chime in again in the interest of trying to do a better
> >>>>> job of keeping KIPs moving forward...
> >>>>>
> >>>>> Matthias raised some very good questions about whether the
> >>>>> change is really source compatible. I just checked out the
> >>>>> code and make the interface change that Jorge specified in
> >>>>> the KIP:
> >>>>>
> >>>>>> Modified methods:
> >>>>>>
> >>>>>> KStream<KOut,VOut> KStream#process(ProcessorSupplier<K, V,
> >>>>> KOut, VOut> processorSupplier, String... stateStoreNames)
> >>>>>> KStream<KOut,VOut> KStream#process(ProcessorSupplier<K, V,
> >>>>> KOut, VOut> processorSupplier, Named named, String...
> >>>>> stateStoreNames)
> >>>>>
> >>>>> After applying that interface change, I don't see any syntax
> >>>>> errors in our tests (which use those methods), and the
> >>>>> StreamBuilderTest still passes for me.
> >>>>>
> >>>>> The reason is that the existing API already takes a
> >>>>> ProcessorSupplier<K, V, Void, Void> and is currently a
> >>>>> `void` return.
> >>>>>
> >>>>> After this interface change, all existing usages will just
> >>>>> bind Void to KOut and Void to VOut. In other words, KOut,
> >>>>> which is short for `KOut extends Object` is an upper bound
> >>>>> on Void, so all existing processor suppliers are still valid
> >>>>> arguments.
> >>>>>
> >>>>> Because the current methods are void returns, no existing
> >>>>> code could be assigning the result to any variable, so
> >>>>> moving from a void return to a typed return is always
> >>>>> compatible.
> >>>>>
> >>>>> Jorge, do you mind clarifying these points in the
> >>>>> Compatibility section of your KIP?
> >>>>>
> >>>>> Thanks,
> >>>>> -John
> >>>>>
> >>>>>
> >>>>> On Wed, 2022-02-23 at 15:07 -0800, Matthias J. Sax wrote:
> >>>>>> For this KIP, I also see the value. I was just trying to make a
> >> step
> >>>>>> back and ask if it's a good short term solution. If we believe it
> >> is,
> >>>> I
> >>>>>> am fine with it.
> >>>>>>
> >>>>>> (I am more worried about the header's KIP...)
> >>>>>>
> >>>>>> Btw: I am still wondering if we can change existing `process()` as
> >>>>>> proposed in the KIP? It the propose change source compatible? (It's
> >>>> for
> >>>>>> sure not binary compatible, but this seems fine -- I don't think we
> >>>>>> guarantee binary compatibility).
> >>>>>>
> >>>>>> Btw: would be good to clarify what is changes for process() --
> >> should
> >>>> be
> >>>>>> return type change from `void` to `KStream<KOut, VOut>` as well as
> >>>>>> change of `ProcessorSupplier` generic types (output types change
> >> from
> >>>>>> `Void` to `KOut` and `VOut`?
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> -Matthias
> >>>>>>
> >>>>>> On 2/23/22 11:32 AM, Guozhang Wang wrote:
> >>>>>>> Hi folks,
> >>>>>>>
> >>>>>>> I agree with John that this KIP by itself could be a good
> >>>> improvement, and
> >>>>>>> I feel it aligns well with the eventual DSL 2.0 proposal so we do
> >>>> not need
> >>>>>>> to hold it until later.
> >>>>>>>
> >>>>>>> Regarding the last point (i.e. whether we should do enforcement
> >>> with
> >>>> a new
> >>>>>>> interface), here's my 2c: in the past we introduced public
> >>>>>>> `ValueTransfomer/etc` for two purposes, 1) to enforce the key is
> >>> not
> >>>>>>> modifiable, 2) to indicate inside the library's topology builder
> >>>> itself
> >>>>>>> that since the key is not modified, the direct downstream does
> >> not
> >>>> need to
> >>>>>>> inject a repartition stage. I think we are more or less on the
> >> same
> >>>> page
> >>>>>>> that for purpose 1), doing runtime check could be sufficient; as
> >>> for
> >>>> the
> >>>>>>> purpose of 2), as for this KIP itself I think it is similar to
> >> what
> >>>> we have
> >>>>>>> (i.e. just base on the function name "processValue" itself) and
> >>>> hence are
> >>>>>>> not sacrificed either. I do not know if
> >>>>>>> `KStream#processValue(ProcessorSupplier<K, V, Void, VOut>
> >>>>>>> processorSupplier)` will work, or work better, maybe Jorge could
> >> do
> >>>> some
> >>>>>>> digging and get back to us.
> >>>>>>>
> >>>>>>>
> >>>>>>> On Fri, Feb 18, 2022 at 8:24 AM John Roesler <
> >> vvcep...@apache.org>
> >>>> wrote:
> >>>>>>>
> >>>>>>>> Hello all,
> >>>>>>>>
> >>>>>>>> While I sympathize with Matthias’s desire to wipe the slate
> >> clean
> >>>> and
> >>>>>>>> redesign the dsl with full knowledge of everything we’ve
> >> learned
> >>>> in the
> >>>>>>>> past few years, that would also be a pretty intense project on
> >>> its
> >>>> own. It
> >>>>>>>> seems better to leave that project for someone who is motivated
> >>> to
> >>>> take it
> >>>>>>>> on.
> >>>>>>>>
> >>>>>>>> Reading between the lines, it seems like Jorge’s motivation is
> >>>> more along
> >>>>>>>> the lines of removing a few specific pain points. I appreciate
> >>>> Matthias
> >>>>>>>> extending the offer, but if Jorge doesn’t want to redesign the
> >>> dsl
> >>>> right
> >>>>>>>> now, we’re better off just accepting the work he’s willing to
> >> do.
> >>>>>>>>
> >>>>>>>> Specifically, this KIP is quite a nice improvement. Looking at
> >>> the
> >>>> KStream
> >>>>>>>> interface, roughly half of it is devoted to various flavors of
> >>>> “transform”,
> >>>>>>>> which makes it really hard on users to figure out which they
> >> are
> >>>> supposed
> >>>>>>>> to use for what purpose. This kip let us drop all that
> >> complexity
> >>>> in favor
> >>>>>>>> of just two methods, thanks to the fact that we now have the
> >>>> ability for
> >>>>>>>> processors to specify their forwarding type.
> >>>>>>>>
> >>>>>>>> By the way, I really like Matthias’s suggestion to set the KOut
> >>>> generic
> >>>>>>>> bound to Void for processValues. Then, instead of doing an
> >>>> equality check
> >>>>>>>> on the key during forward, you’d just set the key back to the
> >> one
> >>>> saved
> >>>>>>>> before processing (with setRecordKey). This is both more
> >>> efficient
> >>>> (because
> >>>>>>>> we don’t have the equality check) and more foolproof for users
> >>>> (because
> >>>>>>>> it’s enforced by the compiler instead of the runtime).
> >>>>>>>>
> >>>>>>>> Thanks, all!
> >>>>>>>> -John
> >>>>>>>>
> >>>>>>>> On Fri, Feb 18, 2022, at 00:43, Jorge Esteban Quilcate Otoya
> >>> wrote:
> >>>>>>>>> On Fri, 18 Feb 2022 at 02:16, Matthias J. Sax <
> >>> mj...@apache.org>
> >>>> wrote:
> >>>>>>>>>
> >>>>>>>>>>> It probably deserves its own thread to start discussing
> >>>> ideas.
> >>>>>>>>>>
> >>>>>>>>>> Yes. My question was: if we think it's time to do a DSL
> >> 2.0,
> >>>> should we
> >>>>>>>>>> drop this KIP and just fix via DSL 2.0 instead?
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>> Good question. Would love to hear what others think about
> >> this.
> >>>>>>>>>
> >>>>>>>>> I've stated my position about this here:
> >>>>>>>>>
> >>>>>>>>>> For this KIP specifically, I think about it as a
> >> continuation
> >>>> from
> >>>>>>>>> KIP-478. Therefore, it could make sense to have it as part of
> >>>> the current
> >>>>>>>>> version of the DSL.
> >>>>>>>>>
> >>>>>>>>> I'd even add that if this KIP is adopted, I would not be that
> >>>>>>>> disappointed
> >>>>>>>>> if KIP-634 is dropped in favor of a DSL v2.0 as the access to
> >>>> headers
> >>>>>>>>> provided by KIP-478's via Record API is much better than
> >>> previous
> >>>>>>>>> `.context().headers()`.
> >>>>>>>>>
> >>>>>>>>> But happy to reconsider if there is an agreement to focus
> >>> efforts
> >>>>>>>> towards a
> >>>>>>>>> DSL 2.0.
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>>> You're right. I'm not proposing the method signature.
> >>>>>>>>>>
> >>>>>>>>>> What signature do you propose? I don't see an update on the
> >>>> KIP.
> >>>>>>>>>>
> >>>>>>>>>> My bad. I have clarified this in the KIP's public
> >> interfaces
> >>>> now:
> >>>>>>>>>
> >>>>>>>>> ```
> >>>>>>>>>
> >>>>>>>>> New methods:
> >>>>>>>>>
> >>>>>>>>>      - KStream<K,VOut>
> >>> KStream#processValues(ProcessorSupplier<K,
> >>>> V, K,
> >>>>>>>> VOut>
> >>>>>>>>>      processorSupplier, String... stateStoreNames)
> >>>>>>>>>      - KStream<K,VOut>
> >>> KStream#processValues(ProcessorSupplier<K,
> >>>> V, K,
> >>>>>>>> VOut>
> >>>>>>>>>      processorSupplier, Named named, String...
> >> stateStoreNames)
> >>>>>>>>>
> >>>>>>>>> Modified methods:
> >>>>>>>>>
> >>>>>>>>>      - KStream<KOut,VOut> KStream#process(ProcessorSupplier<K,
> >>> V,
> >>>> KOut,
> >>>>>>>> VOut>
> >>>>>>>>>      processorSupplier, String... stateStoreNames)
> >>>>>>>>>      - KStream<KOut,VOut> KStream#process(ProcessorSupplier<K,
> >>> V,
> >>>> KOut,
> >>>>>>>> VOut>
> >>>>>>>>>      processorSupplier, Named named, String...
> >> stateStoreNames)
> >>>>>>>>>
> >>>>>>>>> ```
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>> Not sure if I understand how this would look like. Do you
> >>>> mean
> >>>>>>>> checking
> >>>>>>>>>> it
> >>>>>>>>>>> on the Record itself or somewhere else?
> >>>>>>>>>>
> >>>>>>>>>> @Guozhang: I am not worried about the runtime overhead. I
> >> am
> >>>> worries
> >>>>>>>>>> about user experience. It's not clear from the method
> >>>> signature, that
> >>>>>>>>>> you are not allowed to change the key, what seems to be bad
> >>>> API desig.
> >>>>>>>>>> Even if I understand the desire to keep the API surface
> >> ares
> >>>> small -- I
> >>>>>>>>>> would rather have a compile time enforcement than a runtime
> >>>> check.
> >>>>>>>>>>
> >>>>>>>>>> For example, we have `map()` and `mapValues()` and
> >>>> `mapValues()` returns
> >>>>>>>>>> a `Value V` (enforces that that key is not changes) instead
> >>> of
> >>>> a
> >>>>>>>>>> `KeyValue<KIn,VOut>` and we use a runtime check to check
> >> that
> >>>> the key is
> >>>>>>>>>> not changed.
> >>>>>>>>>>
> >>>>>>>>>> Naively, could we enforce something similar by setting the
> >>>> output key
> >>>>>>>>>> type as `Void`.
> >>>>>>>>>>
> >>>>>>>>>>      KStream#processValue(ProcessorSupplier<K, V, Void,
> >> VOut>
> >>>>>>>>>> processorSupplier)
> >>>>>>>>>>
> >>>>>>>>>> Not sure if this would work or not?
> >>>>>>>>>>
> >>>>>>>>>> Or it might be worth to add a new interface,
> >>>> `ValueProcessorSupplier`
> >>>>>>>>>> that ensures that the key is not modified?
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>> This is an important discussion, even more so with a DSL
> >> v2.0.
> >>>>>>>>>
> >>>>>>>>> At the moment, the DSL just flags whether partitioning is
> >>>> required based
> >>>>>>>> on
> >>>>>>>>> the DSL operation. As mentioned, `mapValues()` enforces only
> >>> the
> >>>> value
> >>>>>>>> has
> >>>>>>>>> changed through the DSL, though the only _guarantee_ we have
> >> is
> >>>> that
> >>>>>>>> Kafka
> >>>>>>>>> Streams "owns" the implementation, and we can flag this
> >>> properly.
> >>>>>>>>>
> >>>>>>>>> With a hypothetical v2.0 based on Record API, this will be
> >>>> harder to
> >>>>>>>>> enforce with the current APIs. e.g. with `mapValues(Record<K,
> >>> V>
> >>>>>>>> record)`,
> >>>>>>>>> nothing would stop users from using
> >>>>>>>> `record.withKey("needs_partitioning")`.
> >>>>>>>>>
> >>>>>>>>> The approach defined on this KIP is similar to what we have
> >> at
> >>>> the moment
> >>>>>>>>> on `ValueTransformer*` where it validates at runtime that the
> >>>> users are
> >>>>>>>> not
> >>>>>>>>> calling `forward` with `ForwardingDisabledProcessorContext`.
> >>>>>>>>> `ValueProcessorSupplier` is not meant to be a public API.
> >> Only
> >>>> to be used
> >>>>>>>>> internally on `processValues` implementation.
> >>>>>>>>>
> >>>>>>>>> At first, `KStream#processValue(ProcessorSupplier<K, V, Void,
> >>>> VOut>
> >>>>>>>>> processorSupplier)` won't work as it will require the
> >>> `Processor`
> >>>>>>>>> implementation to actually change the key. Will take a deeper
> >>>> look to
> >>>>>>>>> validate if this could solve this issue.
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> -Matthias
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> On 2/17/22 10:56 AM, Guozhang Wang wrote:
> >>>>>>>>>>> Regarding the last question Matthias had, I wonder if
> >> it's
> >>>> similar to
> >>>>>>>> my
> >>>>>>>>>>> first email's point 2) above? I think the rationale is
> >>> that,
> >>>> since
> >>>>>>>>>>> reference checks are relatively very cheap, it is
> >>> worthwhile
> >>>> to pay
> >>>>>>>> this
> >>>>>>>>>>> extra runtime checks and in return to have a single
> >>>> consolidated
> >>>>>>>>>>> ProcessorSupplier programming interface (i.e. we would
> >>>> eventually
> >>>>>>>>>>> deprecate ValueTransformerWithKeySupplier).
> >>>>>>>>>>>
> >>>>>>>>>>> On Wed, Feb 16, 2022 at 10:57 AM Jorge Esteban Quilcate
> >>>> Otoya <
> >>>>>>>>>>> quilcate.jo...@gmail.com> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>>> Thank you Matthias, this is great feedback.
> >>>>>>>>>>>>
> >>>>>>>>>>>> Adding my comments below.
> >>>>>>>>>>>>
> >>>>>>>>>>>> On Wed, 16 Feb 2022 at 00:42, Matthias J. Sax <
> >>>> mj...@apache.org>
> >>>>>>>> wrote:
> >>>>>>>>>>>>
> >>>>>>>>>>>>> Thanks for the KIP.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> In alignment to my reply to KIP-634, I am wondering
> >> if
> >>>> we are
> >>>>>>>> heading
> >>>>>>>>>>>>> into the right direction, or if we should consider to
> >>>> re-design the
> >>>>>>>> DSL
> >>>>>>>>>>>>> from scratch?
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>> I'm very excited about the idea of a DLS v2.0. It
> >>> probably
> >>>> deserves
> >>>>>>>> its
> >>>>>>>>>> own
> >>>>>>>>>>>> thread to start discussing ideas.
> >>>>>>>>>>>>
> >>>>>>>>>>>> For this KIP specifically, I think about it as a
> >>>> continuation from
> >>>>>>>>>> KIP-478.
> >>>>>>>>>>>> Therefore, it could make sense to have it as part of
> >> the
> >>>> current
> >>>>>>>>>> version of
> >>>>>>>>>>>> the DSL.
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Even if we don't do a DSL 2.0 right now, I have some
> >>>> concerns about
> >>>>>>>>>> this
> >>>>>>>>>>>>> KIP:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> (1) I am not sure if the propose changed is backward
> >>>> compatible? We
> >>>>>>>>>>>>> currently have:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>       void KStream#process(ProcessorSupplier,
> >> String...)
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> The newly proposed method:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>       KStream KStream#process(ProcessorSupplier)
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> seems to be an incompatible change?
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> The KIP states:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>> Modified method KStream#process should be
> >> compatible
> >>>> with previous
> >>>>>>>>>>>>> version, that at the moment is fixed to a Void return
> >>>> type.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Why is it backward compatible? Having both old and
> >> new
> >>>> #process()
> >>>>>>>> seems
> >>>>>>>>>>>>> not to be compatible to me? Or are you proposing to
> >>>> _change_ the
> >>>>>>>> method
> >>>>>>>>>>>>> signature (if yes, the `String...` parameter to add a
> >>>> state store
> >>>>>>>> seems
> >>>>>>>>>>>>> to be missing)? For this case, it seems that existing
> >>>> programs
> >>>>>>>> would at
> >>>>>>>>>>>>> least need to be recompiled -- it would only be a
> >>> source
> >>>> compatible
> >>>>>>>>>>>>> change, but not a binary compatible change?
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>> You're right. I'm not proposing the method signature.
> >>>>>>>>>>>> Totally agree about compatibility issue. I was only
> >>>> considering
> >>>>>>>> source
> >>>>>>>>>>>> compatibility and was ignorant that changing from void
> >> to
> >>>> a specific
> >>>>>>>>>> type
> >>>>>>>>>>>> would break binary compatibility.
> >>>>>>>>>>>> I will update the KIP to reflect this:
> >>>>>>>>>>>>
> >>>>>>>>>>>>> Modifications to method KStream#process are source
> >>>> compatible with
> >>>>>>>>>>>> previous version, though not binary compatible.
> >> Therefore
> >>>> will
> >>>>>>>> require
> >>>>>>>>>>>> users to recompile their applications with the latest
> >>>> version.
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>> I am also wondering if/how this change related to
> >>>> KIP-401:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>
> >>>>
> >>>
> >>
> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=97553756
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>     From a high level it might not conflict, but I
> >>> wanted
> >>>> to double
> >>>>>>>>>> check?
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>> Wasn't aware of this KIP, thanks for sharing! I don't
> >>>> think there is
> >>>>>>>>>>>> conflict between KIPs, as far as I understand.
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> For `KStream#processValues()`, my main concern is the
> >>>> added runtime
> >>>>>>>>>>>>> check if the key was modified or not -- it seems to
> >>>> provide bad user
> >>>>>>>>>>>>> experience -- enforcing that the key is not modified
> >> on
> >>>> an API
> >>>>>>>> level,
> >>>>>>>>>>>>> would seem to be much better.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Last, what is the purpose of `setRecordKey()` and
> >>>>>>>> `clearRecordKey()`? I
> >>>>>>>>>>>>> am not sure if I understand their purpose?
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>> Both methods set/clear the context (current key) to be
> >>>> used when
> >>>>>>>>>> checking
> >>>>>>>>>>>> keys on forward(record) implementation.
> >>>>>>>>>>>>
> >>>>>>>>>>>>> enforcing that the key is not modified on an API
> >> level,
> >>>> would seem
> >>>>>>>> to
> >>>>>>>>>> be
> >>>>>>>>>>>> much better.
> >>>>>>>>>>>>
> >>>>>>>>>>>> Not sure if I understand how this would look like. Do
> >> you
> >>>> mean
> >>>>>>>> checking
> >>>>>>>>>> it
> >>>>>>>>>>>> on the Record itself or somewhere else?
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>> -Matthias
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> On 2/15/22 11:53 AM, John Roesler wrote:
> >>>>>>>>>>>>>> My apologies, this feedback was intended for
> >> KIP-634.
> >>>>>>>>>>>>>> -John
> >>>>>>>>>>>>>>
> >>>>>>>>>>>>>> On Tue, Feb 15, 2022, at 13:15, John Roesler wrote:
> >>>>>>>>>>>>>>> Thanks for the update, Jorge,
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> I've just looked over the KIP again. Just one
> >> more
> >>>> small
> >>>>>>>>>>>>>>> concern:
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> 5) We can't just change the type of
> >>> Record#headers()
> >>>> to a
> >>>>>>>>>>>>>>> new fully qualified type. That would be a source-
> >>>>>>>>>>>>>>> incompatible breaking change for users.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Out options are:
> >>>>>>>>>>>>>>> * Deprecate the existing method and create a new
> >>> one
> >>>> with
> >>>>>>>>>>>>>>> the new type
> >>>>>>>>>>>>>>> * If the existing Headers is "not great but ok",
> >>>> then maybe
> >>>>>>>>>>>>>>> we leave it alone.
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>>> -John
> >>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>> On Mon, 2022-02-14 at 13:58 -0600, Paul Whalen
> >>> wrote:
> >>>>>>>>>>>>>>>> No specific comments, but I just wanted to
> >>> mention
> >>>> I like the
> >>>>>>>>>>>>> direction of
> >>>>>>>>>>>>>>>> the KIP.  My team is a big user of "transform"
> >>>> methods because of
> >>>>>>>>>> the
> >>>>>>>>>>>>>>>> ability to chain them, and I have always found
> >>> the
> >>>> terminology
> >>>>>>>>>>>>> challenging
> >>>>>>>>>>>>>>>> to explain alongside "process".  It felt like
> >> one
> >>>> concept with
> >>>>>>>> two
> >>>>>>>>>>>>> names.
> >>>>>>>>>>>>>>>> So moving towards a single API that is powerful
> >>>> enough to handle
> >>>>>>>>>> both
> >>>>>>>>>>>>> use
> >>>>>>>>>>>>>>>> cases seems absolutely correct to me.
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> Paul
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>> On Mon, Feb 14, 2022 at 1:12 PM Jorge Esteban
> >>>> Quilcate Otoya <
> >>>>>>>>>>>>>>>> quilcate.jo...@gmail.com> wrote:
> >>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> Got it. Thanks John, this make sense.
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> I've updated the KIP to include the
> >> deprecation
> >>>> of:
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>        - KStream#transform
> >>>>>>>>>>>>>>>>>        - KStream#transformValues
> >>>>>>>>>>>>>>>>>        - KStream#flatTransform
> >>>>>>>>>>>>>>>>>        - KStream#flatTransformValues
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>> On Fri, 11 Feb 2022 at 15:16, John Roesler <
> >>>> vvcep...@apache.org
> >>>>>>>>>
> >>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Thanks, Jorge!
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> I think it’ll be better to keep this KIP
> >>>> focused on KStream
> >>>>>>>>>> methods
> >>>>>>>>>>>>> only.
> >>>>>>>>>>>>>>>>>> I suspect that the KTable methods may be
> >> more
> >>>> complicated than
> >>>>>>>>>> just
> >>>>>>>>>>>>> that
> >>>>>>>>>>>>>>>>>> proposed replacement, but it’ll also be
> >>> easier
> >>>> to consider that
> >>>>>>>>>>>>> question
> >>>>>>>>>>>>>>>>> in
> >>>>>>>>>>>>>>>>>> isolation.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> The nice thing about just deprecating the
> >>>> KStream methods and
> >>>>>>>> not
> >>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>> Transform* interfaces is that you can keep
> >>>> your proposal just
> >>>>>>>>>>>> scoped
> >>>>>>>>>>>>> to
> >>>>>>>>>>>>>>>>>> KStream and not have any consequences for
> >> the
> >>>> rest of the DSL.
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> Thanks again,
> >>>>>>>>>>>>>>>>>> John
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> On Fri, Feb 11, 2022, at 06:43, Jorge
> >> Esteban
> >>>> Quilcate Otoya
> >>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>> Thanks, John.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> 4) I agree that we shouldn't deprecate
> >>> the
> >>>> Transformer*
> >>>>>>>>>>>>>>>>>>> classes, but do you think we should
> >>>> deprecate the
> >>>>>>>>>>>>>>>>>>> KStream#transform* methods? I'm curious
> >> if
> >>>> there's any
> >>>>>>>>>>>>>>>>>>> remaining reason to have those methods,
> >> or
> >>>> if your KIP
> >>>>>>>>>>>>>>>>>>> completely obviates them.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Good catch.
> >>>>>>>>>>>>>>>>>>> I considered that deprecating
> >>> `Transformer*`
> >>>> and `transform*`
> >>>>>>>>>>>> would
> >>>>>>>>>>>>> go
> >>>>>>>>>>>>>>>>>> hand
> >>>>>>>>>>>>>>>>>>> in hand — maybe it happened similarly
> >> with
> >>>> old `Processor` and
> >>>>>>>>>>>>>>>>> `process`?
> >>>>>>>>>>>>>>>>>>> Though deprecating only `transform*`
> >>>> operations could be a
> >>>>>>>> better
> >>>>>>>>>>>>>>>>> signal
> >>>>>>>>>>>>>>>>>>> for users than non deprecating anything
> >> at
> >>>> all and pave the
> >>>>>>>> way
> >>>>>>>>>> to
> >>>>>>>>>>>>> it's
> >>>>>>>>>>>>>>>>>>> deprecation.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> Should this deprecation also consider
> >>>> including
> >>>>>>>>>>>>>>>>> `KTable#transformValues`?
> >>>>>>>>>>>>>>>>>>> The approach proposed on the KIP:
> >>>>>>>>>>>>>>>>>>>
> >>>> `ktable.toStream().processValues().toTable()` seems fair to
> >>>>>>>> me,
> >>>>>>>>>>>>> though
> >>>>>>>>>>>>>>>>> I
> >>>>>>>>>>>>>>>>>>> will have to test it further.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> I'm happy to update the KIP if there's
> >> some
> >>>> consensus around
> >>>>>>>>>> this.
> >>>>>>>>>>>>>>>>>>> Will add the deprecation notes these days
> >>>> and wait for any
> >>>>>>>>>>>>> additional
> >>>>>>>>>>>>>>>>>>> feedback on this topic before wrapping up
> >>>> the KIP.
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>> On Fri, 11 Feb 2022 at 04:03, John
> >> Roesler
> >>> <
> >>>>>>>> vvcep...@apache.org>
> >>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Thanks for the update, Jorge!
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> I just read over the KIP again, and I'm
> >>> in
> >>>> support. One more
> >>>>>>>>>>>>>>>>>>>> question came up for me, though:
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> 4) I agree that we shouldn't deprecate
> >>> the
> >>>> Transformer*
> >>>>>>>>>>>>>>>>>>>> classes, but do you think we should
> >>>> deprecate the
> >>>>>>>>>>>>>>>>>>>> KStream#transform* methods? I'm curious
> >>> if
> >>>> there's any
> >>>>>>>>>>>>>>>>>>>> remaining reason to have those methods,
> >>> or
> >>>> if your KIP
> >>>>>>>>>>>>>>>>>>>> completely obviates them.
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>>>>>>>> -John
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> On Thu, 2022-02-10 at 21:32 +0000,
> >> Jorge
> >>>> Esteban Quilcate
> >>>>>>>>>>>>>>>>>>>> Otoya wrote:
> >>>>>>>>>>>>>>>>>>>>> Thank you both for your feedback!
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> I have added the following note on
> >>>> punctuation:
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> ```
> >>>>>>>>>>>>>>>>>>>>> NOTE: The key validation can be
> >> defined
> >>>> when processing the
> >>>>>>>>>>>>> message.
> >>>>>>>>>>>>>>>>>>>>> Though, with punctuations it won't be
> >>>> possible to define the
> >>>>>>>>>> key
> >>>>>>>>>>>>> for
> >>>>>>>>>>>>>>>>>>>>> validation before forwarding,
> >> therefore
> >>>> it won't be
> >>>>>>>> possible to
> >>>>>>>>>>>>>>>>>> forward
> >>>>>>>>>>>>>>>>>>>>> from punctuation.
> >>>>>>>>>>>>>>>>>>>>> This is similar behavior to how
> >>>> `ValueTransformer`s behave
> >>>>>>>> at
> >>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>> moment.
> >>>>>>>>>>>>>>>>>>>>> ```
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> Also make it explicit also that we
> >> are
> >>>> going to apply
> >>>>>>>>>>>> referencial
> >>>>>>>>>>>>>>>>>>>> equality
> >>>>>>>>>>>>>>>>>>>>> for key validation.
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> I hope this is covering all your
> >>>> feedback, let me know if
> >>>>>>>> I'm
> >>>>>>>>>>>>>>>>> missing
> >>>>>>>>>>>>>>>>>>>>> anything.
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> Cheers,
> >>>>>>>>>>>>>>>>>>>>> Jorge.
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>> On Wed, 9 Feb 2022 at 22:19, Guozhang
> >>>> Wang <
> >>>>>>>> wangg...@gmail.com
> >>>>>>>>>>>
> >>>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> I'm +1 on John's point 3) for
> >>>> punctuations.
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> And I think if people are on the
> >> same
> >>>> page that a reference
> >>>>>>>>>>>>>>>>> equality
> >>>>>>>>>>>>>>>>>>>> check
> >>>>>>>>>>>>>>>>>>>>>> per record is not a huge overhead,
> >> I
> >>>> think doing that
> >>>>>>>>>>>> enforcement
> >>>>>>>>>>>>>>>>> is
> >>>>>>>>>>>>>>>>>>>> better
> >>>>>>>>>>>>>>>>>>>>>> than documentations and hand-wavy
> >>>> undefined behaviors.
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> Guozhang
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> On Wed, Feb 9, 2022 at 11:27 AM
> >> John
> >>>> Roesler <
> >>>>>>>>>>>>> vvcep...@apache.org
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>> Thanks for the KIP Jorge,
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>> I'm in support of your proposal.
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>> 1)
> >>>>>>>>>>>>>>>>>>>>>>> I do agree with Guozhang's point
> >>>> (1). I think the cleanest
> >>>>>>>>>>>>>>>>>>>>>>> approach. I think it's cleaner
> >> and
> >>>> better to keep the
> >>>>>>>>>>>>>>>>>>>>>>> enforcement internal to the
> >>>> framework than to introduce a
> >>>>>>>>>>>>>>>>>>>>>>> public API or context wrapper for
> >>>> processors to use
> >>>>>>>>>>>>>>>>>>>>>>> explicitly.
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>> 2) I tend to agree with you on
> >> this
> >>>> one; I think the
> >>>>>>>>>>>>>>>>>>>>>>> equality check ought to be fast
> >>>> enough in practice.
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>> 3) I think this is implicit, but
> >>>> should be explicit in the
> >>>>>>>>>>>>>>>>>>>>>>> KIP: For the `processValues` API,
> >>>> because the framework
> >>>>>>>> sets
> >>>>>>>>>>>>>>>>>>>>>>> the key on the context before
> >>>> calling `process` and then
> >>>>>>>>>>>>>>>>>>>>>>> unsets it afterwards, there will
> >>>> always be no key set
> >>>>>>>> during
> >>>>>>>>>>>>>>>>>>>>>>> task puctuation. Therefore, while
> >>>> processors may still
> >>>>>>>>>>>>>>>>>>>>>>> register punctuators, they will
> >> not
> >>>> be able to forward
> >>>>>>>>>>>>>>>>>>>>>>> anything from them.
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>> This is functionally equivalent
> >> to
> >>>> the existing
> >>>>>>>>>>>>>>>>>>>>>>> transformers, by the way, that
> >> are
> >>>> also forbidden to
> >>>>>>>> forward
> >>>>>>>>>>>>>>>>>>>>>>> anything during punctuation.
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>> For what it's worth, I think this
> >>> is
> >>>> the best tradeoff.
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>> The only alternative I see is not
> >>> to
> >>>> place any restriction
> >>>>>>>>>>>>>>>>>>>>>>> on forwarded keys at all and just
> >>>> document that if users
> >>>>>>>>>>>>>>>>>>>>>>> don't maintain proper
> >> partitioning,
> >>>> they'll get undefined
> >>>>>>>>>>>>>>>>>>>>>>> behavior. That might be more
> >>>> powerful, but it's also a
> >>>>>>>>>>>>>>>>>>>>>>> usability problem.
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>> Thanks,
> >>>>>>>>>>>>>>>>>>>>>>> -John
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>> On Wed, 2022-02-09 at 11:34
> >> +0000,
> >>>> Jorge Esteban Quilcate
> >>>>>>>>>>>>>>>>>>>>>>> Otoya wrote:
> >>>>>>>>>>>>>>>>>>>>>>>> Thanks Guozhang.
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>> Does `ValueProcessorContext`
> >>>> have to be a public API? It
> >>>>>>>>>>>>>>>>> seems
> >>>>>>>>>>>>>>>>>>>> to me
> >>>>>>>>>>>>>>>>>>>>>>>> that this can be completely
> >>>> abstracted away from user
> >>>>>>>>>>>>>>>>> interfaces
> >>>>>>>>>>>>>>>>>>>> as an
> >>>>>>>>>>>>>>>>>>>>>>>> internal class
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>> Totally agree. No intention to
> >>> add
> >>>> these as public APIs.
> >>>>>>>>>> Will
> >>>>>>>>>>>>>>>>>>>> update
> >>>>>>>>>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>>>>>>>> KIP to reflect this.
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>> in the past the rationale for
> >>>> enforcing it at the
> >>>>>>>>>>>>>>>>>>>>>>>> interface layer rather than do
> >>>> runtime checks is that it
> >>>>>>>> is
> >>>>>>>>>>>>>>>>> more
> >>>>>>>>>>>>>>>>>>>>>>> efficient.
> >>>>>>>>>>>>>>>>>>>>>>>>> I'm not sure how much
> >> overhead
> >>>> it may incur to check if
> >>>>>>>> the
> >>>>>>>>>>>>>>>>>> key
> >>>>>>>>>>>>>>>>>>>> did
> >>>>>>>>>>>>>>>>>>>>>> not
> >>>>>>>>>>>>>>>>>>>>>>>> change: if it is just a
> >> reference
> >>>> equality check maybe
> >>>>>>>> it's
> >>>>>>>>>>>>>>>>>> okay.
> >>>>>>>>>>>>>>>>>>>>>> What's
> >>>>>>>>>>>>>>>>>>>>>>>> your take on this?
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>> Agree, reference equality
> >> should
> >>>> cover this validation
> >>>>>>>> and
> >>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>>>> overhead
> >>>>>>>>>>>>>>>>>>>>>>>> impact should not be
> >> meaningful.
> >>>>>>>>>>>>>>>>>>>>>>>> Will update the KIP to reflect
> >>>> this as well.
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>> On Tue, 8 Feb 2022 at 19:05,
> >>>> Guozhang Wang <
> >>>>>>>>>>>>>>>>> wangg...@gmail.com>
> >>>>>>>>>>>>>>>>>>>> wrote:
> >>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>> Hello Jorge,
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>> Thanks for bringing this
> >> KIP! I
> >>>> think this is a nice
> >>>>>>>> idea
> >>>>>>>>>> to
> >>>>>>>>>>>>>>>>>>>> consider
> >>>>>>>>>>>>>>>>>>>>>>> using
> >>>>>>>>>>>>>>>>>>>>>>>>> a single overloaded function
> >>>> name for #process, just a
> >>>>>>>>>>>>>>>>> couple
> >>>>>>>>>>>>>>>>>>>> quick
> >>>>>>>>>>>>>>>>>>>>>>>>> questions after reading the
> >>>> proposal:
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>> 1) Does
> >> `ValueProcessorContext`
> >>>> have to be a public
> >>>>>>>> API? It
> >>>>>>>>>>>>>>>>>>>> seems to
> >>>>>>>>>>>>>>>>>>>>>> me
> >>>>>>>>>>>>>>>>>>>>>>>>> that this can be completely
> >>>> abstracted away from user
> >>>>>>>>>>>>>>>>>> interfaces
> >>>>>>>>>>>>>>>>>>>> as
> >>>>>>>>>>>>>>>>>>>>>> an
> >>>>>>>>>>>>>>>>>>>>>>>>> internal class, and we call
> >> the
> >>>> `setKey` before calling
> >>>>>>>>>>>>>>>>>>>>>>> user-instantiated
> >>>>>>>>>>>>>>>>>>>>>>>>> `process` function, and then
> >> in
> >>>> its overridden
> >>>>>>>> `forward` it
> >>>>>>>>>>>>>>>>>> can
> >>>>>>>>>>>>>>>>>>>> just
> >>>>>>>>>>>>>>>>>>>>>>> check
> >>>>>>>>>>>>>>>>>>>>>>>>> if the key changes or not.
> >>>>>>>>>>>>>>>>>>>>>>>>> 2) Related to 1) above, in
> >> the
> >>>> past the rationale for
> >>>>>>>>>>>>>>>>>> enforcing
> >>>>>>>>>>>>>>>>>>>> it at
> >>>>>>>>>>>>>>>>>>>>>>> the
> >>>>>>>>>>>>>>>>>>>>>>>>> interface layer rather than
> >> do
> >>>> runtime checks is that
> >>>>>>>> it is
> >>>>>>>>>>>>>>>>>> more
> >>>>>>>>>>>>>>>>>>>>>>> efficient.
> >>>>>>>>>>>>>>>>>>>>>>>>> I'm not sure how much
> >> overhead
> >>>> it may incur to check if
> >>>>>>>> the
> >>>>>>>>>>>>>>>>>> key
> >>>>>>>>>>>>>>>>>>>> did
> >>>>>>>>>>>>>>>>>>>>>> not
> >>>>>>>>>>>>>>>>>>>>>>>>> change: if it is just a
> >>>> reference equality check maybe
> >>>>>>>> it's
> >>>>>>>>>>>>>>>>>> okay.
> >>>>>>>>>>>>>>>>>>>>>>> What's
> >>>>>>>>>>>>>>>>>>>>>>>>> your take on this?
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>> Guozhang
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>> On Tue, Feb 8, 2022 at 5:17
> >> AM
> >>>> Jorge Esteban Quilcate
> >>>>>>>> Otoya
> >>>>>>>>>>>>>>>>> <
> >>>>>>>>>>>>>>>>>>>>>>>>> quilcate.jo...@gmail.com>
> >>> wrote:
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>> Hi Dev team,
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>> I'd like to start a new
> >>>> discussion thread on Kafka
> >>>>>>>> Streams
> >>>>>>>>>>>>>>>>>>>> KIP-820:
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>
> >>>>
> >>>
> >>
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-820%3A+Extend+KStream+process+with+new+Processor+API
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>> This KIP is aimed to extend
> >>>> the current
> >>>>>>>> `KStream#process`
> >>>>>>>>>>>>>>>>>> API
> >>>>>>>>>>>>>>>>>>>> to
> >>>>>>>>>>>>>>>>>>>>>>> return
> >>>>>>>>>>>>>>>>>>>>>>>>>> output values that could be
> >>>> chained across the
> >>>>>>>> topology,
> >>>>>>>>>>>>>>>>> as
> >>>>>>>>>>>>>>>>>>>> well as
> >>>>>>>>>>>>>>>>>>>>>>>>>> introducing a new
> >>>> `KStream#processValues` to use
> >>>>>>>> processor
> >>>>>>>>>>>>>>>>>>>> while
> >>>>>>>>>>>>>>>>>>>>>>>>> validating
> >>>>>>>>>>>>>>>>>>>>>>>>>> keys haven't change and
> >>>> repartition is not required.
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>> Looking forward to your
> >>>> feedback.
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>> Regards,
> >>>>>>>>>>>>>>>>>>>>>>>>>> Jorge.
> >>>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>>> --
> >>>>>>>>>>>>>>>>>>>>>>>>> -- Guozhang
> >>>>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>>> --
> >>>>>>>>>>>>>>>>>>>>>> -- Guozhang
> >>>>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>
> >>>>
> >>>>
> >>>
> >>
> >>
> >> --
> >> -- Guozhang
> >>
> >
>

Reply via email to