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

Reply via email to