Thanks guys! I agree with what Lucas said about 117c, we can always loosen
a restriction later and I don't want to do anything now that might get in
the way of the new threading models.

With that I think we're all in agreement on 117. I'll update the KIP to
include what we've discussed

(and will fix the remaining #finalAssignment mention as well, thanks Bruno.
Glad to have such good proof readers! :P)

On Tue, Apr 30, 2024 at 8:35 AM Bruno Cadonna <cado...@apache.org> wrote:

> Hi again,
>
> I forgot to ask whether you could add the agreement about handling
> invalid assignment to the KIP.
>
> Best,
> Bruno
>
> On 4/30/24 2:00 PM, Bruno Cadonna wrote:
> > Hi all,
> >
> > I think we are converging!
> >
> > 117
> > a) fail: Since it is an invalid consumer assignment
> > b) pass: I agree that not assigning a task might be reasonable in some
> > situations
> > c) fail: For the reasons Lucas pointed out. I am missing a good use case
> > here.
> > d) fail: It is invalid
> >
> >
> > Somewhere in the KIP you still use finalAssignment() instead of the
> > wonderful method name onAssignmentComputed() ;-)
> > "... interface also includes a method named finalAssignment which is
> > called with the final computed GroupAssignment ..."
> >
> >
> > Best,
> > Bruno
> >
> >
> > On 4/30/24 1:04 PM, Lucas Brutschy wrote:
> >> Hi,
> >>
> >> Looks like a great KIP to me!
> >>
> >> I'm late, so I'm only going to comment on the last open point 117. I'm
> >> against any fallbacks like "use the default assignor if the custom
> >> assignment is invalid", as it's just going to hide bugs. For the 4
> >> cases mentioned by Sophie:
> >>
> >> 117a) I'd fail immediately here, as it's an implementation bug, and
> >> should not lead to a valid consumer group assignment.
> >> 117b) Agreed. This is a useful assignment and should be allowed.
> >> 117c) This is the tricky case. However, I'm leaning towards not
> >> allowing this, unless we have a concrete use case. This will block us
> >> from potentially using a single consumer for active and standby tasks
> >> in the future. It's easier to drop the restriction later if we have a
> >> concrete use case.
> >> 117d) Definitely fail immediately, as you said.
> >>
> >> Cheers,
> >> Lucas
> >>
> >>
> >>
> >> On Mon, Apr 29, 2024 at 11:13 PM Sophie Blee-Goldman
> >> <sop...@responsive.dev> wrote:
> >>>
> >>> Yeah I think that sums it up well. Either you computed a *possible*
> >>> assignment,
> >>> or you returned something that makes it literally impossible for the
> >>> StreamsPartitionAssignor to decipher/translate into an actual group
> >>> assignment, in which case it should just fail
> >>>
> >>> That's more or less it for the open questions that have been raised
> >>> so far,
> >>> so I just want to remind folks that there's already a voting thread for
> >>> this. I cast my vote a few minutes ago so it should resurface in
> >>> everyone's
> >>> inbox :)
> >>>
> >>> On Thu, Apr 25, 2024 at 11:42 PM Rohan Desai <desai.p.ro...@gmail.com>
> >>> wrote:
> >>>
> >>>> 117: as Sophie laid out, there are two cases here right:
> >>>> 1. cases that are considered invalid by the existing assignors but are
> >>>> still valid assignments in the sense that they can be used to
> >>>> generate a
> >>>> valid consumer group assignment (from the perspective of the
> >>>> consumer group
> >>>> protocol). An assignment that excludes a task is one such example, and
> >>>> Sophie pointed out a good use case for it. I also think it makes
> >>>> sense to
> >>>> allow these. It's hard to predict how a user might want to use the
> >>>> custom
> >>>> assignor, and its reasonable to expect them to use it with care and
> not
> >>>> hand-hold them.
> >>>> 2. cases that are not valid because it is impossible to compute a
> valid
> >>>> consumer group assignment from them. In this case it seems totally
> >>>> reasonable to just throw a fatal exception that gets passed to the
> >>>> uncaught
> >>>> exception handler. If this case happens then there is some bug in the
> >>>> user's assignor and its totally reasonable to fail the application
> >>>> in that
> >>>> case. We _could_ try to be more graceful and default to one of the
> >>>> existing
> >>>> assignors. But it's usually better to fail hard and fast when there
> >>>> is some
> >>>> illegal state detected imo.
> >>>>
> >>>> On Fri, Apr 19, 2024 at 4:18 PM Rohan Desai <desai.p.ro...@gmail.com>
> >>>> wrote:
> >>>>
> >>>>> Bruno, I've incorporated your feedback into the KIP document.
> >>>>>
> >>>>> On Fri, Apr 19, 2024 at 3:55 PM Rohan Desai <desai.p.ro...@gmail.com
> >
> >>>>> wrote:
> >>>>>
> >>>>>> Thanks for the feedback Bruno! For the most part I think it makes
> >>>>>> sense,
> >>>>>> but leaving a couple follow-up thoughts/questions:
> >>>>>>
> >>>>>> re 4: I think Sophie's point was slightly different - that we
> >>>>>> might want
> >>>>>> to wrap the return type for `assign` in a class so that its easily
> >>>>>> extensible. This makes sense to me. Whether we do that or not, we
> can
> >>>> have
> >>>>>> the return type be a Set instead of a Map as well.
> >>>>>>
> >>>>>> re 6: Yes, it's a callback that's called with the final assignment.
> I
> >>>>>> like your suggested name.
> >>>>>>
> >>>>>> On Fri, Apr 5, 2024 at 12:17 PM Rohan Desai <
> desai.p.ro...@gmail.com>
> >>>>>> wrote:
> >>>>>>
> >>>>>>> Thanks for the feedback Sophie!
> >>>>>>>
> >>>>>>> re1: Totally agree. The fact that it's related to the partition
> >>>> assignor
> >>>>>>> is clear from just `task.assignor`. I'll update.
> >>>>>>> re3: This is a good point, and something I would find useful
> >>>> personally.
> >>>>>>> I think its worth adding an interface that lets the plugin
> >>>>>>> observe the
> >>>>>>> final assignment. I'll add that.
> >>>>>>> re4: I like the new `NodeAssignment` type. I'll update the KIP with
> >>>> that.
> >>>>>>>
> >>>>>>> On Thu, Nov 9, 2023 at 11:18 PM Rohan Desai
> >>>>>>> <desai.p.ro...@gmail.com>
> >>>>>>> wrote:
> >>>>>>>
> >>>>>>>> Thanks for the feedback so far! I think pretty much all of it is
> >>>>>>>> reasonable. I'll reply to it inline:
> >>>>>>>>
> >>>>>>>>> 1. All the API logic is granular at the Task level, except the
> >>>>>>>> previousOwnerForPartition func. I’m not clear what’s the
> motivation
> >>>>>>>> behind it, does our controller also want to change how the
> >>>>>>>> partitions->tasks mapping is formed?
> >>>>>>>> You're right that this is out of place. I've removed this method
> as
> >>>>>>>> it's not needed by the task assignor.
> >>>>>>>>
> >>>>>>>>> 2. Just on the API layering itself: it feels a bit weird to
> >>>>>>>>> have the
> >>>>>>>> three built-in functions (defaultStandbyTaskAssignment etc)
> >>>>>>>> sitting in
> >>>>>>>> the ApplicationMetadata class. If we consider them as some default
> >>>> util
> >>>>>>>> functions, how about introducing moving those into their own
> static
> >>>> util
> >>>>>>>> methods to separate from the ApplicationMetadata “fact objects” ?
> >>>>>>>> Agreed. Updated in the latest revision of the kip. These have been
> >>>>>>>> moved to TaskAssignorUtils
> >>>>>>>>
> >>>>>>>>> 3. I personally prefer `NodeAssignment` to be a read-only object
> >>>>>>>> containing the decisions made by the assignor, including the
> >>>>>>>> requestFollowupRebalance flag. For manipulating the half-baked
> >>>>>>>> results
> >>>>>>>> inside the assignor itself, maybe we can just be flexible to let
> >>>> users use
> >>>>>>>> whatever struts / their own classes even, if they like. WDYT?
> >>>>>>>> Agreed. Updated in the latest version of the kip.
> >>>>>>>>
> >>>>>>>>> 1. For the API, thoughts on changing the method signature to
> >>>>>>>>> return
> >>>> a
> >>>>>>>> (non-Optional) TaskAssignor? Then we can either have the default
> >>>>>>>> implementation return new HighAvailabilityTaskAssignor or just
> >>>>>>>> have a
> >>>>>>>> default implementation class that people can extend if they don't
> >>>> want to
> >>>>>>>> implement every method.
> >>>>>>>> Based on some other discussion, I actually decided to get rid of
> >>>>>>>> the
> >>>>>>>> plugin interface, and instead use config to specify individual
> >>>>>>>> plugin
> >>>>>>>> behaviour. So the method you're referring to is no longer part
> >>>>>>>> of the
> >>>>>>>> proposal.
> >>>>>>>>
> >>>>>>>>> 3. Speaking of ApplicationMetadata, the javadoc says it's read
> >>>>>>>>> only
> >>>>>>>> but
> >>>>>>>> theres methods that return void on it? It's not totally clear to
> me
> >>>> how
> >>>>>>>> that interface is supposed to be used by the assignor. It'd be
> nice
> >>>> if we
> >>>>>>>> could flip that interface such that it becomes part of the output
> >>>> instead
> >>>>>>>> of an input to the plugin.
> >>>>>>>> I've moved those methods to a util class. They're really utility
> >>>>>>>> methods the assignor might want to call to do some default or
> >>>> optimized
> >>>>>>>> assignment for some cases like rack-awareness.
> >>>>>>>>
> >>>>>>>>> 4. We should consider wrapping UUID in a ProcessID class so
> >>>>>>>>> that we
> >>>>>>>> control
> >>>>>>>> the interface (there are a few places where UUID is directly
> used).
> >>>>>>>> I like it. Updated the proposal.
> >>>>>>>>
> >>>>>>>>> 5. What does NodeState#newAssignmentForNode() do? I thought the
> >>>>>>>> point was
> >>>>>>>> for the plugin to make the assignment? Is that the result of the
> >>>>>>>> default logic?
> >>>>>>>> It doesn't need to be part of the interface. I've removed it.
> >>>>>>>>
> >>>>>>>>> re 2/6:
> >>>>>>>>
> >>>>>>>> I generally agree with these points, but I'd rather hash that
> >>>>>>>> out in a
> >>>>>>>> PR than in the KIP review, as it'll be clearer what gets used
> >>>>>>>> how. It
> >>>> seems
> >>>>>>>> to me (committers please correct me if I'm wrong) that as long as
> >>>> we're on
> >>>>>>>> the same page about what information the interfaces are returning,
> >>>> that's
> >>>>>>>> ok at this level of discussion.
> >>>>>>>>
> >>>>>>>> On Tue, Nov 7, 2023 at 12:03 PM Rohan Desai
> >>>>>>>> <desai.p.ro...@gmail.com>
> >>>>>>>> wrote:
> >>>>>>>>
> >>>>>>>>> Hello All,
> >>>>>>>>>
> >>>>>>>>> I'd like to start a discussion on KIP-924 (
> >>>>>>>>>
> >>>>
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-924%3A+customizable+task+assignment+for+Streams
> >>>> )
> >>>>>>>>> which proposes an interface to allow users to plug into the
> >>>>>>>>> streams
> >>>>>>>>> partition assignor. The motivation section in the KIP goes into
> >>>>>>>>> some
> >>>> more
> >>>>>>>>> detail on why we think this is a useful addition. Thanks in
> >>>>>>>>> advance
> >>>> for
> >>>>>>>>> your feedback!
> >>>>>>>>>
> >>>>>>>>> Best Regards,
> >>>>>>>>>
> >>>>>>>>> Rohan
> >>>>>>>>>
> >>>>>>>>>
> >>>>
>

Reply via email to