Thanks all!

I agree with Matthias and Jon on going forward with the new
`FixedKeyRecord` approach.
The KIP has been updated accordingly.

Feel free to add your vote or amend on the vote thread if needed.

Cheers,

On Mon, 7 Mar 2022 at 21:57, Matthias J. Sax <mj...@apache.org> wrote:

> I think it's ok that we cannot prevent users from mutating a given
> read-only object. We have similar issues "all over the place" in the
> API, because it's just how Java works unfortunately (eg,
> `ValueMapperWithKey` and similar interfaces).
>
> The point being is, that the API clearly expresses that the key should
> not be changes, as `FixedKeyRecord` as not `withKey()` method, what is
> much better then having `Record.withKey()` and thus incorrectly
> indicating to user that it would be ok to set a new key.
>
> I think it's worth to add the new interfaces.
>
>
> -Matthias
>
>
> On 3/7/22 11:46 AM, Guozhang Wang wrote:
> > Thanks John! I feel a bit ashamed of just thinking loud here without
> trying
> > out prototypes myself :P
> >
> > I think the FixedKeyProcessor/Record looks very good -- like you said,
> > since we are making a new set of APIs then why don't we reconsider more
> > bolderly -- but at the same time I'd also like to make sure we agree on
> how
> > much "safety" we can achieve in runtime: even with the proposed APIs, we
> > cannot prevent users doing something like:
> >
> > ---------------
> > process(FixedKeyRecord inputRecord) {
> >      inputRecord.key().modifyField(...); // this is not preventable with
> > runtime key validations either since we just check the key object itself
> is
> > not replaced
> >      context.forward(inputRecord);
> > }
> >
> > ---------------
> >
> > I.e. in either type-safety or runtime validation, we cannot be 100% safe
> > that users would not do anything wrong. This drives me to think, how much
> > we'd like to pay to "remind" (instead of say "enforce", since we cannot
> > really do it) users the semantics of "processValue". Personally I felt
> that
> > adding the new set of APIs for that purpose only is a bit overkill, and
> > hence was leaning towards just the runtime validation. But I admit this
> is
> > purely subjective so I'm willing to yield to the group if others feel
> it's
> > worthy to do so.
> >
> >
> > Guozhang
> >
> >
> >
> > On Mon, Mar 7, 2022 at 10:32 AM Jorge Esteban Quilcate Otoya <
> > quilcate.jo...@gmail.com> wrote:
> >
> >> Thanks, John!
> >> This looks very promising.
> >>
> >> I will familiarize this approach and update the KIP accordingly. From
> what
> >> I can see so far, this should cover most of the open issues in this
> >> proposal.
> >>
> >> PS.
> >>
> >>> Just as a reminder, the current approach with transformers
> >>> is NOT enforced at compile time. Transformers have access to
> >>> a "forwarding disabled" processor context, which still has
> >>> the forward methods that throw a runtime exception when
> >>> invoked.
> >>
> >> Agree. I was referring to the value transformers where `readOnlyKey` is
> >> passed but not forwarded internally. Though about the "forwarding
> disabled"
> >> approach, you're totally right that is a runtime validation.
> >> Regardless, the approach proposed here will be a much better one.
> >>
> >>
> >> On Sun, 6 Mar 2022 at 18:59, John Roesler <vvcep...@apache.org> wrote:
> >>
> >>> Hello all,
> >>>
> >>> It seems like we're making good progress on this discussion.
> >>> If I'm keeping track correctly, if we can resolve this
> >>> question about how to handle processValues(), then we should
> >>> be able to finalize the vote, right?
> >>>
> >>> I share Matthias's preference for having a type-safe API.
> >>>
> >>> Just as a reminder, the current approach with transformers
> >>> is NOT enforced at compile time. Transformers have access to
> >>> a "forwarding disabled" processor context, which still has
> >>> the forward methods that throw a runtime exception when
> >>> invoked.
> >>>
> >>> However, the spirit of the "new processor api" line of work
> >>> is to clean up a lot of the cruft around the original
> >>> processor API, so this is a good opportunity to introduce a
> >>> type-safe version if we can.
> >>>
> >>> Based on my experience adding the new processor API, I felt
> >>> like it should be possible to do what he suggests, but it
> >>> would be more involved than what he said. The biggest thing
> >>> I learned from that effort, though, is that you really have
> >>> to just try it to see what all the complications are.
> >>>
> >>> With that in mind, I went ahead and implemented the
> >>> suggestion: https://github.com/apache/kafka/pull/11854
> >>>
> >>> This is a functional prototype. It only adds processValues,
> >>> which takes a supplier of a new type, FixedKeyProcessor.
> >>> That processor only processes FixedKeyRecords, which have a
> >>> key that cannot be changed. FixedKeyProcessors have a
> >>> special context, a FixedKeyProcessorContext, which can only
> >>> forward FixedKeyRecords.
> >>>
> >>> FixedKeyRecords have "fixed keys" because its key can only
> >>> be set in the constructor, and its constructor is package-
> >>> private.
> >>>
> >>> As you can see, this new record/processor/context ecosystem
> >>> is an independent peer of the general one. This is necessary
> >>> to ensure the desired compiler check. For example, if
> >>> FixedKeyRecord were merely an interface implemented by
> >>> Record, then users could create a new Record with a new key
> >>> and forward it as a FixedKeyRecord, violating the
> >>> constraint.
> >>>
> >>> As I said, with this proposal, the devil is in the details,
> >>> so if anyone thinks the API can be simplified, I suggest you
> >>> check out the branch and try out your proposal. I'd be very
> >>> happy to have a simplier solution, but I'm also pretty sure
> >>> this complexity is necessary.
> >>>
> >>> Taking a step back, I do think this approach results in a
> >>> better API, even though the change is a little complicated.
> >>>
> >>> Thanks,
> >>> -John
> >>>
> >>> On Sun, 2022-03-06 at 10:51 +0000, Jorge Esteban Quilcate
> >>> Otoya wrote:
> >>>> 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