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

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to