A comment on the PR pointed out the advantages of a relatively minor adjustment 
to the method org.apache.kafka.streams.processor.addGlobalStore. It should take 
a StateStoreSupplier<KeyValueStore>" type as the first argument, not a 
StateStore. Note that one can obtain a StateStore by calling the .get() method 
on a StateStoreSupplier.

Adjusted the KIP accordingly.

Thanks
Eno


> On 26 Apr 2017, at 09:21, Eno Thereska <eno.there...@gmail.com> wrote:
> 
> Made a slight change to the wiki since I had forgotten to state the fact that 
> some APIs don’t take a store name, but a StateStoreSupplier (that contains 
> the name). That’s already the case in the code but thought of making that 
> explicit. FYI, no action needed.
> 
> Thanks
> Eno
>> On Apr 21, 2017, at 7:47 PM, Eno Thereska <eno.there...@gmail.com> wrote:
>> 
>> Added the .tostream() discussion in the Wiki.
>> 
>> Thanks
>> Eno
>>> On 21 Apr 2017, at 18:48, Matthias J. Sax <matth...@confluent.io> wrote:
>>> 
>>> I agree with Eno about the renaming.
>>> 
>>> @Eno: can you add this to the Wiki Discussion page?
>>> 
>>> 
>>> -Matthias
>>> 
>>> 
>>> On 4/21/17 1:11 AM, Eno Thereska wrote:
>>>> Hi Guozhang,
>>>> 
>>>> Thanks for the feedback. Comments inline:
>>>> 
>>>>> 1. Regarding the user-facing semantics, I thought we will claim that
>>>>> "KTables generated from functions that do NOT specify a table name will 
>>>>> NOT
>>>>> be queryable"; but it seems you're proposing to claim it "may not possible
>>>>> to be queryable", i.e. if users happen to know the internal name if it is
>>>>> materialized, she can still query it. I feel its potential benefits are
>>>>> well overwhelmed by the confusion it may introduce. So I'd suggest we just
>>>>> be strict and say "no store name, not queryable".
>>>> 
>>>> Sure. "No store name, not queryable" sounds fine. If the user is brave and 
>>>> digs deep they will be able to query these stores that are always created 
>>>> (like when we do aggregates), but I agree that there is no reason we need 
>>>> to make a promise to them if they don't provide a name. I'll change the 
>>>> wording.
>>>> 
>>>>> 
>>>>> 2. Is there a difference between "calling the overloaded function with
>>>>> store name, but specify the value as null" and "calling the overloaded
>>>>> function without store name"? I thought they will be implemented the same
>>>>> way. But after reading through the wiki I'm not sure. So just clarifying.
>>>>> 
>>>> 
>>>> There is no difference. I'll clarify.
>>>> 
>>>> 
>>>>> 3. Personally I'm still a bit preferring renaming "KTable#toStream" to 
>>>>> sth.
>>>>> like "KTable#getChangelog()" or "#toChangelog", since to me it feels more
>>>>> understandable from user's point of view. WDPT?
>>>>> 
>>>> 
>>>> So I left this out of this KIP, since it's not directly related to the 
>>>> scope. Perhaps we can do it in a cleanup KIP?
>>>> 
>>>> Thanks
>>>> Eno
>>>> 
>>>> 
>>>>> 
>>>>> Guozhang
>>>>> 
>>>>> 
>>>>> On Tue, Apr 11, 2017 at 11:53 AM, Matthias J. Sax <matth...@confluent.io>
>>>>> wrote:
>>>>> 
>>>>>> +1
>>>>>> 
>>>>>> On 4/11/17 10:34 AM, Eno Thereska wrote:
>>>>>>> Hi Matthias,
>>>>>>> 
>>>>>>> 
>>>>>>>> On 11 Apr 2017, at 09:41, Matthias J. Sax <matth...@confluent.io>
>>>>>> wrote:
>>>>>>>> 
>>>>>>>> Not sure, if we are on the same page already?
>>>>>>>> 
>>>>>>>>> "A __store__ can be queryable whether is't materialized or not"
>>>>>>>> 
>>>>>>>> This does not make sense -- there is nothing like a non-materialized
>>>>>>>> store -- only non-materialized KTables.
>>>>>>> 
>>>>>>> Yes, there are stores that are simple views, i.e., non-materialized.
>>>>>> Damian has such a prototype for Global Tables (it didn't go into trunk).
>>>>>>> It's still a store, e.g., a KeyValueStore, but when you do a get() it
>>>>>> recomputes the result on the fly (e.g., it applies a filter).
>>>>>>> 
>>>>>>> Eno
>>>>>>> 
>>>>>>>> 
>>>>>>>>> "Yes, there is nothing that will prevent users from querying
>>>>>>>> internally generated stores, but they cannot assume a store will
>>>>>>>> necessarily be queryable."
>>>>>>>> 
>>>>>>>> That is what I disagree on. Stores should be queryable all the time.
>>>>>>>> 
>>>>>>>> Furthermore, we should have all non-materialized KTables to be
>>>>>>>> queryable, too.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> Or maybe there is just some missunderstand going as, and there is some
>>>>>>>> mix-up between "store" and "KTable"
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> -Matthias
>>>>>>>> 
>>>>>>>> 
>>>>>>>> On 4/11/17 9:34 AM, Eno Thereska wrote:
>>>>>>>>> Hi Matthias,
>>>>>>>>> 
>>>>>>>>> See my note: "A store can be queryable whether it's materialized or
>>>>>> not". I think we're on the same page. Stores with an internal name are 
>>>>>> also
>>>>>> queryable.
>>>>>>>>> 
>>>>>>>>> I'm just pointing out that. although that is the case today and with
>>>>>> this KIP, I don't think we have an obligation to make stores with 
>>>>>> internal
>>>>>> names queryable in the future. However, that is a discussion for a future
>>>>>> point.
>>>>>>>>> 
>>>>>>>>> Eno
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>>> On 11 Apr 2017, at 08:56, Matthias J. Sax <matth...@confluent.io>
>>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>> +1 on including GlobalKTable
>>>>>>>>>> 
>>>>>>>>>> But I am not sure about the materialization / queryable question. For
>>>>>>>>>> full consistency, all KTables should be queryable nevertheless if 
>>>>>>>>>> they
>>>>>>>>>> are materialized or not. -- Maybe this is a second step though (even
>>>>>> if
>>>>>>>>>> I would like to get this done right away)
>>>>>>>>>> 
>>>>>>>>>> If we don't want all KTables to be queryable, ie, only those KTables
>>>>>>>>>> that are materialized, then we should have a clear definition about
>>>>>>>>>> this, and only allow to query stores, the user did specify a name 
>>>>>>>>>> for.
>>>>>>>>>> This will simply the reasoning for users, what stores are queryable
>>>>>> and
>>>>>>>>>> what not. Otherwise, we still end up confusing user.
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> -Matthias
>>>>>>>>>> 
>>>>>>>>>> On 4/11/17 8:23 AM, Damian Guy wrote:
>>>>>>>>>>> Eno, re: GlobalKTable - yeah that seems fine.
>>>>>>>>>>> 
>>>>>>>>>>> On Tue, 11 Apr 2017 at 14:18 Eno Thereska <eno.there...@gmail.com>
>>>>>> wrote:
>>>>>>>>>>> 
>>>>>>>>>>>> About GlobalKTables, I suppose there is no reason why they cannot
>>>>>> also use
>>>>>>>>>>>> this KIP for consistency, e.g., today you have:
>>>>>>>>>>>> 
>>>>>>>>>>>> public <K, V> GlobalKTable<K, V> globalTable(final Serde<K>
>>>>>> keySerde,
>>>>>>>>>>>>                                        final Serde<V> valSerde,
>>>>>>>>>>>>                                        final String topic,
>>>>>>>>>>>>                                        final String storeName)
>>>>>>>>>>>> 
>>>>>>>>>>>> For consistency with the KIP you could also have an overload
>>>>>> without the
>>>>>>>>>>>> store name, for people who want to construct a global ktable, but
>>>>>> don't
>>>>>>>>>>>> care about querying it directly:
>>>>>>>>>>>> 
>>>>>>>>>>>> public <K, V> GlobalKTable<K, V> globalTable(final Serde<K>
>>>>>> keySerde,
>>>>>>>>>>>>                                        final Serde<V> valSerde,
>>>>>>>>>>>>                                        final String topic)
>>>>>>>>>>>> 
>>>>>>>>>>>> Damian, what do you think? I'm thinking of adding this to KIP.
>>>>>> Thanks to
>>>>>>>>>>>> Michael for bringing it up.
>>>>>>>>>>>> 
>>>>>>>>>>>> Eno
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>>> On 11 Apr 2017, at 06:13, Eno Thereska <eno.there...@gmail.com>
>>>>>> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Hi Michael, comments inline:
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> On 11 Apr 2017, at 03:25, Michael Noll <mich...@confluent.io>
>>>>>> wrote:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Thanks for the updates, Eno!
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> In addition to what has already been said:  We should also
>>>>>> explicitly
>>>>>>>>>>>>>> mention that this KIP is not touching GlobalKTable.  I'm sure
>>>>>> that some
>>>>>>>>>>>>>> users will throw KTable and GlobalKTable into one conceptual
>>>>>> "it's all
>>>>>>>>>>>>>> tables!" bucket and then wonder how the KIP might affect global
>>>>>> tables.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Good point, I'll add.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Damian wrote:
>>>>>>>>>>>>>>> I think if no store name is provided users would still be able
>>>>>> to query
>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>> store, just the store name would be some internally generated
>>>>>> name.
>>>>>>>>>>>> They
>>>>>>>>>>>>>>> would be able to discover those names via the IQ API.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> I, too, think that users should be able to query a store even if
>>>>>> its
>>>>>>>>>>>> name
>>>>>>>>>>>>>> was internally generated.  After all, the data is already there /
>>>>>>>>>>>>>> materialized.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Yes, there is nothing that will prevent users from querying
>>>>>> internally
>>>>>>>>>>>> generated stores, but they cannot
>>>>>>>>>>>>> assume a store will necessarily be queryable. So if it's there,
>>>>>> they can
>>>>>>>>>>>> query it. If it's not there, and they didn't
>>>>>>>>>>>>> provide a queryable name, they cannot complain and say "hey, where
>>>>>> is my
>>>>>>>>>>>> store". If they must absolutely be certain that
>>>>>>>>>>>>> a store is queryable, then they must provide a queryable name.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Damian wrote:
>>>>>>>>>>>>>>> I think for some stores it will make sense to not create a
>>>>>> physical
>>>>>>>>>>>>>> store, i.e.,
>>>>>>>>>>>>>>> for thinks like `filter`, as this will save the rocksdb
>>>>>> overhead. But i
>>>>>>>>>>>>>> guess that
>>>>>>>>>>>>>>> is more of an implementation detail.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> I think it would help if the KIP would clarify what we'd do in
>>>>>> such a
>>>>>>>>>>>>>> case.  For example, if the user did not specify a store name for
>>>>>>>>>>>>>> `KTable#filter` -- would it be queryable?  If so, would this
>>>>>> imply we'd
>>>>>>>>>>>>>> always materialize the state store, or...?
>>>>>>>>>>>>> 
>>>>>>>>>>>>> I'll clarify in the KIP with some more examples. Materialization
>>>>>> will be
>>>>>>>>>>>> an internal concept. A store can be queryable whether it's
>>>>>> materialized or
>>>>>>>>>>>> not
>>>>>>>>>>>>> (e.g., through advanced implementations that compute the value of 
>>>>>>>>>>>>> a
>>>>>>>>>>>> filter on a fly, rather than materialize the answer).
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>> Eno
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> -Michael
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> On Tue, Apr 11, 2017 at 9:14 AM, Damian Guy <damian....@gmail.com
>>>>>>> 
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Hi Eno,
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Thanks for the update. I agree with what Matthias said. I wonder
>>>>>> if
>>>>>>>>>>>> the KIP
>>>>>>>>>>>>>>> should talk less about materialization and more about querying?
>>>>>> After
>>>>>>>>>>>> all,
>>>>>>>>>>>>>>> that is what is being provided from an end-users perspective.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> I think if no store name is provided users would still be able 
>>>>>>>>>>>>>>> to
>>>>>>>>>>>> query the
>>>>>>>>>>>>>>> store, just the store name would be some internally generated
>>>>>> name.
>>>>>>>>>>>> They
>>>>>>>>>>>>>>> would be able to discover those names via the IQ API
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> I think for some stores it will make sense to not create a
>>>>>> physical
>>>>>>>>>>>> store,
>>>>>>>>>>>>>>> i.e., for thinks like `filter`, as this will save the rocksdb
>>>>>>>>>>>> overhead. But
>>>>>>>>>>>>>>> i guess that is more of an implementation detail.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Cheers,
>>>>>>>>>>>>>>> Damian
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On Tue, 11 Apr 2017 at 00:36 Eno Thereska <
>>>>>> eno.there...@gmail.com>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Hi Matthias,
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> However, this still forces users, to provide a name for store
>>>>>> that we
>>>>>>>>>>>>>>>>> must materialize, even if users are not interested in querying
>>>>>> the
>>>>>>>>>>>>>>>>> stores. Thus, I would like to have overloads for all currently
>>>>>>>>>>>> existing
>>>>>>>>>>>>>>>>> methods having mandatory storeName paremeter, with overloads,
>>>>>> that do
>>>>>>>>>>>>>>>>> not require the storeName parameter.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Oh yeah, absolutely, this is part of the KIP. I guess I didn't
>>>>>> make it
>>>>>>>>>>>>>>>> clear, I'll clarify.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>>>>> Eno
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> On 10 Apr 2017, at 16:00, Matthias J. Sax <
>>>>>> matth...@confluent.io>
>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Thanks for pushing this KIP Eno.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> The update give a very clear description about the scope, that
>>>>>> is
>>>>>>>>>>>> super
>>>>>>>>>>>>>>>>> helpful for the discussion!
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> - To put it into my own words, the KIP focus is on enable to
>>>>>> query
>>>>>>>>>>>> all
>>>>>>>>>>>>>>>>> KTables.
>>>>>>>>>>>>>>>>> ** The ability to query a store is determined by providing a
>>>>>> name for
>>>>>>>>>>>>>>>>> the store.
>>>>>>>>>>>>>>>>> ** At the same time, providing a name -- and thus making a
>>>>>> store
>>>>>>>>>>>>>>>>> queryable -- does not say anything about an actual
>>>>>> materialization
>>>>>>>>>>>> (ie,
>>>>>>>>>>>>>>>>> being queryable and being materialized are orthogonal).
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> I like this overall a lot. However, I would go one step
>>>>>> further.
>>>>>>>>>>>> Right
>>>>>>>>>>>>>>>>> now, you suggest to add new overload methods that allow users
>>>>>> to
>>>>>>>>>>>>>>> specify
>>>>>>>>>>>>>>>>> a storeName -- if `null` is provided and the store is not
>>>>>>>>>>>> materialized,
>>>>>>>>>>>>>>>>> we ignore it completely -- if `null` is provided but the store
>>>>>> must
>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>> materialized we generate a internal name. So far so good.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> However, this still forces users, to provide a name for store
>>>>>> that we
>>>>>>>>>>>>>>>>> must materialize, even if users are not interested in querying
>>>>>> the
>>>>>>>>>>>>>>>>> stores. Thus, I would like to have overloads for all currently
>>>>>>>>>>>> existing
>>>>>>>>>>>>>>>>> methods having mandatory storeName paremeter, with overloads,
>>>>>> that do
>>>>>>>>>>>>>>>>> not require the storeName parameter.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Otherwise, we would still have some methods which optional
>>>>>> storeName
>>>>>>>>>>>>>>>>> parameter and other method with mandatory storeName parameter
>>>>>> --
>>>>>>>>>>>> thus,
>>>>>>>>>>>>>>>>> still some inconsistency.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> -Matthias
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> On 4/9/17 8:35 AM, Eno Thereska wrote:
>>>>>>>>>>>>>>>>>> Hi there,
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> I've now done a V2 of the KIP, that hopefully addresses the
>>>>>> feedback
>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>> this discussion thread:
>>>>>>>>>>>>>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-
>>>>>>>>>>>>>>> 114%3A+KTable+materialization+and+improved+semantics
>>>>>>>>>>>>>>>> <
>>>>>>>>>>>>>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-
>>>>>>>>>>>>>>> 114:+KTable+materialization+and+improved+semantics>.
>>>>>>>>>>>>>>>> Notable changes:
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> - clearly outline what is in the scope of the KIP and what is
>>>>>> not.
>>>>>>>>>>>> We
>>>>>>>>>>>>>>>> ran into the issue where lots of useful, but somewhat 
>>>>>>>>>>>>>>>> tangential
>>>>>>>>>>>>>>>> discussions came up on interactive queries, declarative DSL
>>>>>> etc. The
>>>>>>>>>>>>>>> exact
>>>>>>>>>>>>>>>> scope of this KIP is spelled out.
>>>>>>>>>>>>>>>>>> - decided to go with overloaded methods, not .materialize(),
>>>>>> to stay
>>>>>>>>>>>>>>>> within the spirit of the current declarative DSL.
>>>>>>>>>>>>>>>>>> - clarified the depreciation plan
>>>>>>>>>>>>>>>>>> - listed part of the discussion we had under rejected
>>>>>> alternatives
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> If you have any further feedback on this, let's continue on
>>>>>> this
>>>>>>>>>>>>>>> thread.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Thank you
>>>>>>>>>>>>>>>>>> Eno
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> On 1 Feb 2017, at 09:04, Eno Thereska <
>>>>>> eno.there...@gmail.com>
>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Thanks everyone! I think it's time to do a V2 on the KIP so
>>>>>> I'll do
>>>>>>>>>>>>>>>> that and we can see how it looks and continue the discussion
>>>>>> from
>>>>>>>>>>>> there.
>>>>>>>>>>>>>>>> Stay tuned.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>>>>>>>> Eno
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> On 30 Jan 2017, at 17:23, Matthias J. Sax <
>>>>>> matth...@confluent.io>
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> I think Eno's separation is very clear and helpful. In
>>>>>> order to
>>>>>>>>>>>>>>>>>>>> streamline this discussion, I would suggest we focus back
>>>>>> on point
>>>>>>>>>>>>>>> (1)
>>>>>>>>>>>>>>>>>>>> only, as this is the original KIP question.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Even if I started to DSL design discussion somehow, because
>>>>>> I
>>>>>>>>>>>>>>> thought
>>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>>>>> might be helpful to resolve both in a single shot, I feel
>>>>>> that we
>>>>>>>>>>>>>>> have
>>>>>>>>>>>>>>>>>>>> too many options about DSL design and we should split it up
>>>>>> in two
>>>>>>>>>>>>>>>>>>>> steps. This will have the disadvantage that we will change
>>>>>> the API
>>>>>>>>>>>>>>>>>>>> twice, but still, I think it will be a more focused
>>>>>> discussion.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> I just had another look at the KIP, an it proposes 3
>>>>>> changes:
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 1. add .materialized() -> IIRC it was suggested to name 
>>>>>>>>>>>>>>>>>>>> this
>>>>>>>>>>>>>>>>>>>> .materialize() though (can you maybe update the KIP Eno?)
>>>>>>>>>>>>>>>>>>>> 2. remove print(), writeAsText(), and foreach()
>>>>>>>>>>>>>>>>>>>> 3. rename toStream() to toKStream()
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> I completely agree with (2) -- not sure about (3) though
>>>>>> because
>>>>>>>>>>>>>>>>>>>> KStreamBuilder also hast .stream() and .table() as methods.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> However, we might want to introduce a KStream#toTable() --
>>>>>> this
>>>>>>>>>>>> was
>>>>>>>>>>>>>>>>>>>> requested multiple times -- might also be part of a
>>>>>> different KIP.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> Thus, we end up with (1). I would suggest to do a step
>>>>>> backward
>>>>>>>>>>>> here
>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>> instead of a discussion how to express the changes in the
>>>>>> DSL (new
>>>>>>>>>>>>>>>>>>>> overload, new methods...) we should discuss what the actual
>>>>>> change
>>>>>>>>>>>>>>>>>>>> should be. Like (1) materialize all KTable all the time (2)
>>>>>> all
>>>>>>>>>>>> the
>>>>>>>>>>>>>>>> user
>>>>>>>>>>>>>>>>>>>> to force a materialization to enable querying the KTable
>>>>>> (3) allow
>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>>>>> queryable non-materialized KTable.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> On more question is, if we want to allow a user-forced
>>>>>>>>>>>>>>> materialization
>>>>>>>>>>>>>>>>>>>> only as as local store without changelog, or both (together
>>>>>> /
>>>>>>>>>>>>>>>>>>>> independently)? We got some request like this already.
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> -Matthias
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>> On 1/30/17 3:50 AM, Jan Filipiak wrote:
>>>>>>>>>>>>>>>>>>>>> Hi Eno,
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> thanks for putting into different points. I want to put a
>>>>>> few
>>>>>>>>>>>>>>> remarks
>>>>>>>>>>>>>>>>>>>>> inline.
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> Best Jan
>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>> On 30.01.2017 12:19, Eno Thereska wrote:
>>>>>>>>>>>>>>>>>>>>>> So I think there are several important discussion threads
>>>>>> that
>>>>>>>>>>>> are
>>>>>>>>>>>>>>>>>>>>>> emerging here. Let me try to tease them apart:
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 1. inconsistency in what is materialized and what is not,
>>>>>> what
>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>>>>> queryable and what is not. I think we all agree there is
>>>>>> some
>>>>>>>>>>>>>>>>>>>>>> inconsistency there and this will be addressed with any
>>>>>> of the
>>>>>>>>>>>>>>>>>>>>>> proposed approaches. Addressing the inconsistency is the
>>>>>> point
>>>>>>>>>>>> of
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>> original KIP.
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 2. the exact API for materializing a KTable. We can
>>>>>> specify 1) a
>>>>>>>>>>>>>>>>>>>>>> "store name" (as we do today) or 2) have a
>>>>>> ".materialize[d]"
>>>>>>>>>>>> call
>>>>>>>>>>>>>>> or
>>>>>>>>>>>>>>>>>>>>>> 3) get a handle from a KTable ".getQueryHandle" or 4)
>>>>>> have a
>>>>>>>>>>>>>>> builder
>>>>>>>>>>>>>>>>>>>>>> construct. So we have discussed 4 options. It is
>>>>>> important to
>>>>>>>>>>>>>>>> remember
>>>>>>>>>>>>>>>>>>>>>> in this discussion that IQ is not designed for just local
>>>>>>>>>>>> queries,
>>>>>>>>>>>>>>>> but
>>>>>>>>>>>>>>>>>>>>>> also for distributed queries. In all cases an identifying
>>>>>>>>>>>> name/id
>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>>>>> needed for the store that the user is interested in
>>>>>> querying. So
>>>>>>>>>>>>>>> we
>>>>>>>>>>>>>>>>>>>>>> end up with a discussion on who provides the name, the
>>>>>> user (as
>>>>>>>>>>>>>>> done
>>>>>>>>>>>>>>>>>>>>>> today) or if it is generated automatically (as Jan
>>>>>> suggests, as
>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>>>>>> understand it). If it is generated automatically we need
>>>>>> a way
>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>> expose these auto-generated names to the users and link
>>>>>> them to
>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>> KTables they care to query.
>>>>>>>>>>>>>>>>>>>>> Hi, the last sentence is what I currently arguing against.
>>>>>> The
>>>>>>>>>>>> user
>>>>>>>>>>>>>>>>>>>>> would never see a stringtype indentifier name or anything.
>>>>>> All he
>>>>>>>>>>>>>>>> gets
>>>>>>>>>>>>>>>>>>>>> is the queryHandle if he executes a get(K) that will be an
>>>>>>>>>>>>>>>> interactive
>>>>>>>>>>>>>>>>>>>>> query get. with all the finding the right servers that
>>>>>> currently
>>>>>>>>>>>>>>>> have a
>>>>>>>>>>>>>>>>>>>>> copy of this underlying store stuff going on. The nice
>>>>>> part is
>>>>>>>>>>>> that
>>>>>>>>>>>>>>>> if
>>>>>>>>>>>>>>>>>>>>> someone retrieves a queryHandle, you know that you have to
>>>>>>>>>>>>>>>> materialized
>>>>>>>>>>>>>>>>>>>>> (if you are not already) as queries will be coming. Taking
>>>>>> away
>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>> confusion mentioned in point 1 IMO.
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 3. The exact boundary between the DSL, that is the
>>>>>> processing
>>>>>>>>>>>>>>>>>>>>>> language, and the storage/IQ queries, and how we jump
>>>>>> from one
>>>>>>>>>>>> to
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>> other. This is mostly for how we get a handle on a store
>>>>>> (so
>>>>>>>>>>>> it's
>>>>>>>>>>>>>>>>>>>>>> related to point 2), rather than for how we query the
>>>>>> store. I
>>>>>>>>>>>>>>> think
>>>>>>>>>>>>>>>>>>>>>> we all agree that we don't want to limit ways one can
>>>>>> query a
>>>>>>>>>>>>>>> store
>>>>>>>>>>>>>>>>>>>>>> (e.g., using gets or range queries etc) and the query
>>>>>> APIs are
>>>>>>>>>>>> not
>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>>>> the scope of the DSL.
>>>>>>>>>>>>>>>>>>>>> Does the IQ work with range currently? The range would
>>>>>> have to be
>>>>>>>>>>>>>>>>>>>>> started on all stores and then merged by maybe the client.
>>>>>> Range
>>>>>>>>>>>>>>>> force a
>>>>>>>>>>>>>>>>>>>>> flush to RocksDB currently so I am sure you would get a
>>>>>>>>>>>> performance
>>>>>>>>>>>>>>>> hit
>>>>>>>>>>>>>>>>>>>>> right there. Time-windows might be okay, but I am not sure
>>>>>> if the
>>>>>>>>>>>>>>>> first
>>>>>>>>>>>>>>>>>>>>> version should offer the user range access.
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 4. The nature of the DSL and whether its declarative
>>>>>> enough, or
>>>>>>>>>>>>>>>>>>>>>> flexible enough. Damian made the point that he likes the
>>>>>> builder
>>>>>>>>>>>>>>>>>>>>>> pattern since users can specify, per KTable, things like
>>>>>> caching
>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>>> logging needs. His observation (as I understand it) is
>>>>>> that the
>>>>>>>>>>>>>>>>>>>>>> processor API (PAPI) is flexible but doesn't provide any
>>>>>> help at
>>>>>>>>>>>>>>> all
>>>>>>>>>>>>>>>>>>>>>> to users. The current DSL provides declarative
>>>>>> abstractions, but
>>>>>>>>>>>>>>>> it's
>>>>>>>>>>>>>>>>>>>>>> not fine-grained enough. This point is much broader than
>>>>>> the
>>>>>>>>>>>> KIP,
>>>>>>>>>>>>>>>> but
>>>>>>>>>>>>>>>>>>>>>> discussing it in this KIPs context is ok, since we don't
>>>>>> want to
>>>>>>>>>>>>>>>> make
>>>>>>>>>>>>>>>>>>>>>> small piecemeal changes and then realise we're not in the
>>>>>> spot
>>>>>>>>>>>> we
>>>>>>>>>>>>>>>> want
>>>>>>>>>>>>>>>>>>>>>> to be.
>>>>>>>>>>>>>>>>>>>>> This is indeed much broader. My guess here is that's why
>>>>>> both
>>>>>>>>>>>> API's
>>>>>>>>>>>>>>>>>>>>> exists and helping the users to switch back and forth
>>>>>> might be a
>>>>>>>>>>>>>>>> thing.
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> Feel free to pitch in if I have misinterpreted something.
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>>>>>>>>>>> Eno
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> On 30 Jan 2017, at 10:22, Jan Filipiak <
>>>>>>>>>>>> jan.filip...@trivago.com
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> Hi Eno,
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> I have a really hard time understanding why we can't.
>>>>>> From my
>>>>>>>>>>>>>>> point
>>>>>>>>>>>>>>>>>>>>>>> of view everything could be super elegant DSL only +
>>>>>> public api
>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>>>>>>>> the PAPI-people as already exist.
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> The above aproach implementing a .get(K) on KTable is
>>>>>> foolisch
>>>>>>>>>>>> in
>>>>>>>>>>>>>>>> my
>>>>>>>>>>>>>>>>>>>>>>> opinion as it would be to late to know that
>>>>>> materialisation
>>>>>>>>>>>> would
>>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>>>>>>> required.
>>>>>>>>>>>>>>>>>>>>>>> But having an API that allows to indicate I want to
>>>>>> query this
>>>>>>>>>>>>>>>> table
>>>>>>>>>>>>>>>>>>>>>>> and then wrapping the say table's processorname can work
>>>>>> out
>>>>>>>>>>>>>>> really
>>>>>>>>>>>>>>>>>>>>>>> really nice. The only obstacle I see is people not
>>>>>> willing to
>>>>>>>>>>>>>>> spend
>>>>>>>>>>>>>>>>>>>>>>> the additional time in implementation and just want a
>>>>>> quick
>>>>>>>>>>>> shot
>>>>>>>>>>>>>>>>>>>>>>> option to make it work.
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> For me it would look like this:
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> table =  builder.table()
>>>>>>>>>>>>>>>>>>>>>>> filteredTable = table.filter()
>>>>>>>>>>>>>>>>>>>>>>> rawHandle = table.getQueryHandle() // Does the
>>>>>> materialisation,
>>>>>>>>>>>>>>>>>>>>>>> really all names possible but id rather hide the
>>>>>> implication of
>>>>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>>>>>>>> materializes
>>>>>>>>>>>>>>>>>>>>>>> filteredTableHandle = filteredTable.getQueryHandle() //
>>>>>> this
>>>>>>>>>>>>>>> would
>>>>>>>>>>>>>>>>>>>>>>> _not_ materialize again of course, the source or the
>>>>>> aggregator
>>>>>>>>>>>>>>>> would
>>>>>>>>>>>>>>>>>>>>>>> stay the only materialized processors
>>>>>>>>>>>>>>>>>>>>>>> streams = new streams(builder)
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> This middle part is highly flexible I could imagin to
>>>>>> force the
>>>>>>>>>>>>>>>> user
>>>>>>>>>>>>>>>>>>>>>>> todo something like this. This implies to the user that
>>>>>> his
>>>>>>>>>>>>>>> streams
>>>>>>>>>>>>>>>>>>>>>>> need to be running
>>>>>>>>>>>>>>>>>>>>>>> instead of propagating the missing initialisation back 
>>>>>>>>>>>>>>>>>>>>>>> by
>>>>>>>>>>>>>>>> exceptions.
>>>>>>>>>>>>>>>>>>>>>>> Also if the users is forced to pass the appropriate
>>>>>> streams
>>>>>>>>>>>>>>>> instance
>>>>>>>>>>>>>>>>>>>>>>> back can change.
>>>>>>>>>>>>>>>>>>>>>>> I think its possible to build multiple streams out of
>>>>>> one
>>>>>>>>>>>>>>> topology
>>>>>>>>>>>>>>>>>>>>>>> so it would be easiest to implement aswell. This is just
>>>>>> what I
>>>>>>>>>>>>>>>> maybe
>>>>>>>>>>>>>>>>>>>>>>> had liked the most
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> streams.start();
>>>>>>>>>>>>>>>>>>>>>>> rawHandle.prepare(streams)
>>>>>>>>>>>>>>>>>>>>>>> filteredHandle.prepare(streams)
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> later the users can do
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> V value = rawHandle.get(K)
>>>>>>>>>>>>>>>>>>>>>>> V value = filteredHandle.get(K)
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> This could free DSL users from anything like storenames
>>>>>> and how
>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>>>> what to materialize. Can someone indicate what the
>>>>>> problem
>>>>>>>>>>>> would
>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>>>>>>> implementing it like this.
>>>>>>>>>>>>>>>>>>>>>>> Yes I am aware that the current IQ API will not support
>>>>>>>>>>>> querying
>>>>>>>>>>>>>>> by
>>>>>>>>>>>>>>>>>>>>>>> KTableProcessorName instread of statestoreName. But I
>>>>>> think
>>>>>>>>>>>> that
>>>>>>>>>>>>>>>> had
>>>>>>>>>>>>>>>>>>>>>>> to change if you want it to be intuitive
>>>>>>>>>>>>>>>>>>>>>>> IMO you gotta apply the filter read time
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> Looking forward to your opinions
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> Best Jan
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> #DeathToIQMoreAndBetterConnectors
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>> On 30.01.2017 10:42, Eno Thereska wrote:
>>>>>>>>>>>>>>>>>>>>>>>> Hi there,
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> The inconsistency will be resolved, whether with
>>>>>> materialize
>>>>>>>>>>>> or
>>>>>>>>>>>>>>>>>>>>>>>> overloaded methods.
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> With the discussion on the DSL & stores I feel we've
>>>>>> gone in a
>>>>>>>>>>>>>>>>>>>>>>>> slightly different tangent, which is worth discussing
>>>>>>>>>>>>>>> nonetheless.
>>>>>>>>>>>>>>>>>>>>>>>> We have entered into an argument around the scope of
>>>>>> the DSL.
>>>>>>>>>>>>>>> The
>>>>>>>>>>>>>>>>>>>>>>>> DSL has been designed primarily for processing. The DSL
>>>>>> does
>>>>>>>>>>>> not
>>>>>>>>>>>>>>>>>>>>>>>> dictate ways to access state stores or what hind of
>>>>>> queries to
>>>>>>>>>>>>>>>>>>>>>>>> perform on them. Hence, I see the mechanism for
>>>>>> accessing
>>>>>>>>>>>>>>> storage
>>>>>>>>>>>>>>>> as
>>>>>>>>>>>>>>>>>>>>>>>> decoupled from the DSL.
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> We could think of ways to get store handles from part
>>>>>> of the
>>>>>>>>>>>>>>> DSL,
>>>>>>>>>>>>>>>>>>>>>>>> like the KTable abstraction. However, subsequent
>>>>>> queries will
>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>>>>>>>> store-dependent and not rely on the DSL, hence I'm not
>>>>>> sure we
>>>>>>>>>>>>>>> get
>>>>>>>>>>>>>>>>>>>>>>>> any grand-convergence DSL-Store here. So I am arguing
>>>>>> that the
>>>>>>>>>>>>>>>>>>>>>>>> current way of getting a handle on state stores is 
>>>>>>>>>>>>>>>>>>>>>>>> fine.
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>>>>>>>>>>>>> Eno
>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> On 30 Jan 2017, at 03:56, Guozhang Wang <
>>>>>> wangg...@gmail.com>
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> Thinking loud here about the API options (materialize
>>>>>> v.s.
>>>>>>>>>>>>>>>> overloaded
>>>>>>>>>>>>>>>>>>>>>>>>> functions) and its impact on IQ:
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 1. The first issue of the current DSL is that, there 
>>>>>>>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>>>>>>>> inconsistency upon
>>>>>>>>>>>>>>>>>>>>>>>>> whether / how KTables should be materialized:
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> a) in many cases the library HAS TO materialize
>>>>>> KTables no
>>>>>>>>>>>>>>>>>>>>>>>>> matter what,
>>>>>>>>>>>>>>>>>>>>>>>>> e.g. KStream / KTable aggregation resulted KTables,
>>>>>> and hence
>>>>>>>>>>>>>>> we
>>>>>>>>>>>>>>>>>>>>>>>>> enforce
>>>>>>>>>>>>>>>>>>>>>>>>> users to provide store names and throw RTE if it is
>>>>>> null;
>>>>>>>>>>>>>>>>>>>>>>>>> b) in some other cases, the KTable can be materialized
>>>>>> or
>>>>>>>>>>>> not;
>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>>>>>>>>>> example in KStreamBuilder.table(), store names can be
>>>>>>>>>>>> nullable
>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>>>>>> in which
>>>>>>>>>>>>>>>>>>>>>>>>> case the KTable would not be materialized;
>>>>>>>>>>>>>>>>>>>>>>>>> c) in some other cases, the KTable will never be
>>>>>>>>>>>> materialized,
>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>>>>>>>>>> example KTable.filter() resulted KTables, and users
>>>>>> have no
>>>>>>>>>>>>>>>> options to
>>>>>>>>>>>>>>>>>>>>>>>>> enforce them to be materialized;
>>>>>>>>>>>>>>>>>>>>>>>>> d) this is related to a), where some KTables are
>>>>>> required to
>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>>>>>>>>> materialized, but we do not enforce users to provide a
>>>>>> state
>>>>>>>>>>>>>>>> store
>>>>>>>>>>>>>>>>>>>>>>>>> name,
>>>>>>>>>>>>>>>>>>>>>>>>> e.g. KTables involved in joins; a RTE will be thrown
>>>>>> not
>>>>>>>>>>>>>>>>>>>>>>>>> immediately but
>>>>>>>>>>>>>>>>>>>>>>>>> later in this case.
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 2. The second issue is related to IQ, where state
>>>>>> stores are
>>>>>>>>>>>>>>>>>>>>>>>>> accessed by
>>>>>>>>>>>>>>>>>>>>>>>>> their state stores; so only those KTable's that have
>>>>>>>>>>>>>>>> user-specified
>>>>>>>>>>>>>>>>>>>>>>>>> state
>>>>>>>>>>>>>>>>>>>>>>>>> stores will be queryable. But because of 1) above, 
>>>>>>>>>>>>>>>>>>>>>>>>> many
>>>>>>>>>>>> stores
>>>>>>>>>>>>>>>> may
>>>>>>>>>>>>>>>>>>>>>>>>> not be
>>>>>>>>>>>>>>>>>>>>>>>>> interested to users for IQ but they still need to
>>>>>> provide a
>>>>>>>>>>>>>>>>>>>>>>>>> (dummy?) state
>>>>>>>>>>>>>>>>>>>>>>>>> store name for them; while on the other hand users
>>>>>> cannot
>>>>>>>>>>>> query
>>>>>>>>>>>>>>>>>>>>>>>>> some state
>>>>>>>>>>>>>>>>>>>>>>>>> stores, e.g. the ones generated by KTable.filter() as
>>>>>> there
>>>>>>>>>>>> is
>>>>>>>>>>>>>>> no
>>>>>>>>>>>>>>>>>>>>>>>>> APIs for
>>>>>>>>>>>>>>>>>>>>>>>>> them to specify a state store name.
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 3. We are aware from user feedbacks that such backend
>>>>>> details
>>>>>>>>>>>>>>>> would be
>>>>>>>>>>>>>>>>>>>>>>>>> better be abstracted away from the DSL layer, where 
>>>>>>>>>>>>>>>>>>>>>>>>> app
>>>>>>>>>>>>>>>> developers
>>>>>>>>>>>>>>>>>>>>>>>>> should
>>>>>>>>>>>>>>>>>>>>>>>>> just focus on processing logic, while state stores
>>>>>> along with
>>>>>>>>>>>>>>>> their
>>>>>>>>>>>>>>>>>>>>>>>>> changelogs etc would better be in a different
>>>>>> mechanism; same
>>>>>>>>>>>>>>>>>>>>>>>>> arguments
>>>>>>>>>>>>>>>>>>>>>>>>> have been discussed for serdes / windowing triggers as
>>>>>> well.
>>>>>>>>>>>>>>> For
>>>>>>>>>>>>>>>>>>>>>>>>> serdes
>>>>>>>>>>>>>>>>>>>>>>>>> specifically, we had a very long discussion about it
>>>>>> and
>>>>>>>>>>>>>>>> concluded
>>>>>>>>>>>>>>>>>>>>>>>>> that, at
>>>>>>>>>>>>>>>>>>>>>>>>> least in Java7, we cannot completely abstract serde
>>>>>> away in
>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>> DSL, so we
>>>>>>>>>>>>>>>>>>>>>>>>> choose the other extreme to enforce users to be
>>>>>> completely
>>>>>>>>>>>>>>> aware
>>>>>>>>>>>>>>>> of
>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>> serde requirements when some KTables may need to be
>>>>>>>>>>>>>>> materialized
>>>>>>>>>>>>>>>> vis
>>>>>>>>>>>>>>>>>>>>>>>>> overloaded API functions. While for the state store
>>>>>> names, I
>>>>>>>>>>>>>>> feel
>>>>>>>>>>>>>>>>>>>>>>>>> it is a
>>>>>>>>>>>>>>>>>>>>>>>>> different argument than serdes (details below).
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> So to me, for either materialize() v.s. overloaded
>>>>>> functions
>>>>>>>>>>>>>>>>>>>>>>>>> directions,
>>>>>>>>>>>>>>>>>>>>>>>>> the first thing I'd like to resolve is the
>>>>>> inconsistency
>>>>>>>>>>>> issue
>>>>>>>>>>>>>>>>>>>>>>>>> mentioned
>>>>>>>>>>>>>>>>>>>>>>>>> above. So in either case: KTable materialization will
>>>>>> not be
>>>>>>>>>>>>>>>> affect
>>>>>>>>>>>>>>>>>>>>>>>>> by user
>>>>>>>>>>>>>>>>>>>>>>>>> providing state store name or not, but will only be
>>>>>> decided
>>>>>>>>>>>> by
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>> library
>>>>>>>>>>>>>>>>>>>>>>>>> when it is necessary. More specifically, only join
>>>>>> operator
>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>>>>>> builder.table() resulted KTables are not always
>>>>>> materialized,
>>>>>>>>>>>>>>> but
>>>>>>>>>>>>>>>>>>>>>>>>> are still
>>>>>>>>>>>>>>>>>>>>>>>>> likely to be materialized lazily (e.g. when
>>>>>> participated in a
>>>>>>>>>>>>>>>> join
>>>>>>>>>>>>>>>>>>>>>>>>> operator).
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> For overloaded functions that would mean:
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> a) we have an overloaded function for ALL operators
>>>>>> that
>>>>>>>>>>>> could
>>>>>>>>>>>>>>>>>>>>>>>>> result
>>>>>>>>>>>>>>>>>>>>>>>>> in a KTable, and allow it to be null (i.e. for the
>>>>>> function
>>>>>>>>>>>>>>>> without
>>>>>>>>>>>>>>>>>>>>>>>>> this
>>>>>>>>>>>>>>>>>>>>>>>>> param it is null by default);
>>>>>>>>>>>>>>>>>>>>>>>>> b) null-state-store-name do not indicate that a KTable
>>>>>> would
>>>>>>>>>>>>>>>>>>>>>>>>> not be
>>>>>>>>>>>>>>>>>>>>>>>>> materialized, but that it will not be used for IQ at
>>>>>> all
>>>>>>>>>>>>>>>> (internal
>>>>>>>>>>>>>>>>>>>>>>>>> state
>>>>>>>>>>>>>>>>>>>>>>>>> store names will be generated when necessary).
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> For materialize() that would mean:
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> a) we will remove state store names from ALL operators
>>>>>> that
>>>>>>>>>>>>>>>> could
>>>>>>>>>>>>>>>>>>>>>>>>> result in a KTable.
>>>>>>>>>>>>>>>>>>>>>>>>> b) KTables that not calling materialized do not
>>>>>> indicate that
>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>>>>>>>> KTable
>>>>>>>>>>>>>>>>>>>>>>>>> would not be materialized, but that it will not be
>>>>>> used for
>>>>>>>>>>>> IQ
>>>>>>>>>>>>>>>> at all
>>>>>>>>>>>>>>>>>>>>>>>>> (internal state store names will be generated when
>>>>>>>>>>>> necessary).
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> Again, in either ways the API itself does not "hint"
>>>>>> about
>>>>>>>>>>>>>>>> anything
>>>>>>>>>>>>>>>>>>>>>>>>> for
>>>>>>>>>>>>>>>>>>>>>>>>> materializing a KTable or not at all; it is still
>>>>>> purely
>>>>>>>>>>>>>>>> determined
>>>>>>>>>>>>>>>>>>>>>>>>> by the
>>>>>>>>>>>>>>>>>>>>>>>>> library when parsing the DSL for now.
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> Following these thoughts, I feel that 1) we should
>>>>>> probably
>>>>>>>>>>>>>>>> change
>>>>>>>>>>>>>>>>>>>>>>>>> the name
>>>>>>>>>>>>>>>>>>>>>>>>> "materialize" since it may be misleading to users as
>>>>>> what
>>>>>>>>>>>>>>>> actually
>>>>>>>>>>>>>>>>>>>>>>>>> happened
>>>>>>>>>>>>>>>>>>>>>>>>> behind the scene, to e.g. Damian suggested
>>>>>>>>>>>>>>> "queryableStore(String
>>>>>>>>>>>>>>>>>>>>>>>>> storeName)",
>>>>>>>>>>>>>>>>>>>>>>>>> which returns a QueryableStateStore, and can replace
>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>> `KafkaStreams.store` function; 2) comparing those two
>>>>>> options
>>>>>>>>>>>>>>>>>>>>>>>>> assuming we
>>>>>>>>>>>>>>>>>>>>>>>>> get rid of the misleading function name, I personally
>>>>>> favor
>>>>>>>>>>>> not
>>>>>>>>>>>>>>>>>>>>>>>>> adding more
>>>>>>>>>>>>>>>>>>>>>>>>> overloading functions as it keeps the API simpler.
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> Guozhang
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>> On Sat, Jan 28, 2017 at 2:32 PM, Jan Filipiak
>>>>>>>>>>>>>>>>>>>>>>>>> <jan.filip...@trivago.com>
>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> thanks for your mail, felt like this can clarify some
>>>>>>>>>>>> things!
>>>>>>>>>>>>>>>> The
>>>>>>>>>>>>>>>>>>>>>>>>>> thread
>>>>>>>>>>>>>>>>>>>>>>>>>> unfortunately split but as all branches close in on
>>>>>> what my
>>>>>>>>>>>>>>>>>>>>>>>>>> suggestion was
>>>>>>>>>>>>>>>>>>>>>>>>>> about Ill pick this to continue
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> Of course only the table the user wants to query
>>>>>> would be
>>>>>>>>>>>>>>>>>>>>>>>>>> materialized.
>>>>>>>>>>>>>>>>>>>>>>>>>> (retrieving the queryhandle implies materialisation).
>>>>>> So In
>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>> example of
>>>>>>>>>>>>>>>>>>>>>>>>>> KTable::filter if you call
>>>>>>>>>>>>>>>>>>>>>>>>>> getIQHandle on both tables only the one source that
>>>>>> is there
>>>>>>>>>>>>>>>> would
>>>>>>>>>>>>>>>>>>>>>>>>>> materialize and the QueryHandleabstraction would make
>>>>>> sure
>>>>>>>>>>>> it
>>>>>>>>>>>>>>>> gets
>>>>>>>>>>>>>>>>>>>>>>>>>> mapped
>>>>>>>>>>>>>>>>>>>>>>>>>> and filtered and what not uppon read as usual.
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> Of Course the Object you would retrieve would maybe
>>>>>> only
>>>>>>>>>>>> wrap
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>> storeName / table unique identifier and a way to
>>>>>> access the
>>>>>>>>>>>>>>>> streams
>>>>>>>>>>>>>>>>>>>>>>>>>> instance and then basically uses the same mechanism
>>>>>> that is
>>>>>>>>>>>>>>>>>>>>>>>>>> currently used.
>>>>>>>>>>>>>>>>>>>>>>>>>> From my point of view this is the least confusing way
>>>>>> for
>>>>>>>>>>>> DSL
>>>>>>>>>>>>>>>>>>>>>>>>>> users. If
>>>>>>>>>>>>>>>>>>>>>>>>>> its to tricky to get a hand on the streams instance
>>>>>> one
>>>>>>>>>>>> could
>>>>>>>>>>>>>>>> ask
>>>>>>>>>>>>>>>>>>>>>>>>>> the user
>>>>>>>>>>>>>>>>>>>>>>>>>> to pass it in before executing queries, therefore
>>>>>> making
>>>>>>>>>>>> sure
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>> streams
>>>>>>>>>>>>>>>>>>>>>>>>>> instance has been build.
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> The effort to implement this is indeed some orders of
>>>>>>>>>>>>>>> magnitude
>>>>>>>>>>>>>>>>>>>>>>>>>> higher
>>>>>>>>>>>>>>>>>>>>>>>>>> than the overloaded materialized call. As long as I
>>>>>> could
>>>>>>>>>>>> help
>>>>>>>>>>>>>>>>>>>>>>>>>> getting a
>>>>>>>>>>>>>>>>>>>>>>>>>> different view I am happy.
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> Best Jan
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>> On 28.01.2017 09:36, Eno Thereska wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Jan,
>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>> I understand your concern. One implication of not
>>>>>> passing
>>>>>>>>>>>> any
>>>>>>>>>>>>>>>>>>>>>>>>>>> store name
>>>>>>>>>>>>>>>>>>>>>>>>>>> and just getting an IQ handle is that all KTables
>>>>>> would
>>>>>>>>>>>> need
>>>>>>>>>>>>>>>> to be
>>>>>>>>>>>>>>>>>>>>>>>>>>> materialised. Currently the store name (or proposed
>>>>>>>>>>>>>>>>>>>>>>>>>>> .materialize() call)
>>>>>>>>>>>>>>>>>>>>>>>>>>> act as hints on whether to materialise the KTable or
>>>>>> not.
>>>>>>>>>>>>>>>>>>>>>>>>>>> Materialising
>>>>>>>>>>>>>>>>>>>>>>>>>>> every KTable can be expensive, although there are
>>>>>> some
>>>>>>>>>>>> tricks
>>>>>>>>>>>>>>>> one
>>>>>>>>>>>>>>>>>>>>>>>>>>> can play,
>>>>>>>>>>>>>>>>>>>>>>>>>>> e.g., have a virtual store rather than one backed by
>>>>>> a
>>>>>>>>>>>> Kafka
>>>>>>>>>>>>>>>> topic.
>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>> However, even with the above, after getting an IQ
>>>>>> handle,
>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>>> user would
>>>>>>>>>>>>>>>>>>>>>>>>>>> still need to use IQ APIs to query the state. As
>>>>>> such, we
>>>>>>>>>>>>>>> would
>>>>>>>>>>>>>>>>>>>>>>>>>>> still
>>>>>>>>>>>>>>>>>>>>>>>>>>> continue to be outside the original DSL so this
>>>>>> wouldn't
>>>>>>>>>>>>>>>> address
>>>>>>>>>>>>>>>>>>>>>>>>>>> your
>>>>>>>>>>>>>>>>>>>>>>>>>>> original concern.
>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>> So I read this suggestion as simplifying the APIs by
>>>>>>>>>>>> removing
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>>> store
>>>>>>>>>>>>>>>>>>>>>>>>>>> name, at the cost of having to materialise every
>>>>>> KTable.
>>>>>>>>>>>> It's
>>>>>>>>>>>>>>>>>>>>>>>>>>> definitely an
>>>>>>>>>>>>>>>>>>>>>>>>>>> option we'll consider as part of this KIP.
>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>>>>>>>>>>>>>>>> Eno
>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>> On 28 Jan 2017, at 06:49, Jan Filipiak <
>>>>>>>>>>>>>>>> jan.filip...@trivago.com>
>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi Exactly
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> I know it works from the Processor API, but my
>>>>>> suggestion
>>>>>>>>>>>>>>>> would
>>>>>>>>>>>>>>>>>>>>>>>>>>>> prevent
>>>>>>>>>>>>>>>>>>>>>>>>>>>> DSL users dealing with storenames what so ever.
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> In general I am pro switching between DSL and
>>>>>> Processor
>>>>>>>>>>>> API
>>>>>>>>>>>>>>>>>>>>>>>>>>>> easily. (In
>>>>>>>>>>>>>>>>>>>>>>>>>>>> my Stream applications I do this a lot with
>>>>>> reflection and
>>>>>>>>>>>>>>>>>>>>>>>>>>>> instanciating
>>>>>>>>>>>>>>>>>>>>>>>>>>>> KTableImpl) Concerning this KIP all I say is that
>>>>>> there
>>>>>>>>>>>>>>> should
>>>>>>>>>>>>>>>>>>>>>>>>>>>> be a DSL
>>>>>>>>>>>>>>>>>>>>>>>>>>>> concept of "I want to expose this __KTable__. This
>>>>>> can be
>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Method like
>>>>>>>>>>>>>>>>>>>>>>>>>>>> KTable::retrieveIQHandle():InteractiveQueryHandle,
>>>>>> the
>>>>>>>>>>>>>>> table
>>>>>>>>>>>>>>>>>>>>>>>>>>>> would know
>>>>>>>>>>>>>>>>>>>>>>>>>>>> to materialize, and the user had a reference to the
>>>>>> "store
>>>>>>>>>>>>>>>> and the
>>>>>>>>>>>>>>>>>>>>>>>>>>>> distributed query mechanism by the Interactive 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Query
>>>>>>>>>>>> Handle"
>>>>>>>>>>>>>>>>>>>>>>>>>>>> under the hood
>>>>>>>>>>>>>>>>>>>>>>>>>>>> it can use the same mechanism as the PIP people
>>>>>> again.
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> I hope you see my point J
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best Jan
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> #DeathToIQMoreAndBetterConnectors :)
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>> On 27.01.2017 21:59, Matthias J. Sax wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jan,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the IQ feature is not limited to Streams DSL but
>>>>>> can also
>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> used for
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Stores used in PAPI. Thus, we need a mechanism
>>>>>> that does
>>>>>>>>>>>>>>> work
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> for PAPI
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and DSL.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Nevertheless I see your point and I think we could
>>>>>>>>>>>> provide
>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> better API
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> for KTable stores including the discovery of 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> remote
>>>>>>>>>>>> shards
>>>>>>>>>>>>>>> of
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the same
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> KTable.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> @Michael: Yes, right now we do have a lot of
>>>>>> overloads
>>>>>>>>>>>> and
>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>> am
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> not a
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> big fan of those -- I would rather prefer a 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> builder
>>>>>>>>>>>>>>> pattern.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> But that
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> might be a different discussion (nevertheless, if
>>>>>> we
>>>>>>>>>>>> would
>>>>>>>>>>>>>>>> aim
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> for a API
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> rework, we should get the changes with regard to
>>>>>> stores
>>>>>>>>>>>>>>> right
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> from the
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> beginning on, in order to avoid a redesign later
>>>>>> on.)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> something like:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> stream.groupyByKey()
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .window(TimeWindow.of(5000))
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .aggregate(...)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .withAggValueSerde(new CustomTypeSerde())
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .withStoreName("storeName);
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (This would also reduce JavaDoc redundancy --
>>>>>> maybe a
>>>>>>>>>>>>>>>> personal
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> pain
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> point right now :))
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -Matthias
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On 1/27/17 11:10 AM, Jan Filipiak wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Yeah,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Maybe my bad that I refuse to look into IQ as i
>>>>>> don't
>>>>>>>>>>>> find
>>>>>>>>>>>>>>>> them
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> anywhere
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> close to being interesting. The Problem IMO is
>>>>>> that
>>>>>>>>>>>> people
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> need to know
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the Store name), so we are working on different
>>>>>> levels
>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> achieve a
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> single goal.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> What is your peoples opinion on having a method 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> on
>>>>>>>>>>>> KTABLE
>>>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> returns
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> them something like a Keyvalue store. There is of
>>>>>> course
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> problems like
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> "it cant be used before the streamthreads are
>>>>>> going and
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> groupmembership
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> is established..." but the benefit would be that
>>>>>> for the
>>>>>>>>>>>>>>>> user
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> there is
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> consistent way of saying "Hey I need it
>>>>>> materialized as
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> querries gonna
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> be comming" + already get a Thing that he can
>>>>>> execute
>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> querries on
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1 step.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> What I think is unintuitive here is you need to
>>>>>> say
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> materialize on this
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Ktable and then you go somewhere else and find
>>>>>> its store
>>>>>>>>>>>>>>>> name
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and then
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> you go to the kafkastreams instance and ask for
>>>>>> the
>>>>>>>>>>>> store
>>>>>>>>>>>>>>>> with
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> this
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> name.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> So one could the user help to stay in DSL land 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>> therefore
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> maybe
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> confuse him less.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best Jan
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> #DeathToIQMoreAndBetterConnectors :)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On 27.01.2017 16:51, Damian Guy wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I think Jan is saying that they don't always
>>>>>> need to be
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> materialized,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> i.e.,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> filter just needs to apply the ValueGetter, it
>>>>>> doesn't
>>>>>>>>>>>>>>>> need yet
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> another
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> physical state store.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Fri, 27 Jan 2017 at 15:49 Michael Noll <
>>>>>>>>>>>>>>>> mich...@confluent.io>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Like Damian, and for the same reasons, I am more
>>>>>> in
>>>>>>>>>>>> favor
>>>>>>>>>>>>>>>> of
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> overloading
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> methods rather than introducing 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> `materialize()`.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> FWIW, we already have a similar API setup for
>>>>>> e.g.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> `KTable#through(topicName, stateStoreName)`.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> A related but slightly different question is
>>>>>> what e.g.
>>>>>>>>>>>>>>> Jan
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Filipiak
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> mentioned earlier in this thread:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I think we need to explain more clearly why
>>>>>> KIP-114
>>>>>>>>>>>>>>>> doesn't
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> propose
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> seemingly simpler solution of always
>>>>>> materializing
>>>>>>>>>>>>>>>> tables/state
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> stores.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Fri, Jan 27, 2017 at 4:38 PM, Jan Filipiak <
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> jan.filip...@trivago.com>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Yeah its confusing, Why shoudn't it be
>>>>>> querable by
>>>>>>>>>>>> IQ?
>>>>>>>>>>>>>>> If
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> you uses
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ValueGetter of Filter it will apply the filter
>>>>>> and
>>>>>>>>>>>>>>>> should be
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> completely
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> transparent as to if another processor or IQ 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>> accessing
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> it? How
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> can
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> this
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> new method help?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I cannot see the reason for the additional
>>>>>>>>>>>> materialize
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> method being
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> required! Hence I suggest leave it alone.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> regarding removing the others I dont have
>>>>>> strong
>>>>>>>>>>>>>>> opinions
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and it
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> seems to
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> be unrelated.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Best Jan
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On 26.01.2017 20:48, Eno Thereska wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Forwarding this thread to the users list too
>>>>>> in case
>>>>>>>>>>>>>>>> people
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> would
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> like
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> comment. It is also on the dev list.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Eno
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Begin forwarded message:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> From: "Matthias J. Sax" <
>>>>>> matth...@confluent.io>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Subject: Re: [DISCUSS] KIP-114: KTable
>>>>>>>>>>>>>>> materialization
>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> improved
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> semantics
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Date: 24 January 2017 at 19:30:10 GMT
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> To: dev@kafka.apache.org
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Reply-To: dev@kafka.apache.org
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> That not what I meant by "huge impact".
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I refer to the actions related to
>>>>>> materialize a
>>>>>>>>>>>>>>> KTable:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> creating a
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> RocksDB store and a changelog topic -- users
>>>>>> should
>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> aware about
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> runtime implication and this is better
>>>>>> expressed by
>>>>>>>>>>>>>>> an
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> explicit
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> method
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> call, rather than implicitly triggered by
>>>>>> using a
>>>>>>>>>>>>>>>> different
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> overload of
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> a method.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -Matthias
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On 1/24/17 1:35 AM, Damian Guy wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I think your definition of a huge impact and
>>>>>> mine
>>>>>>>>>>>> are
>>>>>>>>>>>>>>>> rather
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> different
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;-P
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Overloading a few methods  is not really a
>>>>>> huge
>>>>>>>>>>>>>>> impact
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> IMO. It is
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> also a
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> sacrifice worth making for readability,
>>>>>> usability of
>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>> API.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Mon, 23 Jan 2017 at 17:55 Matthias J.
>>>>>> Sax <
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> matth...@confluent.io>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I understand your argument, but do not
>>>>>> agree with
>>>>>>>>>>>>>>> it.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Your first version (even if the "flow" is
>>>>>> not as
>>>>>>>>>>>>>>>> nice)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> is more
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> explicit
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> than the second version. Adding a
>>>>>> stateStoreName
>>>>>>>>>>>>>>>> parameter
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> is quite
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> implicit but has a huge impact -- thus, I
>>>>>> prefer
>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> rather more
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> verbose
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> but explicit version.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -Matthias
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On 1/23/17 1:39 AM, Damian Guy wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I'm not a fan of materialize. I think it
>>>>>>>>>>>> interrupts
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> flow,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> i.e,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> table.mapValue(..).materialize().join(..).materialize()
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> compared to:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> table.mapValues(..).join(..)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I know which one i prefer.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> My preference is stil to provide
>>>>>> overloaded
>>>>>>>>>>>>>>> methods
>>>>>>>>>>>>>>>> where
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> people can
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> specify the store names if they want,
>>>>>> otherwise
>>>>>>>>>>>> we
>>>>>>>>>>>>>>>> just
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> generate
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> them.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Mon, 23 Jan 2017 at 05:30 Matthias J. Sax
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <matth...@confluent.io
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> thanks for the KIP Eno! Here are my 2
>>>>>> cents:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1) I like Guozhang's proposal about
>>>>>> removing
>>>>>>>>>>>>>>> store
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> name from
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> all
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> KTable
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> methods and generate internal names
>>>>>> (however, I
>>>>>>>>>>>>>>>> would
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> do this
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> as
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> overloads). Furthermore, I would not
>>>>>> force
>>>>>>>>>>>> users
>>>>>>>>>>>>>>>> to call
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .materialize()
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> if they want to query a store, but add
>>>>>> one more
>>>>>>>>>>>>>>>> method
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .stateStoreName()
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> that returns the store name if the
>>>>>> KTable is
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> materialized.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thus,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> also
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .materialize() must not necessarily have a
>>>>>> parameter
>>>>>>>>>>>>>>>> storeName
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (ie,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> we
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> should have some overloads here).
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I would also not allow to provide a
>>>>>> null store
>>>>>>>>>>>>>>>> name (to
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> indicate no
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> materialization if not necessary) but
>>>>>> throw an
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> exception.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> This yields some simplification (see
>>>>>> below).
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2) I also like Guozhang's proposal about
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> KStream#toTable()
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 3)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 3. What will happen when you call
>>>>>> materialize
>>>>>>>>>>>> on
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> KTable
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> that is
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> already
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> materialized? Will it create another
>>>>>>>>>>>> StateStore
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (providing
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> name
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> different), throw an Exception?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Currently an exception is thrown, but
>>>>>> see
>>>>>>>>>>>> below.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> If we follow approach (1) from
>>>>>> Guozhang, there
>>>>>>>>>>>>>>> is
>>>>>>>>>>>>>>>> no
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> need to
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> worry
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> about
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> a second materialization and also no
>>>>>> exception
>>>>>>>>>>>>>>>> must be
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> throws. A
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> call to
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .materialize() basically sets a
>>>>>> "materialized
>>>>>>>>>>>>>>>> flag" (ie,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> idempotent
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> operation) and sets a new name.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 4)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Rename toStream() to toKStream() for
>>>>>>>>>>>> consistency.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Not sure whether that is really
>>>>>> required. We
>>>>>>>>>>>>>>> also
>>>>>>>>>>>>>>>> use
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> `KStreamBuilder#stream()` and
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> `KStreamBuilder#table()`, for
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> example,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> don't care about the "K" prefix.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Eno's reply:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I think changing it to `toKStream`
>>>>>> would make
>>>>>>>>>>>> it
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> absolutely
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> clear
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> what
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> we are converting it to.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I'd say we should probably change the
>>>>>>>>>>>>>>>> KStreamBuilder
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> methods
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (but
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> not
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> in
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> this KIP).
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I would keep #toStream(). (see below)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 5) We should not remove any methods but
>>>>>> only
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> deprecate them.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> A general note:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I do not understand your comments
>>>>>> "Rejected
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Alternatives". You
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> say
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> "Have
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the KTable be the materialized view" was
>>>>>>>>>>>>>>> rejected.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> But your
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> KIP
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> actually
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> does exactly this -- the changelog
>>>>>> abstraction
>>>>>>>>>>>> of
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> KTable is
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> secondary
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> after those changes and the "view" abstraction
>>>>>> is
>>>>>>>>>>>> what
>>>>>>>>>>>>>>> a
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> KTable is.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> And
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> just to be clear, I like this a lot:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - it aligns with the name KTable
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - is aligns with stream-table-duality
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - it aligns with IQ
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I would say that a KTable is a "view
>>>>>>>>>>>> abstraction"
>>>>>>>>>>>>>>>> (as
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> materialization is
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> optional).
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -Matthias
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On 1/22/17 5:05 PM, Guozhang Wang wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thanks for the KIP Eno, I have a few
>>>>>> meta
>>>>>>>>>>>>>>> comments
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> and a few
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> detailed
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> comments:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1. I like the materialize() function in
>>>>>>>>>>>> general,
>>>>>>>>>>>>>>>> but
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I would
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> like
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> see
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> how other KTable functions should be
>>>>>> updated
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> accordingly. For
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> example,
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>>> -- 
>>>>> -- Guozhang
>>>> 
>>> 
>> 
> 

Reply via email to