> It seems like it must be a ReadOnlyKeyValueStore. Does that sound right?

Yes, it is. Would it be better to add a detailed description of how this
feature effects interactive query, with examples?

Best,
Dongjin

On Tue, Sep 29, 2020 at 10:31 AM John Roesler <vvcep...@apache.org> wrote:

> Hi Dongjin,
>
> Thanks! Sorry, I missed your prior message. The proposed API looks good to
> me.
>
> I’m wondering if we should specify what kind of store view would be
> returned when querying the operation result. It seems like it must be a
> ReadOnlyKeyValueStore. Does that sound right?
>
> Thanks!
> John
>
> On Mon, Sep 28, 2020, at 10:06, Dongjin Lee wrote:
> > Hi John,
> >
> > I updated the KIP with the discussion above. The 'Public Interfaces'
> > section describes the new API, and the 'Rejected Alternatives' section
> > describes the reasoning about why we selected this API design and
> rejected
> > the other alternatives.
> >
> > Please have a look when you are free. And please note that the KIP freeze
> > for 2.7.0 is imminent.
> >
> > Thanks,
> > Dongjin
> >
> > On Mon, Sep 21, 2020 at 11:35 PM Dongjin Lee <dong...@apache.org> wrote:
> >
> > > Hi John,
> > >
> > > I updated the PR applying the API changes we discussed above. I am now
> > > updating the KIP document.
> > >
> > > Thanks,
> > > Dongjin
> > >
> > > On Sat, Sep 19, 2020 at 10:42 AM John Roesler <vvcep...@apache.org>
> wrote:
> > >
> > >> Hi Dongjin,
> > >>
> > >> Yes, that’s right. My the time of KIP-307, we had no choice but to
> add a
> > >> second name. But we do have a choice with Suppress.
> > >>
> > >> Thanks!
> > >> -John
> > >>
> > >> On Thu, Sep 17, 2020, at 13:14, Dongjin Lee wrote:
> > >> > Hi John,
> > >> >
> > >> > I just reviewed KIP-307. As far as I understood, ...
> > >> >
> > >> > 1. There was Materialized name initially.
> > >> > 2. With KIP-307, Named Operations were added.
> > >> > 3. Now we have two options for materializing suppression. If we take
> > >> > Materialized name here, we have two names for the same operation,
> which
> > >> is
> > >> > not feasible.
> > >> >
> > >> > Do I understand correctly?
> > >> >
> > >> > > Do you have a use case in mind for having two separate names for
> the
> > >> > operation and the view?
> > >> >
> > >> > No. I am now entirely convinced with your suggestion.
> > >> >
> > >> > I just started to update the draft implementation. If I understand
> > >> > correctly, please notify me; I will update the KIP by adding the
> > >> discussion
> > >> > above.
> > >> >
> > >> > Best,
> > >> > Dongjin
> > >> >
> > >> > On Thu, Sep 17, 2020 at 11:06 AM John Roesler <vvcep...@apache.org>
> > >> wrote:
> > >> >
> > >> > > Hi Dongjin,
> > >> > >
> > >> > > Thanks for the reply. Yes, that’s correct, we added that method to
> > >> name
> > >> > > the operation. But the operation seems synonymous with the view
> > >> produced
> > >> > > the operation, right?
> > >> > >
> > >> > > During KIP-307, I remember thinking that it’s unfortunate the we
> had
> > >> to
> > >> > > have two different “name” concepts for the same thing just because
> > >> setting
> > >> > > the name on Materialized is equivalent both to making it
> queriable and
> > >> > > actually materializing it.
> > >> > >
> > >> > > If we were to reconsider the API, it would be nice to treat these
> > >> three as
> > >> > > orthogonal:
> > >> > > * specify a name
> > >> > > * flag to make the view queriable
> > >> > > * flag to materialize the view
> > >> > >
> > >> > > That was the context behind my suggestion. Do you have a use case
> in
> > >> mind
> > >> > > for having two separate names for the operation and the view?
> > >> > >
> > >> > > Thanks,
> > >> > > John
> > >> > >
> > >> > > On Wed, Sep 16, 2020, at 11:43, Dongjin Lee wrote:
> > >> > > > Hi John,
> > >> > > >
> > >> > > > It seems like the available alternatives in this point is clear:
> > >> > > >
> > >> > > > 1. Pass queriable name as a separate parameter (i.e.,
> > >> > > > `KTable#suppress(Suppressed, String)`)
> > >> > > > 2. Make use of the Suppression processor name as a queryable
> name by
> > >> > > adding
> > >> > > > `enableQuery` optional flag to `Suppressed`.
> > >> > > >
> > >> > > > However, I doubt the second approach a little bit; As far as I
> > >> know, the
> > >> > > > processor name is introduced in KIP-307[^1] to make debugging
> > >> topology
> > >> > > easy
> > >> > > > and understandable. Since the processor name is an independent
> > >> concept
> > >> > > with
> > >> > > > the materialization, I feel the first approach is more natural
> and
> > >> > > > consistent. Is there any specific reason that you prefer the
> second
> > >> > > > approach?
> > >> > > >
> > >> > > > Thanks,
> > >> > > > Dongjin
> > >> > > >
> > >> > > > [^1]:
> > >> > > >
> > >> > >
> > >>
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-307%3A+Allow+to+define+custom+processor+names+with+KStreams+DSL
> > >> > > >
> > >> > > >
> > >> > > >
> > >> > > > On Wed, Sep 16, 2020 at 11:48 PM John Roesler <
> vvcep...@apache.org>
> > >> > > wrote:
> > >> > > >
> > >> > > > > Hi Dongjin,
> > >> > > > >
> > >> > > > > Yes, that's where I was leaning. Although, I'd prefer adding
> > >> > > > > the option to Suppressed instead of adding a new argument to
> > >> > > > > the method call.
> > >> > > > >
> > >> > > > > What do you think about:
> > >> > > > >
> > >> > > > > class Suppressed<K> {
> > >> > > > > +  public Suppressed<K> enableQuery();
> > >> > > > > }
> > >> > > > >
> > >> > > > > Since Suppressed already has `withName(String)`, it seems
> > >> > > > > like all we need to add is a boolean flag.
> > >> > > > >
> > >> > > > > Does that seem sensible to you?
> > >> > > > >
> > >> > > > > Thanks,
> > >> > > > > -John
> > >> > > > >
> > >> > > > > On Wed, 2020-09-16 at 21:50 +0900, Dongjin Lee wrote:
> > >> > > > > > Hi John,
> > >> > > > > >
> > >> > > > > > > Although it's not great to have "special snowflakes" in
> the
> > >> API,
> > >> > > > > Choice B
> > >> > > > > > does seem safer in the short term. We would basically be
> > >> proposing a
> > >> > > > > > temporary API to make the suppressed view queriable without
> a
> > >> > > > > Materialized
> > >> > > > > > argument.
> > >> > > > > >
> > >> > > > > > Then, it seems like you prefer `KTable#suppress(Suppressed,
> > >> String)`
> > >> > > > > (i.e.,
> > >> > > > > > queriable name only as a parameter) for this time, and
> refine
> > >> API
> > >> > > with
> > >> > > > > the
> > >> > > > > > other related KIPs later.
> > >> > > > > >
> > >> > > > > > Do I understand correctly?
> > >> > > > > >
> > >> > > > > > Thanks,
> > >> > > > > > Dongjin
> > >> > > > > >
> > >> > > > > > On Wed, Sep 16, 2020 at 2:17 AM John Roesler <
> > >> vvcep...@apache.org>
> > >> > > > > wrote:
> > >> > > > > >
> > >> > > > > > > Hi Dongjin,
> > >> > > > > > >
> > >> > > > > > > Thanks for presenting these options. The concern that
> > >> > > > > > > Matthias brought up is a very deep problem that afflicts
> all
> > >> > > > > > > operations downstream of windowing operations. It's the
> same
> > >> > > > > > > thing that derailed KIP-300. For the larger context, I
> have
> > >> > > > > > > developed a couple of approaches to resolve this
> situation,
> > >> > > > > > > but I think it makes sense to finish up KIP-478 before
> > >> > > > > > > presenting them.
> > >> > > > > > >
> > >> > > > > > > However, I don't think that we need in particular to block
> > >> > > > > > > the current proposal on solving that long-running and deep
> > >> > > > > > > issue with the DSL. Instead, we should make a top-level
> > >> > > > > > > decision whether to:
> > >> > > > > > >
> > >> > > > > > > A: Make Suppress just like all the other KTable
> operations.
> > >> > > > > > > It will have the same pathological behavior that the
> keyset
> > >> > > > > > > is unbounded while the store implementation is only a
> > >> > > > > > > KeyValueStore. Again, this exact pathology currently
> affects
> > >> > > > > > > all KTable operations that follow from windowing
> operations.
> > >> > > > > > > For example, it applies to the current workaround that
> > >> > > > > > > Dongjin documented in the KIP:
> > >> > > > > > > suppress().filter(Materialized<KeyValueStore>). This is
> > >> > > > > > > Option 2 that Dongjin presented.
> > >> > > > > > >
> > >> > > > > > > B: Do something different with Suppress in order to side-
> > >> > > > > > > step the problem. For example, Suppress does not _need_ to
> > >> > > > > > > have a separate state store at all. If we just give
> people a
> > >> > > > > > > switch to make the operation queriable, we can implement a
> > >> > > > > > > ReadOnlyKeyValueStore interface by querying the
> "priorValue"
> > >> > > > > > > of the buffer first and then querying the upstream
> > >> > > > > > > ValueGetter. This broad category of "do something
> different
> > >> > > > > > > with Suppress" encompases Option 1 and Option 3 that
> Dongjin
> > >> > > > > > > presented.
> > >> > > > > > >
> > >> > > > > > >
> > >> > > > > > > Speaking personally, I think Choice A would be the most
> > >> > > > > > > obvious and least weird choice, but it presents a serious
> > >> > > > > > > risk of escalating the severity of the problem of
> unbounded
> > >> > > > > > > state. This is currently a risk that we're aware of, but
> has
> > >> > > > > > > not yet become a big problem in practice. As Matthias
> > >> > > > > > > pointed out, Suppress is far more likely to be used
> > >> > > > > > > downstream of windowed tables than other operations, so
> > >> > > > > > > having a Materialized<KVStore> overload has the
> significant
> > >> > > > > > > risk of getting people into a bad state. Note, broadly
> > >> > > > > > > advertising the workaround from the KIP would have the
> exact
> > >> > > > > > > same impact, so we should be careful about recommending
> it.
> > >> > > > > > >
> > >> > > > > > > Although it's not great to have "special snowflakes" in
> the
> > >> > > > > > > API, Choice B does seem safer in the short term. We would
> > >> > > > > > > basically be proposing a temporary API to make the
> > >> > > > > > > suppressed view queriable without a Materialized argument.
> > >> > > > > > > Then, once we fix the main KIP-300 problem, we would look
> at
> > >> > > > > > > converging Suppress with the rest of the KTable
> > >> > > > > > > materialization APIs.
> > >> > > > > > >
> > >> > > > > > > WDYT?
> > >> > > > > > > Thanks,
> > >> > > > > > > -John
> > >> > > > > > >
> > >> > > > > > >
> > >> > > > > > > On Wed, 2020-09-16 at 00:01 +0900, Dongjin Lee wrote:
> > >> > > > > > > > Hi Matthias,
> > >> > > > > > > >
> > >> > > > > > > > Thank you very much for the detailed feedback. Here are
> my
> > >> > > opinions:
> > >> > > > > > > >
> > >> > > > > > > > > Because there is no final result for non-windowed
> > >> KTables, it
> > >> > > seems
> > >> > > > > > > that
> > >> > > > > > > > this new feature only make sense for the
> > >> windowed-aggregation
> > >> > > case?
> > >> > > > > > > >
> > >> > > > > > > > I think a little bit different. Of course, for windowed
> > >> KTable,
> > >> > > this
> > >> > > > > > > > feature provides the final state; for non-windowed
> KTables,
> > >> it
> > >> > > > > provides a
> > >> > > > > > > > view to the records received more than the predefined
> > >> waiting
> > >> > > time
> > >> > > > > ago -
> > >> > > > > > > > excluding the records that are waiting for more events.
> > >> > > > > > > >
> > >> > > > > > > > > Thus, the signature of `Materialized` should take a
> > >> > > `WindowStore`
> > >> > > > > > > instead
> > >> > > > > > > > of a `KeyValueStore`?
> > >> > > > > > > >
> > >> > > > > > > > I reviewed the implementation following your comments
> and
> > >> found
> > >> > > the
> > >> > > > > > > > following:
> > >> > > > > > > >
> > >> > > > > > > > 1. `Materialized` instance includes the following:
> KeySerde,
> > >> > > > > ValueSerde,
> > >> > > > > > > > StoreSupplier, and Queriable Name.
> > >> > > > > > > > 2. The other `Materialized` method variants in `KTable`
> are
> > >> > > making
> > >> > > > > use of
> > >> > > > > > > > KeySerde, ValueSerde, and Queriable Name only. (That is,
> > >> > > > > StoreSupplier is
> > >> > > > > > > > ignored.)
> > >> > > > > > > > 3. `KTable#suppress(Suppressed, Materialized)` uses the
> > >> Queriable
> > >> > > > > Name
> > >> > > > > > > > only. StoreSupplier is also ignored.
> > >> > > > > > > >
> > >> > > > > > > > So, we have three choices for the method signature:
> > >> > > > > > > >
> > >> > > > > > > > 1. `KTable#suppress(Suppressed, String)` (i.e., passing
> the
> > >> > > Queriable
> > >> > > > > > > Name
> > >> > > > > > > > only):
> > >> > > > > > > >
> > >> > > > > > > >   This is the simplest; however, it is inconsistent
> with the
> > >> > > other
> > >> > > > > > > > Materialized variant methods.
> > >> > > > > > > >
> > >> > > > > > > > 2. `KTable#suppress(Suppressed, Materialized<K, V,
> > >> > > KeyValueStore>)`
> > >> > > > > > > (i.e.,
> > >> > > > > > > > current proposal)
> > >> > > > > > > >
> > >> > > > > > > >   This approach is harmless at this point, for
> > >> StoreSupplier is
> > >> > > > > ignored;
> > >> > > > > > > > However, since suppression can be used to both of
> > >> > > `KeyValueStore` and
> > >> > > > > > > > `WindowStore`, this approach is not only weird but also
> > >> leaving
> > >> > > some
> > >> > > > > > > > potential risk to the future. (On second thoughts, I
> agree,
> > >> this
> > >> > > API
> > >> > > > > > > design
> > >> > > > > > > > is bad and dangerous.)
> > >> > > > > > > >
> > >> > > > > > > > 3. `KTable#suppress(Suppressed, Materialized<K, V,
> > >> StateStore>)`
> > >> > > > > > > >
> > >> > > > > > > >   This approach embraces both of `KeyValueStore` and
> > >> > > `WindowStore`
> > >> > > > > cases.
> > >> > > > > > > > Since the concrete class type of `Suppressed` instance
> > >> differs
> > >> > > for
> > >> > > > > the
> > >> > > > > > > > `StateStore`[^1], it seems like we can validate the
> > >> arguments on
> > >> > > the
> > >> > > > > > > method
> > >> > > > > > > > call. (e.g., throw `IllegalArgumentException` if when
> > >> > > `Suppressed`
> > >> > > > > > > instance
> > >> > > > > > > > on `KeyValueStore` is given with `Materialized`
> instance of
> > >> > > > > > > `WindowStore`.)
> > >> > > > > > > > This approach not only breaks the API consistency but
> also
> > >> guards
> > >> > > > > from a
> > >> > > > > > > > miss-usage of the API.
> > >> > > > > > > >
> > >> > > > > > > > How do you think? I am now making a try on the third
> > >> approach.
> > >> > > > > > > >
> > >> > > > > > > > Thanks,
> > >> > > > > > > > Dongjin
> > >> > > > > > > >
> > >> > > > > > > > [^1]: `SuppressedInternal` for `KeyValueStore` and
> > >> > > > > > > > `FinalResultsSuppressionBuilder` for `WindowStore`.
> > >> > > > > > > >
> > >> > > > > > > > On Sat, Sep 12, 2020 at 3:29 AM Matthias J. Sax <
> > >> > > mj...@apache.org>
> > >> > > > > > > wrote:
> > >> > > > > > > > > Thanks for updating the KIP.
> > >> > > > > > > > >
> > >> > > > > > > > > I think there is still one open question. `suppress()`
> > >> can be
> > >> > > used
> > >> > > > > on
> > >> > > > > > > > > non-windowed KTable for rate control, as well as on a
> > >> > > > > windowed-KTable
> > >> > > > > > > > > (also for rate control, but actually mainly) for only
> > >> emitting
> > >> > > the
> > >> > > > > > > final
> > >> > > > > > > > > result of a windowed aggregation. For the non-windowed
> > >> case, we
> > >> > > > > use a
> > >> > > > > > > > > KeyValueStore while for the windowed cases, we use a
> > >> > > WindowStore.
> > >> > > > > > > > >
> > >> > > > > > > > > Because there is no final result for non-windowed
> > >> KTables, it
> > >> > > seems
> > >> > > > > > > that
> > >> > > > > > > > > this new feature only make sense for the
> > >> windowed-aggregation
> > >> > > case?
> > >> > > > > > > > > Thus, the signature of `Materialized` should take a
> > >> > > `WindowStore`
> > >> > > > > > > > > instead of a `KeyValueStore`?
> > >> > > > > > > > >
> > >> > > > > > > > > If that's correct, I am wondering:
> > >> > > > > > > > >
> > >> > > > > > > > >  - Can we guard from a miss-usage of the API if the
> > >> upstream
> > >> > > > > KTable is
> > >> > > > > > > > > not windowed (or maybe it's not necessary to guard)?
> > >> > > > > > > > >  - Can we actually implement it? We had issues with
> > >> regard to
> > >> > > > > KIP-300
> > >> > > > > > > to
> > >> > > > > > > > > materialize windowed-KTables?
> > >> > > > > > > > >
> > >> > > > > > > > > Would be worth to clarify upfront. Maybe, we even
> need a
> > >> POC
> > >> > > > > > > > > implementation to verify that it works?
> > >> > > > > > > > >
> > >> > > > > > > > >
> > >> > > > > > > > > -Matthias
> > >> > > > > > > > >
> > >> > > > > > > > >
> > >> > > > > > > > > On 9/11/20 12:26 AM, Dongjin Lee wrote:
> > >> > > > > > > > > > Hi All,
> > >> > > > > > > > > >
> > >> > > > > > > > > > Here is the voting thread:
> > >> > > > > > > > > >
> > >> > > > > > >
> > >> > > > >
> > >> > >
> > >>
> https://lists.apache.org/thread.html/r5653bf2dafbb27b247bf20dbe6f070c151b3823d96c9c9ca94183e20%40%3Cdev.kafka.apache.org%3E
> > >> > > > > > > > > > Thanks,
> > >> > > > > > > > > > Dongjin
> > >> > > > > > > > > >
> > >> > > > > > > > > > On Fri, Sep 11, 2020 at 4:23 PM Dongjin Lee <
> > >> > > dong...@apache.org>
> > >> > > > > > > wrote:
> > >> > > > > > > > > > > Hi John,
> > >> > > > > > > > > > >
> > >> > > > > > > > > > > Thanks for the feedback. I will open the Vote
> thread
> > >> now.
> > >> > > > > > > > > > >
> > >> > > > > > > > > > > Best,
> > >> > > > > > > > > > > Dongjin
> > >> > > > > > > > > > >
> > >> > > > > > > > > > > On Fri, Sep 11, 2020 at 2:00 AM John Roesler <
> > >> > > > > vvcep...@apache.org>
> > >> > > > > > > > > wrote:
> > >> > > > > > > > > > > > Hi Dongjin,
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > > > Sorry for the delay. I'm glad you're still
> pushing
> > >> this
> > >> > > > > > > > > > > > forward. It would be nice to get this in to the
> 2.7
> > >> > > release.
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > > > I just took another look at the KIP, and it
> looks
> > >> good to
> > >> > > > > > > > > > > > me!
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > > > I think this is ready for a vote.
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > > > Thanks,
> > >> > > > > > > > > > > > -John
> > >> > > > > > > > > > > >
> > >> > > > > > > > > > > > On Wed, 2020-08-05 at 22:04 +0900, Dongjin Lee
> > >> wrote:
> > >> > > > > > > > > > > > > Hi All,
> > >> > > > > > > > > > > > >
> > >> > > > > > > > > > > > > I updated the KIP
> > >> > > > > > > > > > > > > <
> > >> > > > > > >
> > >> > > > >
> > >> > >
> > >>
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-508%3A+Make+Suppression+State+Queriable
> > >> > > > > > > > > > > > > and the implementation, following the
> discussion
> > >> here.
> > >> > > > > > > > > > > > >
> > >> > > > > > > > > > > > > You must be working hard preparing the
> release of
> > >> > > 2.6.0, so
> > >> > > > > > > please
> > >> > > > > > > > > have
> > >> > > > > > > > > > > > a
> > >> > > > > > > > > > > > > look after your work is done.
> > >> > > > > > > > > > > > >
> > >> > > > > > > > > > > > > Thanks,
> > >> > > > > > > > > > > > > Dongjin
> > >> > > > > > > > > > > > >
> > >> > > > > > > > > > > > > On Sun, Mar 8, 2020 at 12:20 PM John Roesler <
> > >> > > > > > > vvcep...@apache.org>
> > >> > > > > > > > > > > > wrote:
> > >> > > > > > > > > > > > > > Thanks Matthias,
> > >> > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > Good idea. I've changed the ticket name and
> > >> added a
> > >> > > note
> > >> > > > > > > > > > > > > > clarifying that this ticket is not the same
> as
> > >> > > > > > > > > > > > > >
> > >> https://issues.apache.org/jira/browse/KAFKA-7224
> > >> > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > Incidentally, I learned that I never
> documented
> > >> my
> > >> > > > > reasons
> > >> > > > > > > > > > > > > > for abandoning my work on KAFKA-7224 ! I've
> now
> > >> > > updated
> > >> > > > > > > > > > > > > > that ticket, too, so your question had an
> > >> unexpected
> > >> > > > > > > side-benefit.
> > >> > > > > > > > > > > > > > Thanks,
> > >> > > > > > > > > > > > > > -John
> > >> > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > On Sat, Mar 7, 2020, at 18:01, Matthias J.
> Sax
> > >> wrote:
> > >> > > > > > > > > > Thanks for clarification.
> > >> > > > > > > > > >
> > >> > > > > > > > > > Can you maybe update the Jira ticket? Do we have a
> > >> ticket for
> > >> > > > > > > > > > spill-to-disk? Maybe link to it and explain that
> it's
> > >> two
> > >> > > > > different
> > >> > > > > > > > > > things? Maybe even rename the ticket to something
> more
> > >> > > clear, ie,
> > >> > > > > > > > > > "make suppress result queryable" or simliar?
> > >> > > > > > > > > >
> > >> > > > > > > > > >
> > >> > > > > > > > > > -Matthias
> > >> > > > > > > > > >
> > >> > > > > > > > > > On 3/7/20 1:58 PM, John Roesler wrote:
> > >> > > > > > > > > > > > > > > > > Hey Matthias,
> > >> > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > I’m sorry if the ticket was poorly
> > >> stated. The
> > >> > > > > ticket
> > >> > > > > > > is to add a
> > >> > > > > > > > > > DSL overload to pass a Materialized argument to
> > >> suppress. As
> > >> > > a
> > >> > > > > > > > > > > > > result,
> > >> > > > > > > > > > the result of the suppression would be queriable.
> > >> > > > > > > > > > > > > > > > > This is unrelated to “persistent
> buffer”
> > >> aka
> > >> > > > > > > “spill-to-disk”.
> > >> > > > > > > > > > > > > > > > > There was some confusion before about
> > >> whether
> > >> > > this
> > >> > > > > > > ticket could be
> > >> > > > > > > > > > implemented as “query the buffer”. Maybe it can,
> but not
> > >> > > > > trivially.
> > >> > > > > > > > > > The obvious way is just to add a new state store
> which
> > >> we
> > >> > > write
> > >> > > > > the
> > >> > > > > > > > > > results into just before we forward. I.e., it’s
> exactly
> > >> like
> > >> > > the
> > >> > > > > > > > > > materialized variant of any stateless KTable
> operation.
> > >> > > > > > > > > > > > > > > > > Thanks, John
> > >> > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > On Sat, Mar 7, 2020, at 15:32,
> Matthias
> > >> J. Sax
> > >> > > > > wrote:
> > >> > > > > > > Thanks for
> > >> > > > > > > > > > > > > > > > > the KIP Dongjin,
> > >> > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > I am still not sure if I can follow,
> what
> > >> might
> > >> > > > > also
> > >> > > > > > > be caused by
> > >> > > > > > > > > > > > > > > > > the backing JIRA ticket (maybe John
> can
> > >> > > clarify the
> > >> > > > > > > intent of the
> > >> > > > > > > > > > > > > > > > > ticket as he created it):
> > >> > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > Currently, suppress() only uses an
> > >> in-memory
> > >> > > buffer
> > >> > > > > > > and my
> > >> > > > > > > > > > > > > > > > > understanding of the Jira is, to add
> the
> > >> > > ability to
> > >> > > > > > > use a
> > >> > > > > > > > > > > > > > > > > persistent buffer (ie, spill to disk
> > >> backed by
> > >> > > > > > > RocksDB).
> > >> > > > > > > > > > > > > > > > > Adding a persistent buffer is
> completely
> > >> > > unrelated
> > >> > > > > to
> > >> > > > > > > allow
> > >> > > > > > > > > > > > > > > > > querying the buffer. In fact, one
> could
> > >> query
> > >> > > an
> > >> > > > > > > in-memory buffer,
> > >> > > > > > > > > > > > > > > > > too. However, querying the buffer
> does not
> > >> > > really
> > >> > > > > seem
> > >> > > > > > > to be
> > >> > > > > > > > > > > > > useful
> > >> > > > > > > > > > > > > > > > > as pointed out by John, as you can
> always
> > >> > > query the
> > >> > > > > > > upstream
> > >> > > > > > > > > > > > > KTable
> > >> > > > > > > > > > > > > > > > > store.
> > >> > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > Also note that for the
> > >> emit-on-window-close
> > >> > > case
> > >> > > > > the
> > >> > > > > > > result is
> > >> > > > > > > > > > > > > > > > > deleted from the buffer when it is
> > >> emitted, and
> > >> > > > > thus
> > >> > > > > > > cannot be
> > >> > > > > > > > > > > > > > > > > queried any longe r.
> > >> > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > Can you please clarify if you intend
> to
> > >> allow
> > >> > > > > spilling
> > >> > > > > > > to disk or
> > >> > > > > > > > > > > > > > > > > if you intent to enable IQ (even if I
> > >> don't
> > >> > > see why
> > >> > > > > > > querying make
> > >> > > > > > > > > > > > > > > > > sense, as the data is either upstream
> or
> > >> > > deleted).
> > >> > > > > > > Also, if you
> > >> > > > > > > > > > > > > > > > > want to enable IQ, why do we need all
> > >> those new
> > >> > > > > > > interfaces? The
> > >> > > > > > > > > > > > > > > > > result of a suppress() is a KTable
> that
> > >> is the
> > >> > > > > same as
> > >> > > > > > > any other
> > >> > > > > > > > > > > > > > > > > key-value/windowed/sessions store?
> > >> > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > We should also have corresponding Jira
> > >> tickets
> > >> > > for
> > >> > > > > > > different cases
> > >> > > > > > > > > > > > > > > > > to avoid the confusion I am in atm :)
> > >> > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > -Matthias
> > >> > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > On 2/27/20 8:21 AM, John Roesler
> wrote:
> > >> > > > > > > > > > > > > > > > > > > > Hi Dongjin,
> > >> > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > No problem; glad we got it
> sorted
> > >> out.
> > >> > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > Thanks again for picking this
> up!
> > >> -John
> > >> > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > On Wed, Feb 26, 2020, at 09:24,
> > >> Dongjin
> > >> > > Lee
> > >> > > > > > > wrote:
> > >> > > > > > > > > > > > > > > > > > > > > > I was under the impression
> that
> > >> you
> > >> > > > > wanted
> > >> > > > > > > to expand the
> > >> > > > > > > > > > > > > > > > > > > > > > scope of the KIP
> > >> > > > > > > > > > > > > > > > > > > > > to additionally allow
> querying the
> > >> > > internal
> > >> > > > > > > buffer, not
> > >> > > > > > > > > > > > > > > > > > > > > just the result. Can you
> clarify
> > >> > > whether
> > >> > > > > you
> > >> > > > > > > are proposing
> > >> > > > > > > > > > > > > > > > > > > > > to allow querying the state
> of the
> > >> > > internal
> > >> > > > > > > buffer, the
> > >> > > > > > > > > > > > > > > > > > > > > result, or both?
> > >> > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > Sorry for the confusion. As we
> > >> already
> > >> > > > > talked
> > >> > > > > > > with, we
> > >> > > > > > > > > > > > > only
> > >> > > > > > > > > > > > > > > > > > > > > need to query the suppressed
> > >> output,
> > >> > > not
> > >> > > > > the
> > >> > > > > > > internal
> > >> > > > > > > > > > > > > > > > > > > > > buffer. The current
> > >> implementation is
> > >> > > > > wrong.
> > >> > > > > > > After
> > >> > > > > > > > > > > > > refining
> > >> > > > > > > > > > > > > > > > > > > > > the KIP and implementation
> > >> accordingly
> > >> > > I
> > >> > > > > will
> > >> > > > > > > notify you -
> > >> > > > > > > > > > > > > > > > > > > > > I must be confused, also.
> > >> > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > Thanks, Dongjin
> > >> > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > On Tue, Feb 25, 2020 at 12:17
> AM
> > >> John
> > >> > > > > Roesler
> > >> > > > > > > > > > > > > > > > > > > > > <vvcep...@apache.org> wrote:
> > >> > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > Hi Dongjin,
> > >> > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > Ah, I think I may have been
> > >> > > confused. I
> > >> > > > > 100%
> > >> > > > > > > agree that
> > >> > > > > > > > > > > > > > > > > > > > > > we need a materialized
> variant
> > >> for
> > >> > > > > > > suppress(). Then, you
> > >> > > > > > > > > > > > > > > > > > > > > > could do: ...suppress(...,
> > >> > > > > > > > > > > > > > > > > > > > > >
> Materialized.as(“final-count”))
> > >> > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > If that’s your proposal,
> then
> > >> we are
> > >> > > on
> > >> > > > > the
> > >> > > > > > > same page.
> > >> > > > > > > > > > > > > > > > > > > > > > I was under the impression
> that
> > >> you
> > >> > > > > wanted
> > >> > > > > > > to expand the
> > >> > > > > > > > > > > > > > > > > > > > > > scope of the KIP to
> additionally
> > >> > > allow
> > >> > > > > > > querying the
> > >> > > > > > > > > > > > > > > > > > > > > > internal buffer, not just
> the
> > >> > > result. Can
> > >> > > > > > > you clarify
> > >> > > > > > > > > > > > > > > > > > > > > > whether you are proposing to
> > >> allow
> > >> > > > > querying
> > >> > > > > > > the state of
> > >> > > > > > > > > > > > > > > > > > > > > > the internal buffer, the
> > >> result, or
> > >> > > both?
> > >> > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > Thanks, John
> > >> > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > On Thu, Feb 20, 2020, at
> 08:41,
> > >> > > Dongjin
> > >> > > > > Lee
> > >> > > > > > > wrote:
> > >> > > > > > > > > > > > > > > > > > > > > > > Hi John, Thanks for your
> kind
> > >> > > > > explanation
> > >> > > > > > > with an
> > >> > > > > > > > > > > > > > > > > > > > > > > example.
> > >> > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > But it feels like you're
> > >> saying
> > >> > > > > you're
> > >> > > > > > > trying to do
> > >> > > > > > > > > > > > > > > > > > > > > > > > something different
> > >> > > > > > > > > > > > > > > > > > > > > > > than just query the
> windowed
> > >> key
> > >> > > and
> > >> > > > > get
> > >> > > > > > > back the
> > >> > > > > > > > > > > > > > > > > > > > > > > current count?
> > >> > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > Yes, for example, what if
> we
> > >> need
> > >> > > to
> > >> > > > > > > retrieve the (all
> > >> > > > > > > > > > > > > > > > > > > > > > > or range) keys
> > >> > > > > > > > > > > > > > > > > > > > > > with
> > >> > > > > > > > > > > > > > > > > > > > > > > a closed window? In this
> > >> example,
> > >> > > let's
> > >> > > > > > > imagine we
> > >> > > > > > > > > > > > > need
> > >> > > > > > > > > > > > > > > > > > > > > > > to retrieve only (key=A,
> > >> > > window=10),
> > >> > > > > not
> > >> > > > > > > (key=A,
> > >> > > > > > > > > > > > > > > > > > > > > > > window=20).
> > >> > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > Of course, the value
> > >> accompanied
> > >> > > by a
> > >> > > > > > > flushed key is
> > >> > > > > > > > > > > > > > > > > > > > > > > exactly the same to the
> one
> > >> in the
> > >> > > > > > > upstream KTable;
> > >> > > > > > > > > > > > > > > > > > > > > > > However, if our intention
> is
> > >> not
> > >> > > > > pointing
> > >> > > > > > > out a
> > >> > > > > > > > > > > > > > > > > > > > > > > specific key but
> retrieving a
> > >> > > group of
> > >> > > > > > > unspecified
> > >> > > > > > > > > > > > > > > > > > > > > > > keys, we stuck
> > >> > > > > > > > > > > > > > > > > > > > > > in
> > >> > > > > > > > > > > > > > > > > > > > > > > trouble - since we can't
> be
> > >> sure
> > >> > > which
> > >> > > > > key
> > >> > > > > > > is flushed
> > >> > > > > > > > > > > > > > > > > > > > > > > out beforehand.
> > >> > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > One workaround would be
> > >> > > materializing
> > >> > > > > it
> > >> > > > > > > with
> > >> > > > > > > > > > > > > > > > > > > > > > > `suppressed.filter(e ->
> > >> > > > > > > > > > > > > > > > > > > > > > true,
> > >> > > > > > > > > > > > > > > > > > > > > > >
> > >> Materialized.as("final-count"))`.
> > >> > > But I
> > >> > > > > > > think
> > >> > > > > > > > > > > > > providing
> > >> > > > > > > > > > > > > > > > > > > > > > > a materialized variant for
> > >> suppress
> > >> > > > > method
> > >> > > > > > > is better
> > >> > > > > > > > > > > > > > > > > > > > > > > than this workaround.
> > >> > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > Thanks, Dongjin
> > >> > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > On Thu, Feb 20, 2020 at
> 1:26
> > >> AM
> > >> > > John
> > >> > > > > > > Roesler
> > >> > > > > > > > > > > > > > > > > > > > > > > <vvcep...@apache.org>
> > >> > > > > > > > > > > > > > > > > > > > > > wrote:
> > >> > > > > > > > > > > > > > > > > > > > > > > > Thanks for the response,
> > >> Dongjin,
> > >> > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > I'm sorry, but I'm
> still not
> > >> > > > > following.
> > >> > > > > > > It seems
> > >> > > > > > > > > > > > > like
> > >> > > > > > > > > > > > > > > > > > > > > > > > the view you
> > >> > > > > > > > > > > > > > > > > > > > > > would
> > >> > > > > > > > > > > > > > > > > > > > > > > > get on the "current
> state
> > >> of the
> > >> > > > > buffer"
> > >> > > > > > > would
> > >> > > > > > > > > > > > > always
> > >> > > > > > > > > > > > > > > > > > > > > > > > be equivalent to the
> view
> > >> of the
> > >> > > > > > > upstream table.
> > >> > > > > > > > > > > > > > > > > > > > > > > > Let me try an example,
> and
> > >> maybe
> > >> > > you
> > >> > > > > can
> > >> > > > > > > point out
> > >> > > > > > > > > > > > > > > > > > > > > > > > the flaw in my
> reasoning.
> > >> > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > Let's say we're doing
> 10 ms
> > >> > > windows
> > >> > > > > with
> > >> > > > > > > a grace
> > >> > > > > > > > > > > > > > > > > > > > > > > > period of zero. Let's
> also
> > >> say
> > >> > > we're
> > >> > > > > > > computing a
> > >> > > > > > > > > > > > > > > > > > > > > > > > windowed count, and
> that we
> > >> have
> > >> > > a
> > >> > > > > > > "final results"
> > >> > > > > > > > > > > > > > > > > > > > > > > > suppression after the
> count.
> > >> > > Let's
> > >> > > > > > > materialize the
> > >> > > > > > > > > > > > > > > > > > > > > > > > count as "Count" and the
> > >> > > suppressed
> > >> > > > > > > result as "Final
> > >> > > > > > > > > > > > > > > > > > > > > > > > Count".
> > >> > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > Suppose we get an input
> > >> event:
> > >> > > > > (time=10,
> > >> > > > > > > key=A,
> > >> > > > > > > > > > > > > > > > > > > > > > > > value=...)
> > >> > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > Then, Count will look
> like:
> > >> > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > window | key | value
> | |
> > >> 10
> > >> > >  | A
> > >> > > > > > >  |     1 |
> > >> > > > > > > > > > > > > > > > > > > > > > > > The (internal)
> suppression
> > >> buffer
> > >> > > > > will
> > >> > > > > > > contain:
> > >> > > > > > > > > > > > > > > > > > > > > > > > > window | key | value
> | |
> > >> 10
> > >> > >  | A
> > >> > > > > > >  |     1 |
> > >> > > > > > > > > > > > > > > > > > > > > > > > The record is still
> buffered
> > >> > > because
> > >> > > > > the
> > >> > > > > > > window
> > >> > > > > > > > > > > > > > > > > > > > > > > > isn't closed yet. Final
> > >> Count is
> > >> > > an
> > >> > > > > > > empty table:
> > >> > > > > > > > > > > > > > > > > > > > > > > > > window | key | value |
> > >> > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > ---------------
> > >> > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > Now, we get a second
> event:
> > >> > > (time=15,
> > >> > > > > > > key=A,
> > >> > > > > > > > > > > > > > > > > > > > > > > > value=...)
> > >> > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > Then, Count will look
> like:
> > >> > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > window | key | value
> | |
> > >> 10
> > >> > >  | A
> > >> > > > > > >  |     2 |
> > >> > > > > > > > > > > > > > > > > > > > > > > > The (internal)
> suppression
> > >> buffer
> > >> > > > > will
> > >> > > > > > > contain:
> > >> > > > > > > > > > > > > > > > > > > > > > > > > window | key | value
> | |
> > >> 10
> > >> > >  | A
> > >> > > > > > >  |     2 |
> > >> > > > > > > > > > > > > > > > > > > > > > > > The record is still
> buffered
> > >> > > because
> > >> > > > > the
> > >> > > > > > > window
> > >> > > > > > > > > > > > > > > > > > > > > > > > isn't closed yet. Final
> > >> Count is
> > >> > > an
> > >> > > > > > > empty table:
> > >> > > > > > > > > > > > > > > > > > > > > > > > > window | key | value |
> > >> > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > ---------------
> > >> > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > Finally, we get a third
> > >> event:
> > >> > > > > (time=20,
> > >> > > > > > > key=A,
> > >> > > > > > > > > > > > > > > > > > > > > > > > value=...)
> > >> > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > Then, Count will look
> like:
> > >> > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > window | key | value
> | |
> > >> 10
> > >> > >  | A
> > >> > > > > > >  |     2 | |
> > >> > > > > > > > > > > > > > > > > > > > > > > > 20 | A   |     1 |
> > >> > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > The (internal)
> suppression
> > >> buffer
> > >> > > > > will
> > >> > > > > > > contain:
> > >> > > > > > > > > > > > > > > > > > > > > > > > > window | key | value
> | |
> > >> 20
> > >> > >  | A
> > >> > > > > > >  |     1 |
> > >> > > > > > > > > > > > > > > > > > > > > > > > Note that window 10 has
> been
> > >> > > flushed
> > >> > > > > > > out, because
> > >> > > > > > > > > > > > > > > > > > > > > > > > it's now closed. And
> window
> > >> 20 is
> > >> > > > > > > buffered because
> > >> > > > > > > > > > > > > it
> > >> > > > > > > > > > > > > > > > > > > > > > > > isn't closed yet. Final
> > >> Count is
> > >> > > now:
> > >> > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > window | key | value
> | |
> > >> 10
> > >> > >  | A
> > >> > > > > > >  |     2 |
> > >> > > > > > > > > > > > > > > > > > > > > > > > ---------------
> > >> > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > Reading your email, I
> can't
> > >> > > figure
> > >> > > > > out
> > >> > > > > > > what value
> > >> > > > > > > > > > > > > > > > > > > > > > > > there is in querying
> > >> > > > > > > > > > > > > > > > > > > > > > the
> > >> > > > > > > > > > > > > > > > > > > > > > > > internal suppression
> buffer,
> > >> > > since it
> > >> > > > > > > only contains
> > >> > > > > > > > > > > > > > > > > > > > > > > > exactly the same
> > >> > > > > > > > > > > > > > > > > > > > > > value
> > >> > > > > > > > > > > > > > > > > > > > > > > > as the upstream table,
> for
> > >> each
> > >> > > key
> > >> > > > > that
> > >> > > > > > > is still
> > >> > > > > > > > > > > > > > > > > > > > > > > > buffered. But it feels
> > >> > > > > > > > > > > > > > > > > > > > > > like
> > >> > > > > > > > > > > > > > > > > > > > > > > > you're saying you're
> trying
> > >> to do
> > >> > > > > > > something
> > >> > > > > > > > > > > > > different
> > >> > > > > > > > > > > > > > > > > > > > > > > > than just query
> > >> > > > > > > > > > > > > > > > > > > > > > the
> > >> > > > > > > > > > > > > > > > > > > > > > > > windowed key and get
> back
> > >> the
> > >> > > current
> > >> > > > > > > count?
> > >> > > > > > > > > > > > > > > > > > > > > > > > Thanks, -John
> > >> > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > On Wed, Feb 19, 2020, at
> > >> 09:49,
> > >> > > > > Dongjin
> > >> > > > > > > Lee wrote:
> > >> > > > > > > > > > > > > > > > > > > > > > > > > Hi John,
> > >> > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > 'The intermediate
> state
> > >> of the
> > >> > > > > > > suppression' in KIP
> > >> > > > > > > > > > > > > > > > > > > > > > > > > does not mean the
> > >> > > > > > > > > > > > > > > > > > > > > > > > state
> > >> > > > > > > > > > > > > > > > > > > > > > > > > of upstream KTable -
> > >> sure, the
> > >> > > > > state
> > >> > > > > > > of the
> > >> > > > > > > > > > > > > > > > > > > > > > > > > upstream KTable can be
> > >> > > > > > > > > > > > > > > > > > > > > > > > queried
> > >> > > > > > > > > > > > > > > > > > > > > > > > > by materializing the
> > >> operator
> > >> > > > > > > immediately before
> > >> > > > > > > > > > > > > > > > > > > > > > > > > the suppress as you
> > >> > > > > > > > > > > > > > > > > > > > > > > > shown.
> > >> > > > > > > > > > > > > > > > > > > > > > > > > What I meant in KIP
> was
> > >> the
> > >> > > final
> > >> > > > > > > state of the
> > >> > > > > > > > > > > > > > > > > > > > > > > > > buffer, which is not
> > >> > > > > > > > > > > > > > > > > > > > > > > > emitted
> > >> > > > > > > > > > > > > > > > > > > > > > > > > yet. (I agree, the
> current
> > >> > > > > description
> > >> > > > > > > may be
> > >> > > > > > > > > > > > > > > > > > > > > > > > > confusing; it would be
> > >> > > > > > > > > > > > > > > > > > > > > > > > better
> > >> > > > > > > > > > > > > > > > > > > > > > > > > to change it with 'the
> > >> current
> > >> > > > > state
> > >> > > > > > > of the
> > >> > > > > > > > > > > > > > > > > > > > > > > > > suppression' or 'the
> > >> > > > > > > > > > > > > > > > > > > > > > results
> > >> > > > > > > > > > > > > > > > > > > > > > > > of
> > >> > > > > > > > > > > > > > > > > > > > > > > > > the suppression', like
> > >> the Jira
> > >> > > > > issue
> > >> > > > > > > > > > > > > > > > > > > > > > > > > <
> > >> > > > > > > https://issues.apache.org/jira/browse/KAFKA-8403
> > >> > > > > > > > > > > > > > > > > > > > > > > > > states.)
> > >> > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > For a little bit more
> > >> about the
> > >> > > > > > > motivation, here
> > >> > > > > > > > > > > > > is
> > >> > > > > > > > > > > > > > > > > > > > > > > > > one of my
> > >> > > > > > > > > > > > > > > > > > > > > > > > experience: I
> > >> > > > > > > > > > > > > > > > > > > > > > > > > had to build a
> monitoring
> > >> > > > > application
> > >> > > > > > > which
> > >> > > > > > > > > > > > > > > > > > > > > > > > > collects signals from
> IoT
> > >> > > devices
> > >> > > > > > > (say, a
> > >> > > > > > > > > > > > > > > > > > > > > > > > > semiconductor
> production
> > >> > > line.) If
> > >> > > > > the
> > >> > > > > > > number of
> > >> > > > > > > > > > > > > > > > > > > > > > > > collected
> > >> > > > > > > > > > > > > > > > > > > > > > > > > signals within the
> time
> > >> window
> > >> > > is
> > >> > > > > much
> > >> > > > > > > less than
> > >> > > > > > > > > > > > > > > > > > > > > > > > > the expected, there
> > >> > > > > > > > > > > > > > > > > > > > > > may
> > >> > > > > > > > > > > > > > > > > > > > > > > > be
> > >> > > > > > > > > > > > > > > > > > > > > > > > > some problems like
> network
> > >> > > hiccup
> > >> > > > > in
> > >> > > > > > > the systems.
> > >> > > > > > > > > > > > > > > > > > > > > > > > > We wanted to build
> > >> > > > > > > > > > > > > > > > > > > > > > the
> > >> > > > > > > > > > > > > > > > > > > > > > > > > system in the form of
> a
> > >> > > dashboard,
> > >> > > > > but
> > >> > > > > > > could not
> > >> > > > > > > > > > > > > by
> > >> > > > > > > > > > > > > > > > > > > > > > > > > lack of
> > >> > > > > > > > > > > > > > > > > > > > > > materializing
> > >> > > > > > > > > > > > > > > > > > > > > > > > > feature. It was
> precisely
> > >> the
> > >> > > case
> > >> > > > > of
> > >> > > > > > > querying
> > >> > > > > > > > > > > > > only
> > >> > > > > > > > > > > > > > > > > > > > > > > > > the final
> > >> > > > > > > > > > > > > > > > > > > > > > results of
> > >> > > > > > > > > > > > > > > > > > > > > > > > a
> > >> > > > > > > > > > > > > > > > > > > > > > > > > windowed aggregation,
> as
> > >> the
> > >> > > Jira
> > >> > > > > issue
> > >> > > > > > > > > > > > > > > > > > > > > > > > > <
> > >> > > > > > > https://issues.apache.org/jira/browse/KAFKA-8403
> > >> > > > > > > > > > > > > > > > > > > > > > > > > states. We
> > >> > > > > > > > > > > > > > > > > > > > > > finally
> > >> > > > > > > > > > > > > > > > > > > > > > > > ended
> > >> > > > > > > > > > > > > > > > > > > > > > > > > in implementing the
> > >> system in
> > >> > > an
> > >> > > > > email
> > >> > > > > > > alerting
> > >> > > > > > > > > > > > > > > > > > > > > > > > > system like this <
> > >> > > > > > >
> > >> https://www.confluent.io/blog/kafka-streams-take-on-watermarks-an
> > >> > > > > > > > > > d-t
> > >> > > > > > > > > > riggers/
> > >> > > > > > > > > > > > > > > > > and had to collect the keys and
> windows of
> > >> > > trouble
> > >> > > > > by
> > >> > > > > > > hand.
> > >> > > > > > > > > > > > > > > > > > > > > > > > > I think these kinds
> of use
> > >> > > cases
> > >> > > > > would
> > >> > > > > > > be much
> > >> > > > > > > > > > > > > > > > > > > > > > > > > common. Should it be
> > >> described
> > >> > > in
> > >> > > > > the
> > >> > > > > > > KIP much
> > >> > > > > > > > > > > > > more
> > >> > > > > > > > > > > > > > > > > > > > > > > > > in detail?
> > >> > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > Thanks, Dongjin
> > >> > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > On Sat, Feb 15, 2020
> at
> > >> 4:43 AM
> > >> > > > > John
> > >> > > > > > > Roesler
> > >> > > > > > > > > > > > > > > > > > > > > > > > > <vvcep...@apache.org>
> > >> > > > > > > > > > > > > > > > > > > > > > > > wrote:
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > Hi Dongjin,
> > >> > > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > Thanks for the KIP!
> > >> > > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > Can you explain more
> > >> about
> > >> > > why
> > >> > > > > the
> > >> > > > > > > internal data
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > structures of
> > >> > > > > > > > > > > > > > > > > > > > > > > > suppression
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > should be
> queriable? The
> > >> > > > > motivation
> > >> > > > > > > just says
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > that users might
> > >> > > > > > > > > > > > > > > > > > > > > > want to
> > >> > > > > > > > > > > > > > > > > > > > > > > > do
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > it, which seems
> like it
> > >> could
> > >> > > > > > > justify literally
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > anything :)
> > >> > > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > One design point of
> > >> > > Suppression
> > >> > > > > is
> > >> > > > > > > that if you
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > wanted to query the
> > >> > > > > > > > > > > > > > > > > > > > > > > > “final
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > state”, you can
> > >> Materialize
> > >> > > the
> > >> > > > > > > suppress itself
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > (which is why it
> > >> > > > > > > > > > > > > > > > > > > > > > needs
> > >> > > > > > > > > > > > > > > > > > > > > > > > the
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > variant); if you
> wanted
> > >> to
> > >> > > query
> > >> > > > > the
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > “intermediate
> state”,
> > >> you can
> > >> > > > > > > materialize the
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > operator immediately
> > >> before
> > >> > > the
> > >> > > > > > > suppress.
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > Example:
> > >> > > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > ...count(Materialized.as(“intermediate”))
> > >> > > > > > > > > > > > > > > > > > > > > > > > > >
> > >> .supress(untilWindowClosed(),
> > >> > > > > > > > > > > > > > > > > > > > > > > > > >
> > >> Materialized.as(“final”))
> > >> > > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > I’m not sure what
> use
> > >> case
> > >> > > would
> > >> > > > > > > require
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > actually fetching
> from
> > >> the
> > >> > > > > internal
> > >> > > > > > > buffers.
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > Thanks, John
> > >> > > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > On Fri, Feb 14,
> 2020, at
> > >> > > 07:55,
> > >> > > > > > > Dongjin Lee
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > wrote:
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > > Hi devs,
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > > I'd like to
> reboot the
> > >> > > > > discussion
> > >> > > > > > > on KIP-508,
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > > which aims to
> > >> > > > > > > > > > > > > > > > > > > > > > support a
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > > Materialized
> variant
> > >> of
> > >> > > > > > > KTable#suppress. It
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > > was initially
> > >> > > > > > > > > > > > > > > > > > > > > > submitted
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > several
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > > months ago but
> closed
> > >> by
> > >> > > the
> > >> > > > > > > inactivity.
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > > - KIP:
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > >
> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-508%3A+Make
> > >> > > > > > > > > > +Su
> > >> > > > > > > > > > ppression+State+Queriable
> > >> > > > > > > > > > > > > > > > > - Jira:
> > >> > > > > > > https://issues.apache.org/jira/browse/KAFKA-8403
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > > All kinds of
> feedback
> > >> will
> > >> > > be
> > >> > > > > > > greatly
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > > appreciated.
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > > Best, Dongjin
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > > -- *Dongjin Lee*
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > > *A hitchhiker in
> the
> > >> > > > > mathematical
> > >> > > > > > > world.*
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > > *github:
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > > <
> > >> http://goog_969573159/>
> > >> > > > > > > > > > > > > github.com/dongjinleekr
> > >> > > > > > > > > > <https://github.com/dongjinleekr>linkedin:
> > >> > > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > kr.linkedin.com/in/dongjinleekr
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > > <
> > >> > > > > > > https://kr.linkedin.com/in/dongjinleekr
> > >> > > > > > > > > > > > > > speakerdeck:
> > >> > > > > > > > > > speakerdeck.com/dongjin
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > > <
> > >> > > > > https://speakerdeck.com/dongjin>*
> > >> > > > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > -- *Dongjin Lee*
> > >> > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > > > *A hitchhiker in the
> > >> > > mathematical
> > >> > > > > > > world.* *github:
> > >> > > > > > > > > > > > > > > > > > > > > > > > > <
> http://goog_969573159/>
> > >> > > > > > > github.com/dongjinleekr
> > >> > > > > > > > > > > > > > > > > > > > > > > > > <
> > >> > > https://github.com/dongjinleekr
> > >> > > > > > > > linkedin:
> > >> > > > > > > > > > > > > > > > > > > > > > > >
> > >> kr.linkedin.com/in/dongjinleekr
> > >> > > > > > > > > > > > > > > > > > > > > > > > > <
> > >> > > > > > > https://kr.linkedin.com/in/dongjinleekr
> > >> > > > > > > > > > > > > > speakerdeck:
> > >> > > > > > > > > > speakerdeck.com/dongjin
> > >> > > > > > > > > > > > > > > > > > > > > > > > > <
> > >> > > https://speakerdeck.com/dongjin>*
> > >> > > > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > -- *Dongjin Lee*
> > >> > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > > > *A hitchhiker in the
> > >> mathematical
> > >> > > > > world.*
> > >> > > > > > > *github:
> > >> > > > > > > > > > > > > > > > > > > > > > > <http://goog_969573159/>
> > >> > > > > > > github.com/dongjinleekr
> > >> > > > > > > > > > > > > > > > > > > > > > > <
> > >> https://github.com/dongjinleekr
> > >> > > > > >linkedin:
> > >> > > > > > > > > > > > > > > > > > > > > >
> kr.linkedin.com/in/dongjinleekr
> > >> > > > > > > > > > > > > > > > > > > > > > > <
> > >> > > > > https://kr.linkedin.com/in/dongjinleekr
> > >> > > > > > > > speakerdeck:
> > >> > > > > > > > > > > > > > > > > > > > > > speakerdeck.com/dongjin
> > >> > > > > > > > > > > > > > > > > > > > > > > <
> > >> https://speakerdeck.com/dongjin>*
> > >> > > > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > -- *Dongjin Lee*
> > >> > > > > > > > > > > > > > > > > > > > >
> > >> > > > > > > > > > > > > > > > > > > > > *A hitchhiker in the
> mathematical
> > >> > > world.*
> > >> > > > > > > *github:
> > >> > > > > > > > > > > > > > > > > > > > > <http://goog_969573159/>
> > >> > > > > > > github.com/dongjinleekr
> > >> > > > > > > > > > > > > > > > > > > > > <
> https://github.com/dongjinleekr
> > >> > > >linkedin:
> > >> > > > > > > > > > > > > > > > > > > > >
> kr.linkedin.com/in/dongjinleekr
> > >> > > > > > > > > > > > > > > > > > > > > <
> > >> > > https://kr.linkedin.com/in/dongjinleekr
> > >> > > > > > > > speakerdeck:
> > >> > > > > > > > > > > > > > > > > > > > > speakerdeck.com/dongjin <
> > >> > > > > > > https://speakerdeck.com/dongjin
> > >> > > > > > > > > > > > > > *
> > >> > > > > > > > > > >
> > >> > > > > > > > > > > --
> > >> > > > > > > > > > > *Dongjin Lee*
> > >> > > > > > > > > > >
> > >> > > > > > > > > > > *A hitchhiker in the mathematical world.*
> > >> > > > > > > > > > >
> > >> > > > > > > > > > >
> > >> > > > > > > > > > >
> > >> > > > > > > > > > >
> > >> > > > > > > > > > > *github:  <http://goog_969573159/>
> > >> github.com/dongjinleekr
> > >> > > > > > > > > > > <https://github.com/dongjinleekr>keybase:
> > >> > > > > > > > > https://keybase.io/dongjinleekr
> > >> > > > > > > > > > > <https://keybase.io/dongjinleekr>linkedin:
> > >> > > > > > > > > kr.linkedin.com/in/dongjinleekr
> > >> > > > > > > > > > > <https://kr.linkedin.com/in/dongjinleekr
> >speakerdeck:
> > >> > > > > > > > > speakerdeck.com/dongjin
> > >> > > > > > > > > > > <https://speakerdeck.com/dongjin>*
> > >> > > > > > > > > > >
> > >> > > > >
> > >> > > > >
> > >> > > >
> > >> > > > --
> > >> > > > *Dongjin Lee*
> > >> > > >
> > >> > > > *A hitchhiker in the mathematical world.*
> > >> > > >
> > >> > > >
> > >> > > >
> > >> > > >
> > >> > > > *github:  <http://goog_969573159/>github.com/dongjinleekr
> > >> > > > <https://github.com/dongjinleekr>keybase:
> > >> > > https://keybase.io/dongjinleekr
> > >> > > > <https://keybase.io/dongjinleekr>linkedin:
> > >> > > kr.linkedin.com/in/dongjinleekr
> > >> > > > <https://kr.linkedin.com/in/dongjinleekr>speakerdeck:
> > >> > > speakerdeck.com/dongjin
> > >> > > > <https://speakerdeck.com/dongjin>*
> > >> > > >
> > >> > >
> > >> >
> > >> >
> > >> > --
> > >> > *Dongjin Lee*
> > >> >
> > >> > *A hitchhiker in the mathematical world.*
> > >> >
> > >> >
> > >> >
> > >> >
> > >> > *github:  <http://goog_969573159/>github.com/dongjinleekr
> > >> > <https://github.com/dongjinleekr>keybase:
> > >> https://keybase.io/dongjinleekr
> > >> > <https://keybase.io/dongjinleekr>linkedin:
> > >> kr.linkedin.com/in/dongjinleekr
> > >> > <https://kr.linkedin.com/in/dongjinleekr>speakerdeck:
> > >> speakerdeck.com/dongjin
> > >> > <https://speakerdeck.com/dongjin>*
> > >> >
> > >>
> > >
> > >
> > > --
> > > *Dongjin Lee*
> > >
> > > *A hitchhiker in the mathematical world.*
> > >
> > >
> > >
> > >
> > > *github:  <http://goog_969573159/>github.com/dongjinleekr
> > > <https://github.com/dongjinleekr>keybase:
> https://keybase.io/dongjinleekr
> > > <https://keybase.io/dongjinleekr>linkedin:
> kr.linkedin.com/in/dongjinleekr
> > > <https://kr.linkedin.com/in/dongjinleekr>speakerdeck:
> speakerdeck.com/dongjin
> > > <https://speakerdeck.com/dongjin>*
> > >
> >
> >
> > --
> > *Dongjin Lee*
> >
> > *A hitchhiker in the mathematical world.*
> >
> >
> >
> >
> > *github:  <http://goog_969573159/>github.com/dongjinleekr
> > <https://github.com/dongjinleekr>keybase:
> https://keybase.io/dongjinleekr
> > <https://keybase.io/dongjinleekr>linkedin:
> kr.linkedin.com/in/dongjinleekr
> > <https://kr.linkedin.com/in/dongjinleekr>speakerdeck:
> speakerdeck.com/dongjin
> > <https://speakerdeck.com/dongjin>*
> >
>


-- 
*Dongjin Lee*

*A hitchhiker in the mathematical world.*




*github:  <http://goog_969573159/>github.com/dongjinleekr
<https://github.com/dongjinleekr>keybase: https://keybase.io/dongjinleekr
<https://keybase.io/dongjinleekr>linkedin: kr.linkedin.com/in/dongjinleekr
<https://kr.linkedin.com/in/dongjinleekr>speakerdeck: speakerdeck.com/dongjin
<https://speakerdeck.com/dongjin>*

Reply via email to