Quick follow up. I did a small update to the KIP with regard to https://issues.apache.org/jira/browse/KAFKA-12909
Israel, Sophie, and Guozhang did agree to this change. I don't think we need to re-vote. Please let us know if there are any concerns. -Matthias On 1/27/21 12:48 PM, Sophie Blee-Goldman wrote: > Thanks Bruno, that sounds like a good addition. +1 > > On Wed, Jan 27, 2021 at 12:34 PM Bruno Cadonna <br...@confluent.io> wrote: > >> Hi all, >> >> During the implementation, we notices that method removeStreamThread() >> may block indefinitely when the stream thread chosen for removal is >> blocked and cannot be shut down. Thus, we will add an overload that >> takes a timeout. The newly added method will throw a TimeoutException, >> when the timeout is exceeded. >> >> We updated the KIP accordingly. >> >> KIP: https://cwiki.apache.org/confluence/x/FDd4CQ >> >> Best, >> Bruno >> >> On 30.09.20 13:51, Bruno Cadonna wrote: >>> Thank you all for voting! >>> >>> This KIP is accepted with 3 binding +1 (Guozhang, John, Matthias). >>> >>> Best, >>> Bruno >>> >>> On 29.09.20 22:24, Matthias J. Sax wrote: >>>> +1 (binding) >>>> >>>> I am not super happy with the impact on the client state. For example, I >>>> don't understand why it's ok to scale out if we lose one thread out of >>>> four, but why it's not ok to scale out if we lose one thread out of one >>>> (for this case, we would enter ERROR state and cannot add new threads >>>> afterwards). >>>> >>>> However, this might be an issue for a follow up KIP. >>>> >>>> >>>> -Matthias >>>> >>>> On 9/29/20 7:20 AM, John Roesler wrote: >>>>> Thanks, Bruno, this sounds good to me. >>>>> -John >>>>> >>>>> On Tue, Sep 29, 2020, at 03:13, Bruno Cadonna wrote: >>>>>> Hi all, >>>>>> >>>>>> I did two minor modifications to the KIP. >>>>>> >>>>>> - I removed the rather strict guarantee "Dead stream threads are >>>>>> removed >>>>>> from a Kafka Streams client at latest after the next call to >>>>>> KafkaStreams#addStreamThread() or KafkaStreams#removeStreamThread() >>>>>> following the transition to state DEAD." >>>>>> Dead stream threads will be still removed, but the behavior will be >>>>>> less >>>>>> strict. >>>>>> >>>>>> - Added a sentence that states that the Kafka Streams client will >>>>>> transit to ERROR if the last alive stream thread dies exceptionally. >>>>>> This corresponds to the current behavior. >>>>>> >>>>>> I will not restart voting and keep the votes so far. >>>>>> >>>>>> Best, >>>>>> Bruno >>>>>> >>>>>> On 22.09.20 01:19, John Roesler wrote: >>>>>>> I’m +1 also. Thanks, Bruno! >>>>>>> -John >>>>>>> >>>>>>> On Mon, Sep 21, 2020, at 17:08, Guozhang Wang wrote: >>>>>>>> Thanks Bruno. I'm +1 on the KIP. >>>>>>>> >>>>>>>> On Mon, Sep 21, 2020 at 2:49 AM Bruno Cadonna <br...@confluent.io> >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> I would like to restart from zero the voting on KIP-663 that >>>>>>>>> proposes to >>>>>>>>> add methods to the Kafka Streams client to add and remove stream >>>>>>>>> threads >>>>>>>>> during execution. >>>>>>>>> >>>>>>>>> >>>>>>>>> >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-663%3A+API+to+Start+and+Shut+Down+Stream+Threads >>>>>>>>> >>>>>>>>> >>>>>>>>> Matthias, if you are still +1, please vote again. >>>>>>>>> >>>>>>>>> Best, >>>>>>>>> Bruno >>>>>>>>> >>>>>>>>> On 04.09.20 23:12, John Roesler wrote: >>>>>>>>>> Hi Sophie, >>>>>>>>>> >>>>>>>>>> Uh, oh, it's never a good sign when the discussion moves >>>>>>>>>> into the vote thread :) >>>>>>>>>> >>>>>>>>>> I agree with you, it seems like a good touch for >>>>>>>>>> removeStreamThread() to return the name of the thread that >>>>>>>>>> got removed, rather than a boolean flag. Maybe the return >>>>>>>>>> value would be `null` if there is no thread to remove. >>>>>>>>>> >>>>>>>>>> If we go that way, I'd suggest that addStreamThread() also >>>>>>>>>> return the name of the newly created thread, or null if no >>>>>>>>>> thread can be created right now. >>>>>>>>>> >>>>>>>>>> I'm not completely sure if I think that callers of this >>>>>>>>>> method would know exactly how many threads there are. Sure, >>>>>>>>>> if a human being is sitting there looking at the metrics or >>>>>>>>>> logs and decides to call the method, it would work out, but >>>>>>>>>> I'd expect this kind of method to find its way into >>>>>>>>>> automated tooling that reacts to things like current system >>>>>>>>>> load or resource saturation. Those kinds of toolchains often >>>>>>>>>> are part of a distributed system, and it's probably not that >>>>>>>>>> easy to guarantee that the thread count they observe is >>>>>>>>>> fully consistent with the number of threads that are >>>>>>>>>> actually running. Therefore, an in-situ `int >>>>>>>>>> numStreamThreads()` method might not be a bad idea. Then >>>>>>>>>> again, it seems sort of optional. A caller can catch an >>>>>>>>>> exception or react to a `null` return value just the same >>>>>>>>>> either way. Having both add/remove methods behave similarly >>>>>>>>>> is probably more valuable. >>>>>>>>>> >>>>>>>>>> Thanks, >>>>>>>>>> -John >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Thu, 2020-09-03 at 12:15 -0700, Sophie Blee-Goldman >>>>>>>>>> wrote: >>>>>>>>>>> Hey, sorry for the late reply, I just have one minor >>>>>>>>>>> suggestion. Since >>>>>>>>> we >>>>>>>>>>> don't >>>>>>>>>>> make any guarantees about which thread gets removed or allow >>>>>>>>>>> the user to >>>>>>>>>>> specify, I think we should return either the index or full name >>>>>>>>>>> of the >>>>>>>>>>> thread >>>>>>>>>>> that does get removed by removeThread(). >>>>>>>>>>> >>>>>>>>>>> I know you just updated the KIP to return true/false if there >>>>>>>>> are/aren't any >>>>>>>>>>> threads to be removed, but I think this would be more >>>>>>>>>>> appropriate as an >>>>>>>>>>> exception than as a return type. I think it's reasonable to >> expect >>>>>>>>> users to >>>>>>>>>>> have some sense to how many threads are remaining, and not try >>>>>>>>>>> to remove >>>>>>>>>>> a thread when there is none left. To me, that indicates >>>>>>>>>>> something wrong >>>>>>>>>>> with the user application code and should be treated as an >>>>>>>>>>> exceptional >>>>>>>>> case. >>>>>>>>>>> I don't think the same code clarify argument applies here as to >>>>>>>>>>> the >>>>>>>>>>> addStreamThread() case, as there's no reason for an application >>>>>>>>>>> to be >>>>>>>>>>> looping and retrying removeStreamThread() since if that fails, >>>>>>>>>>> it's >>>>>>>>> because >>>>>>>>>>> there are no threads left and thus it will continue to always >>>>>>>>>>> fail. And >>>>>>>>> if >>>>>>>>>>> the >>>>>>>>>>> user actually wants to shut down all threads, they should just >>>>>>>>>>> close the >>>>>>>>>>> whole application rather than call removeStreamThread() in a >> loop. >>>>>>>>>>> >>>>>>>>>>> While I generally think it should be straightforward for users >>>>>>>>>>> to track >>>>>>>>> how >>>>>>>>>>> many stream threads they have running, maybe it would be nice >>>>>>>>>>> to add >>>>>>>>>>> a small utility method that does this for them. Something like >>>>>>>>>>> >>>>>>>>>>> // Returns the number of currently alive threads >>>>>>>>>>> boolean runningStreamThreads(); >>>>>>>>>>> >>>>>>>>>>> On Thu, Sep 3, 2020 at 7:41 AM Matthias J. Sax <mj...@apache.org >>> >>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>>> +1 (binding) >>>>>>>>>>>> >>>>>>>>>>>> On 9/3/20 6:16 AM, Bruno Cadonna wrote: >>>>>>>>>>>>> Hi, >>>>>>>>>>>>> >>>>>>>>>>>>> I would like to start the voting on KIP-663 that proposes to >> add >>>>>>>>> methods >>>>>>>>>>>>> to the Kafka Streams client to add and remove stream threads >>>>>>>>>>>>> during >>>>>>>>>>>>> execution. >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>> >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-663%3A+API+to+Start+and+Shut+Down+Stream+Threads >>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> Best, >>>>>>>>>>>>> Bruno >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> -- Guozhang >>>>>>>> >>>>>> >> >