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