Thanks, Leah, This sounds good!
-John On Wed, Sep 2, 2020, at 19:23, Matthias J. Sax wrote: > Thanks for the KIP and the detailed discussion. I guess this all makes > sense. > > -Matthias > > On 9/2/20 1:28 PM, Leah Thomas wrote: > > Hey John, > > > > I see what you say about the console consumer in particular. I don't think > > that adding the extra config would *hurt* at all, so I'm good with keeping > > that in the KIP. I re-updated the KIP proposal to include the configs. > > > > The serde resolution sounds good to me as well, I added a few lines in the > > KIP about logging an error when the *timeWindowedSerde *implicit is called. > > > > Let me know if there are any other concerns, else I'll resume voting. > > > > Cheers, > > Leah > > > > On Tue, Sep 1, 2020 at 11:17 AM John Roesler <vvcep...@apache.org> wrote: > > > >> Hi Leah and Sophie, > >> > >> Sorry for the delayed response. > >> > >> You can pass in pre-instantiated (and therefore arbirarily > >> constructed) deserializers to the KafkaConsumer. However, > >> this doesn't mean we should drop the configs. The same > >> argument for dropping the configs implies that the consumer > >> shouldn't have configs for setting the deserializers at all. > >> This doesn't sound right, and I'm asking myself why. The > >> most likely answer seems to me to be that you sometimes > >> create a Consumer without invoking the Java constructor at > >> all. For example, when you use the console-consumer. In that > >> case, it would be indispensible to be able to fully > >> configure the deserializers via a properties file. > >> > >> Therefore, I think we should go ahead and propose the new > >> config. (Sorry for the flip-flop, Leah) > >> > >> Regarding the implicits, Leah's conclusion sounds good to > >> me. Yuriy is not adding any implicit for this serde to the > >> new class, and we'll just add an ERROR log to the existing > >> implicit. Once KIP-616 is merged, the existing implicit will > >> be deprecated along with all the other implicits in that > >> class, so there will be two "forces" pushing people to the > >> new interface, where they will discover the lack of an > >> implicit, which then forces them to call the non-deprecated > >> constructors directly. > >> > >> To answer Sophie's question, "implicit" is a feature of > >> Scala that allows the type system to automatically resolve > >> method arguments when there is just one possible argument in > >> scope. There's a bunch of docs for it, so I won't waste a > >> ton of e-ink on the details; the docs will be crystal clear > >> just assuming you know all about monads and monoids and > >> type-level programming ;) > >> > >> The punch line for us is that we provide implicits for the > >> basic serdes, and also for turning pairs of > >> serializers/deserializers into serdes, so you can avoid > >> explicitly passing any serdes into Streams DSL operations, > >> but also not have to fall back on the default key/value > >> serde configs. Instead, the type system will plug in the > >> right serde for the K/V types at each operation. > >> > >> We would _not_ add an implicit for a serde that we can't > >> construct in a context-free way using just type information, > >> as in this case. That's why Yuriy dropped the new implicit > >> and why we're going to add an error to the existing > >> implicit. On the other hand, removing the existing implicit > >> will cause compiler errors when the type system is no longer > >> able to find a suitable argument for an implicit parameter, > >> so we don't want to just remove the existing implicit. > >> > >> Thanks, > >> -John > >> > >> On Mon, 2020-08-31 at 16:28 -0500, Leah Thomas wrote: > >>> Hey Sophie, > >>> > >>> Thanks for the catch! It makes sense that the consumer would accept a > >>> deserializer somewhere, so we can definitely skip the additional > >> configs. I > >>> updated the KIP to reflect that. > >>> > >>> John seems to know Scala better than I do as well, but I think we need to > >>> keep the current implicit that allows users to just pass in a serde and > >> no > >>> window size for backwards compatibility. It seems to me that based on the > >>> discussion around KIP-616 <https://github.com/apache/kafka/pull/8955>;, > >> we > >>> can pretty easily do John's third suggestion for handling this implicit: > >>> logging an error message and passing to a non-deprecated constructor > >> using > >>> some default value. It seems from KIP-616 that most scala users will use > >>> the new Serdes class anyways, and Yuriy is just removing these implicits > >> so > >>> it seems like whatever fix we decide for this class won't get used too > >>> heavily. > >>> > >>> Cheers, > >>> Leah > >>> > >>> On Thu, Aug 27, 2020 at 8:49 PM Sophie Blee-Goldman <sop...@confluent.io > >>> > >>> wrote: > >>> > >>>> Ok I'm definitely feeling pretty dumb now, but I was just thinking how > >>>> ridiculous > >>>> it is that the Consumer forces you to configure your Deserializer > >> through > >>>> actual > >>>> config maps instead of just taking the ones you pass in directly. So I > >>>> thought > >>>> "why not just fix the Consumer to allow passing in an actual > >> Deserializer > >>>> object" > >>>> and went to go through the code in case there's some legitimate reason > >> why > >>>> not, > >>>> and what do you know. You actually can pass in an actual Deserializer > >>>> object! > >>>> There is a KafkaConsumer constructor that accepts a key and value > >>>> Deserializer, > >>>> and doesn't instantiate or configure a new one if provided in this way. > >>>> Duh. > >>>> > >>>> Sorry for misleading everyone on that front. I'm just happy to find out > >>>> that a > >>>> reasonable way of configuring deserializer actually *is *possible after > >>>> all. In that > >>>> case, maybe we can remove the extra configs from this KIP and just > >> proceed > >>>> with the deprecation? > >>>> > >>>> Obviously that doesn't help anything with regards to the remaining > >> question > >>>> that > >>>> John/Leah have posed. Now I probably don't have anything valuable to > >> offer > >>>> there > >>>> since I know next to nothing about Scala, but I do want to > >>>> better understand: why > >>>> would we add an "implicit" (what exactly does this mean?) that relies > >> on > >>>> allowing > >>>> users to not set the windowSize, if we are explicitly taking away that > >>>> option from > >>>> the Java users? Or if we have already added something, can't we just > >>>> deprecate > >>>> it like we are deprecating the Java constructor? I may need some > >> remedial > >>>> lessons > >>>> in Scala just to understand the problem that we apparently have, > >> because I > >>>> don't > >>>> get it. > >>>> > >>>> By the way, I'm a little tempted to say that we should go one step > >> further > >>>> and > >>>> deprecate the DEFAULT_WINDOWED_INNER_CLASS configs, but maybe that's > >>>> a bit too radical for the moment. It just seems like default serde > >> configs > >>>> have been > >>>> a lot more trouble than they're worth overall. That said, these > >> particular > >>>> configs > >>>> don't appear to have hurt anyone thus far, at least not that we know of > >>>> (possibly > >>>> because no one is using it anyway) so there's no strong motivation to > >> do so > >>>> > >>>> On Wed, Aug 26, 2020 at 9:19 AM Leah Thomas <ltho...@confluent.io> > >> wrote: > >>>> > >>>>> Hey John, > >>>>> > >>>>> Thanks for pointing this out, I wasn't sure how to handle the Scala > >>>>> changes. > >>>>> > >>>>> I'm not fully versed in the Scala version of Streams, so feel free to > >>>>> correct me if any of my assumptions are wrong. I think logging an > >> error > >>>>> message and then calling the constructor that requires a windowSize > >> seems > >>>>> like the simplest fix from my point of view. So instead of > >>>>> calling`TimeWindowedSerde(final Serde<T> inner)`, we could > >>>>> call `TimeWindowedSerde(final Serde<T> inner, final long windowSize)` > >>>> with > >>>>> Long.MAX_VALUE as the window size. > >>>>> > >>>>> I do feel like we would want to add an implicit to `Serdes.scala` > >> that > >>>>> takes a serde and a window size so that users can access the > >> constructor > >>>>> that initializes with the correct window size. I agree with your > >> comment > >>>> on > >>>>> the KIP-616 PR that the serde needs to be pre-configured when it's > >>>> passed, > >>>>> but I'm not sure we would need a windowSize config. I think if the > >>>>> constructor is passed the serde and the window size, then window size > >>>>> should be set within the deserializer. The only catch is if the Scala > >>>>> version of the consumer creates a new deserializer, and at that point > >>>> we'd > >>>>> need a window size config, but I'm not sure if that's the case. > >>>>> > >>>>> WDYT - is it possible to alter the existing implicit and add a new > >> one? > >>>>> > >>>>> On Wed, Aug 26, 2020 at 10:00 AM John Roesler <vvcep...@apache.org> > >>>> wrote: > >>>>>> Hi Leah, > >>>>>> > >>>>>> I was just reviewing the PR for KIP-616 and realized that we > >>>>>> forgot to mention the Scala API in your KIP. We should > >>>>>> consider it because `scala.Serdes.timeWindowedSerde` is > >>>>>> implicitly using the exact constructor you're deprecating. > >>>>>> > >>>>>> I had some ideas in the code review: > >>>>>> https://github.com/apache/kafka/pull/8955#discussion_r477358755 > >>>>>> > >>>>>> What do you think is the best approach? > >>>>>> > >>>>>> Concretely, I think Yuriy can make the call for KIP-616 (for > >>>>>> the new implicit that he's adding). But I think your KIP-659 > >>>>>> should mention how we modify the existing implicit. > >>>>>> > >>>>>> Typically, we'd try to avoid throwing new exceptions or > >>>>>> causing compile errors, so > >>>>>> * dropping the implicit is probably off the table (compile > >>>>>> error). > >>>>>> * throwing an exception in the deserializer may not be ok, > >>>>>> althought it might still actually be ok since it's adding a > >>>>>> corruption check. > >>>>>> * logging an ERROR message and then passing through to the > >>>>>> underlying deserializer would be more conservative. > >>>>>> > >>>>>> What do you think we should do? > >>>>>> > >>>>>> Thanks, > >>>>>> -John > >>>>>> > >>>>>> On Fri, 2020-08-21 at 16:05 -0500, Leah Thomas wrote: > >>>>>>> Thanks for the typo catch, John. > >>>>>>> > >>>>>>> Let me know if anyone else has thoughts or ideas. > >>>>>>> > >>>>>>> Cheers, > >>>>>>> Leah > >>>>>>> > >>>>>>> On Fri, Aug 21, 2020 at 2:50 PM John Roesler < > >> vvcep...@apache.org> > >>>>>> wrote: > >>>>>>>> Thanks, all, > >>>>>>>> > >>>>>>>> Based on my reading of the conversation, it sounds like I > >>>>>>>> have some legwork to do in KIP-645, but our collective > >>>>>>>> instinct is that Leah's proposal doesn't need to change to > >>>>>>>> account for whatever we might decide to do in KIP-645. > >>>>>>>> > >>>>>>>> I have no further concerns about KIP-645, and I think it's a > >>>>>>>> good proposal. > >>>>>>>> > >>>>>>>> Thanks, > >>>>>>>> -John > >>>>>>>> > >>>>>>>> P.s., there's still a typo on the wiki that says > >>>>>>>> "ConsumerConfig" on the code block, even though the text now > >>>>>>>> says "StreamsConfig". > >>>>>>>> > >>>>>>>> > >>>>>>>> On Fri, 2020-08-21 at 10:56 -0700, Sophie Blee-Goldman > >>>>>>>> wrote: > >>>>>>>>> Just want to make a quick comment on the question that John > >>>> raised > >>>>>> about > >>>>>>>>> whether we > >>>>>>>>> should introduce a separate config for "key" and "value" > >> window > >>>>>> sizes: > >>>>>>>>> My short answer is No, I don't think that's necessary. First > >> of > >>>>> all, > >>>>>> as > >>>>>>>> you > >>>>>>>>> said, there is no > >>>>>>>>> first-class concept of a "Windowed value" in the DSL. > >> Second, to > >>>>>> engage > >>>>>>>> in > >>>>>>>>> your rhetorical > >>>>>>>>> question, if there's no default window size for a Streams > >> program > >>>>>> then > >>>>>>>> how > >>>>>>>>> can there be a > >>>>>>>>> sensible default for the key AND a separate sensible default > >> for > >>>> a > >>>>>> value? > >>>>>>>>> I don't think we need to follow the existing pattern if it > >>>> doesn't > >>>>>> make > >>>>>>>>> sense, and to be honest > >>>>>>>>> I'm a bit skeptical that anyone was even using these default > >>>>> windowed > >>>>>>>> inner > >>>>>>>>> classes since > >>>>>>>>> the config wasn't even defined/documented until quite > >> recently. > >>>> I'd > >>>>>>>>> actually be in favor > >>>>>>>>> of deprecating > >>>>> StreamsConfig.DEFAULT_WINDOWED_VALUE_SERDE_INNER_CLASS > >>>>>>>>> but I don't want to drag that into this discussion as well. > >>>>>>>>> > >>>>>>>>> My understanding is that these were meant to mirror the > >> default > >>>>>> key/value > >>>>>>>>> serde configs, but > >>>>>>>>> the real use of the DEFAULT_WINDOWED_SERDE_INNER_CLASS > >> config is > >>>>>> actually > >>>>>>>>> that you > >>>>>>>>> can at least use it to configure the inner class for a > >> Consumer, > >>>>> thus > >>>>>>>>> making the TimeWindowed > >>>>>>>>> serdes functional at a basic level. With the window size > >> configs, > >>>>> the > >>>>>>>> point > >>>>>>>>> is not really to set a > >>>>>>>>> default but to make it actually work with a Consumer which > >>>>>> instantiates > >>>>>>>> the > >>>>>>>>> deserializer by > >>>>>>>>> reflection. So I don't think we should position this new > >> config > >>>> as > >>>>> a > >>>>>>>>> "default" (although it may > >>>>>>>>> technically behave as one) -- within Streams users can and > >> should > >>>>>> always > >>>>>>>>> supply the window > >>>>>>>>> size through the constructor. I don't think that's such an > >>>>>> inconvenience, > >>>>>>>>> vs the amount of > >>>>>>>>> confusion that will (and has) been caused by default > >>>> serde-related > >>>>>>>> configs > >>>>>>>>> in streams. > >>>>>>>>> > >>>>>>>>> Regarding the fixed vs variable sized config, one idea I had > >> was > >>>> to > >>>>>> just > >>>>>>>>> keep the fixed-size config > >>>>>>>>> and constructor and let users of enumerable windows override > >> the > >>>>>>>>> TimeWindowedSerde class(es) > >>>>>>>>> to do whatever it is they need. IIUC you already have to > >> override > >>>>>> some > >>>>>>>>> other windows-related > >>>>>>>>> classes to get variable-sized windows so doing the same for > >> the > >>>>>> serdes > >>>>>>>>> sounds reasonable to me. > >>>>>>>>> Just my take on the "simple things should be easy, difficult > >>>> things > >>>>>>>> should > >>>>>>>>> be possible" mantra > >>>>>>>>> > >>>>>>>>> One last quick side note: the reason we don't really need to > >>>>> discuss > >>>>>>>>> SessionWindows here > >>>>>>>>> is that they already encode both the start and end time for > >> the > >>>>>> window. > >>>>>>>>> This is probably the best > >>>>>>>>> way to go for TimeWindows as well, but making this change in > >> a > >>>>>> backwards > >>>>>>>>> compatible way is a > >>>>>>>>> much larger scope of work. And even then, we might want to > >>>> consider > >>>>>>>> making > >>>>>>>>> it possible to still > >>>>>>>>> just encode the start time to save space, thus requiring this > >>>>> config > >>>>>>>> either > >>>>>>>>> way > >>>>>>>>> > >>>>>>>>> On Fri, Aug 21, 2020 at 9:26 AM Leah Thomas < > >>>> ltho...@confluent.io> > >>>>>>>> wrote: > >>>>>>>>>> Thanks John and Walker for your thoughts. > >>>>>>>>>> > >>>>>>>>>> I agree with your two scenarios John, that you configure > >> fully > >>>> in > >>>>>> the > >>>>>>>>>> constructor, or you don't need to call `init()`. IIUC, if > >> we > >>>> pass > >>>>>> the > >>>>>>>>>> deserializer to the consumer, we want to make sure it has > >> the > >>>>>> window > >>>>>>>> size > >>>>>>>>>> is set using the newly required constructor. If we don't > >> pass > >>>> in > >>>>>> the > >>>>>>>>>> deserializer, the window size will be set through the > >> configs. > >>>> To > >>>>>>>> answer > >>>>>>>>>> Walker's question directly, because the configs aren't > >> passed > >>>> to > >>>>>> the > >>>>>>>>>> constructor, we can't set the window size unless we pass > >> it to > >>>>> the > >>>>>>>>>> constructor or configure the constructor after > >> initializing it. > >>>>>>>>>> > >>>>>>>>>> For users who would rather not set a strict window size > >>>> (outside > >>>>>> of the > >>>>>>>>>> variable size scenario), they can pass in Long.MAX_VALUE. > >> The > >>>> way > >>>>>> I see > >>>>>>>>>> this is instead of having the default be for scenarios that > >>>> don't > >>>>>>>> require a > >>>>>>>>>> window size, we have the default be the scenarios that > >> *do*, > >>>>>> flipping > >>>>>>>> the > >>>>>>>>>> current implementation to fit with typical use cases. > >>>>>>>>>> > >>>>>>>>>> On your points John: > >>>>>>>>>> 1. I agree that it makes sense to store it in > >> StreamsConfig, > >>>> this > >>>>>>>> shouldn't > >>>>>>>>>> cause any issues. I've updated the KIP accordingly. > >>>>>>>>>> > >>>>>>>>>> 2. The non-fixed time windows issue is a good point. It > >> seems > >>>>> like > >>>>>>>> calendar > >>>>>>>>>> windows in particular are quite useful, so I think we want > >> to > >>>>> make > >>>>>> sure > >>>>>>>>>> that this wouldn't inhibit flexible sized windows. I think > >>>> having > >>>>>> two > >>>>>>>>>> different configs and functions makes sense, although it is > >>>>>> slightly > >>>>>>>>>> messier. While requiring all time windows to use the > >>>>> WindowFunction > >>>>>>>>>> constructor would work, I think that allowing users to > >> access > >>>> the > >>>>>>>>>> WindowSize constructor is preferable because it seems > >> easier to > >>>>>> use for > >>>>>>>>>> people who are not at all interested in delving into > >> variably > >>>>> sized > >>>>>>>>>> windows. This assumption could be wrong though, and perhaps > >>>> users > >>>>>> would > >>>>>>>>>> adapt quickly to the new WindowFunction style, but my > >> immediate > >>>>>>>> reaction is > >>>>>>>>>> to support both configs and constructors. > >>>>>>>>>> > >>>>>>>>>> One note on this is that Session Windows are handled > >> separately > >>>>>> from > >>>>>>>> time > >>>>>>>>>> windows and also have variable window sizes. I assume that > >> the > >>>>>>>> TimeWindowed > >>>>>>>>>> option is preferable for variably sized windows because you > >>>> still > >>>>>> want > >>>>>>>> to > >>>>>>>>>> access the window end times? But I think one alternative > >> could > >>>> be > >>>>>>>>>> separating the variably sized windows from the current > >>>>>> implementation > >>>>>>>> of > >>>>>>>>>> time windows, although I think KIP-645 > >>>>>>>>>> < > >>>>>>>>>> > >>>> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-645%3A+Replace+Windows+with+a+proper+interface > >>>>>>>>>> would make this not strictly necessary. > >>>>>>>>>> > >>>>>>>>>> Cheers, > >>>>>>>>>> Leah > >>>>>>>>>> > >>>>>>>>>> On Fri, Aug 21, 2020 at 10:04 AM John Roesler < > >>>>> vvcep...@apache.org > >>>>>>>> wrote: > >>>>>>>>>>> Hi Leah, > >>>>>>>>>>> > >>>>>>>>>>> Thanks for the KIP! This has been a real pain for some > >> use > >>>>>>>>>>> cases, so it's really good to see a proposal to fix it. > >>>>>>>>>>> > >>>>>>>>>>> We do need a default constructor so that it can be > >>>>>>>>>>> dynamically instantiated by the consumer (or any other > >>>>>>>>>>> component). But I'm +1 on deprecating the constructor > >> you're > >>>>>>>>>>> proposing to deprecate, which only partially configures > >> the > >>>>>>>>>>> class. It seems like there are exactly two patterns: > >> either > >>>>>>>>>>> you fully configure the class in the constructor and > >> don't > >>>>>>>>>>> call `init()`, or you call the default constructor and > >> then > >>>>>>>>>>> configure the class by calling `init()`. > >>>>>>>>>>> > >>>>>>>>>>> I can appreciate Walker's point, but stepping back, it > >>>>>>>>>>> doesn't actually seem that useful to partially configure > >> the > >>>>>>>>>>> class in the constructor and then finish up the > >>>>>>>>>>> configuration by calling `init()`. I could see the > >> argument > >>>>>>>>>>> if there were a sensible default, but for this particular > >>>>>>>>>>> class, there isn't one. Rhetorical question: what is the > >>>>>>>>>>> default window size for Streams programs? > >>>>>>>>>>> > >>>>>>>>>>> I have a couple of concerns to discuss: > >>>>>>>>>>> > >>>>>>>>>>> 1. Config Location > >>>>>>>>>>> > >>>>>>>>>>> I don't think I would add the new configs to > >> ConsumerConfig, > >>>>>>>>>>> but would add it to StreamsConfig instead. The > >> deserailzier > >>>>>>>>>>> itself is in Streams (it is > >>>>>>>>>>> o.a.k.streams.kstream.TimeWindowedDeserializer), so it > >> seems > >>>>>>>>>>> odd to have one of its configurations in a completely > >>>>>>>>>>> different module. > >>>>>>>>>>> > >>>>>>>>>>> Also, this class already has two configs, which are in > >>>>>>>>>>> StreamsConfig: > >>>>>>>>>>> StreamsConfig.DEFAULT_WINDOWED_KEY_SERDE_INNER_CLASS > >>>>>>>>>>> StreamsConfig.DEFAULT_WINDOWED_VALUE_SERDE_INNER_CLASS > >>>>>>>>>>> > >>>>>>>>>>> It seems like the new config belongs right next to the > >>>>>>>>>>> existing ones. > >>>>>>>>>>> > >>>>>>>>>>> For me, it raises a secondary question: > >>>>>>>>>>> 1b: Should there be a KEY_WINDOW_SIZE and a > >>>>>>>>>>> VALUE_WINDOW_SIZE? I'm honestly not sure what a "windowed > >>>>>>>>>>> value" even is, but the fact that we can configure serdes > >>>>>>>>>>> for it implies that perhaps we should symmetrically > >>>>>>>>>>> configure its size as well. > >>>>>>>>>>> > >>>>>>>>>>> 2. Fixed Size Assumption > >>>>>>>>>>> > >>>>>>>>>>> In KIP-645, I'm proposing to lift the assumption that > >>>>>>>>>>> TimeWindows have a fixed size at all, but KIP-659 is > >>>>>>>>>>> currently built on that assumption. > >>>>>>>>>>> > >>>>>>>>>>> For details on why this is not a good assumtion, see: > >>>>>>>>>>> https://issues.apache.org/jira/browse/KAFKA-10408 > >>>>>>>>>>> > >>>>>>>>>>> In fact, in my POC PR for KIP-659, I'm dropping the > >>>>>>>>>>> constructor that takes a "window size" parameter in > >> favor of > >>>>>>>>>>> one that takes a window function, mapping a window start > >>>>>>>>>>> time to a full Window(start, end). > >>>>>>>>>>> > >>>>>>>>>>> In that context, it seems incongruous to introduce a > >>>>>>>>>>> configuration that specifies a window size. Of course, my > >>>>>>>>>>> KIP is also under discussion, so my proposal may not > >>>>>>>>>>> eventually be accepted. But it is necessary to consider > >> both > >>>>>>>>>>> of these concerns together. > >>>>>>>>>>> > >>>>>>>>>>> One option seems to be to accept both. Namely, we keep > >> the > >>>>>>>>>>> "fixed size" constructor AND add my new constructor (for > >>>>>>>>>>> variably sized windows). Likewise, we accept your > >> proposal, > >>>>>>>>>>> and KIP-659 would propose to add a new config specifying > >> a > >>>>>>>>>>> windowing function, such as: > >>>>>>>>>>> > >>>>>>>>>>>> StreamsConfig.WINDOW_FUNCTION_CONFIG > >>>>>>>>>>> > >>>>>>>>>>> which would be an instance of: > >>>>>>>>>>> > >>>>>>>>>>>> public interface WindowFunction implements > >> Function<Long, > >>>>>>>>>>> Window>; > >>>>>>>>>>> > >>>>>>>>>>> I'm not bringing these up for discussion in your KIP > >> right > >>>>>>>>>>> now, just demonstrating the feasibility of merging both > >>>>>>>>>>> proposals. > >>>>>>>>>>> > >>>>>>>>>>> My question for you: do you think the general strategy of > >>>>>>>>>>> having two constructors and two configs, one for fixed > >> and > >>>>>>>>>>> one for variable windows, makes sense? Is it too > >>>>>>>>>>> complicated? Do you have a better idea? > >>>>>>>>>>> > >>>>>>>>>>> Thanks! > >>>>>>>>>>> -John > >>>>>>>>>>> > >>>>>>>>>>> On Thu, 2020-08-20 at 14:49 -0700, Walker Carlson wrote: > >>>>>>>>>>>> Hi Leah, > >>>>>>>>>>>> > >>>>>>>>>>>> Could you explain a bit more why we do not wish to > >>>>>>>>>>>> let TimeWindowedDeserializer and WindowedSerdes be > >> created > >>>>>> without > >>>>>>>> a > >>>>>>>>>>>> specified time as a parameter? > >>>>>>>>>>>> > >>>>>>>>>>>> I understand the long.MAX_VALUE could cause problems > >> but > >>>>> would > >>>>>> it > >>>>>>>> not > >>>>>>>>>> be > >>>>>>>>>>> a > >>>>>>>>>>>> good idea to have a usable default or fetch from the > >> config > >>>>> if > >>>>>>>>>> available? > >>>>>>>>>>>> After all you are proposing to add "window.size.ms" > >>>>>>>>>>>> > >>>>>>>>>>>> We definitely need a fix to this problem and adding " > >>>>>>>> window.size.ms" > >>>>>>>>>>> makes > >>>>>>>>>>>> sense to me. > >>>>>>>>>>>> > >>>>>>>>>>>> Thanks for the KIP, > >>>>>>>>>>>> Walker > >>>>>>>>>>>> > >>>>>>>>>>>> On Thu, Aug 20, 2020 at 2:22 PM Leah Thomas < > >>>>>> ltho...@confluent.io> > >>>>>>>>>>> wrote: > >>>>>>>>>>>>> Hi all, > >>>>>>>>>>>>> > >>>>>>>>>>>>> I'd like to start a discussion for KIP-659: > >>>>>>>>>>>>> > >>>>>>>>>>>>> > >>>> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-659%3A+Improve+TimeWindowedDeserializer+and+TimeWindowedSerde+to+handle+window+size > >>>>>>>>>>>>> The goal of the KIP is to ensure that window size is > >>>> passed > >>>>>> to > >>>>>>>> the > >>>>>>>>>>> consumer > >>>>>>>>>>>>> when needed, which will generally be for testing > >>>> purposes, > >>>>>> and to > >>>>>>>>>> avoid > >>>>>>>>>>>>> runtime errors when the *TimeWindowedSerde* is > >> created > >>>>>> without a > >>>>>>>>>> window > >>>>>>>>>>>>> size. > >>>>>>>>>>>>> > >>>>>>>>>>>>> Looking forward to hearing your feedback. > >>>>>>>>>>>>> > >>>>>>>>>>>>> Cheers, > >>>>>>>>>>>>> Leah > >>>>>>>>>>>>> > >> > >> > > > > > Attachments: > * signature.asc