We already have GlobalKTable and i can't rename KGroupedStream, which really should be GroupedKStream. So I think we should name new things correctly, i.e., WindowedKStream etc and fix the others when we can.
On Wed, 23 Aug 2017 at 20:38 Matthias J. Sax <matth...@confluent.io> wrote: > About KGroupedStream vs GroupedKStream: shouldn't we keep the naming > convention consistent? And if we change the naming schema just change > all at once? I personally don't care which naming scheme is better, but > I think consistency is super important! > > About Bill's comment: I agree, and had a similar thought. > > > -Matthias > > On 8/23/17 12:24 PM, Bill Bejeck wrote: > > Thanks for all the work on this KIP Damian. > > > > Both `Produced` and `Joined` have a `with` method accepting all > parameters, > > but `Consumed` doesn't. Should we add one for consistency? > > > > Thanks, > > Bill > > > > On Wed, Aug 23, 2017 at 4:15 AM, Damian Guy <damian....@gmail.com> > wrote: > > > >> KIP has been updated. thanks > >> > >> On Wed, 23 Aug 2017 at 09:10 Damian Guy <damian....@gmail.com> wrote: > >> > >>> Hi Matthias, > >>> > >>> > >>>> KStream: > >>>> leftJoin and outerJoin for KStream/KTable join should not have > >>>> `JoinWindows` parameter > >>>> > >>>> Thanks! > >>> > >>> > >>>> > >>>> Nit: TopologyBuilder -> Topology > >>>> > >>>> Ack > >>> > >>> > >>>> Nit: new class Serialized list static method #with twice > >>>> > >>>> Ack > >>> > >>> > >>>> WindowedKStream -> for consistency we should either have > GroupedKStream > >>>> or KWindowedStream... (similar argument for SessionWindowedKStream) > >>>> > >>>> We can't rename KGroupedStream -> GroupedKStream without breaking > >>> compatibility. So we are stuck with it for now. Hopefully in the future > >> we > >>> can rename KGroupedStream to GroupedKStream. > >>> > >>> > >>>> > >>>> KGroupedStream > >>>> -> why do we use a different name for `sessionWindowedBy()` -- seems > to > >>>> be cleaner to call both methods `windowedBy()` > >>>> > >>>> > >>> I beg to differ that it is cleaner either way! > >>> > >>> > >>>> > >>>> StreamsBuilder#stream -> parameter order is confusing... We should > have > >>>> Pattern as second parameter to align both methods. > >>>> > >>>> Ack > >>> > >>> > >>>> StreamsBuilder#table/globalTable -> move parameter `Consumed` as first > >>>> parameter to align with `#stream` > >>>> > >>>> > >>>> Ack > >>> > >>>> Produced#with(Serde, Serde) > >>>> Produced#with(StreamPartitioner, Serde, Serde) > >>>> -> should StreamPartitioner be the third argument instead of the > first? > >>>> > >>>> Sure > >>> > >>>> > >>>> Consumed: > >>>> Why do we need 3 different names for the 3 static methods? I would all > >>>> of them just call `with()`. Current names sound clumsy to me. And a > >>>> plain `with()` also aligns with the naming of static methods of other > >>>> classes. > >>>> > >>> > >>> I disagree that the names sound clumsy! But yes they should be aligned > >>> with the others. > >>> > >>> > >>>> > >>>> > >>>> I guess we are also deprecation a bunch of method for > >>>> KStream/KTable/KGroupedStream/KGroupedTable and should mention which > >>>> one? There is just one sentence "Deprecate the existing overloads.", > but > >>>> we don't deprecate all existing once. I personally don't care to much > if > >>>> we spell deprecated method out explicitly, but right now it's not > >>>> consistent as we only list methods we add. > >>>> > >>>> > >>> > >>>> Should we deprecate `StateStoreSupplier`? > >>>> > >>> Yep > >>> > >>>> > >>>> > >>>> -Matthias > >>>> > >>>> > >>>> > >>>> On 8/22/17 6:55 AM, Damian Guy wrote: > >>>>> I've just updated the KIP with some additional changes targeted at > >>>>> StreamsBuilder > >>>>> > >>>>> Thanks, > >>>>> Damian > >>>>> > >>>>> On Thu, 10 Aug 2017 at 12:59 Damian Guy <damian....@gmail.com> > wrote: > >>>>> > >>>>>> > >>>>>>> Got it, thanks. > >>>>>>> > >>>>>>> Does it still make sense to have one static constructors for each > >>>> spec, > >>>>>>> with one constructor having only one parameter to make it more > >> usable, > >>>>>>> i.e. > >>>>>>> as a user I do not need to give all parameters if I only want to > >>>> override > >>>>>>> one of them? Maybe we can just name the constructors as `with` but > >>>> I'm not > >>>>>>> sure if Java distinguish: > >>>>>>> > >>>>>>> public static <K, V> Produced<K, V> with(final Serde<K> keySerde) > >>>>>>> public static <K, V> Produced<K, V> with(final Serde<V> valueSerde) > >>>>>>> > >>>>>>> as two function signatures. > >>>>>>> > >>>>>>> > >>>>>> No that won't work. That is why we have all options, i.e., on > Produce > >>>>>> public static <K, V> Produced<K, V> with(final Serde<K> keySerde, > >>>> final Serde<V> > >>>>>> valueSerde) > >>>>>> public static <K, V> Produced<K, V> with(final StreamPartitioner<K, > >> V> > >>>>>> partitioner, final Serde<K> keySerde, final Serde<V> valueSerde) > >>>>>> public static <K, V> Produced<K, V> keySerde(final Serde<K> > keySerde) > >>>>>> public static <K, V> Produced<K, V> valueSerde(final Serde<V> > >>>> valueSerde) > >>>>>> public static <K, V> Produced<K, V> streamPartitioner(final > >>>> StreamPartitioner<K, > >>>>>> V> partitioner) > >>>>>> > >>>>>> So if you only want to use one you can just use the function that > >> takes > >>>>>> one argument. > >>>>>> > >>>>>>> > >>>>>>> Guozhang > >>>>>>> > >>>>>>> > >>>>>>> On Wed, Aug 9, 2017 at 6:20 AM, Damian Guy <damian....@gmail.com> > >>>> wrote: > >>>>>>> > >>>>>>>> On Tue, 8 Aug 2017 at 20:11 Guozhang Wang <wangg...@gmail.com> > >>>> wrote: > >>>>>>>> > >>>>>>>>> Damian, > >>>>>>>>> > >>>>>>>>> Thanks for the proposal, I had a few comments on the APIs: > >>>>>>>>> > >>>>>>>>> 1. Printed#withFile seems not needed, as users should always spec > >> if > >>>>>>> it > >>>>>>>> is > >>>>>>>>> to sysOut or to File at the beginning. In addition as a second > >>>>>>> thought, I > >>>>>>>>> think serdes are not useful for prints anyways since we assume > >>>>>>> `toString` > >>>>>>>>> is provided except for byte arrays, in which we will special > >> handle > >>>>>>> it. > >>>>>>>>> > >>>>>>>>> > >>>>>>>> +1 > >>>>>>>> > >>>>>>>> > >>>>>>>>> Another comment about Printed in general is it differs with other > >>>>>>> options > >>>>>>>>> that it is a required option than optional one, since it includes > >>>>>>>> toSysOut > >>>>>>>>> / toFile specs; what are the pros and cons for including these > two > >>>> in > >>>>>>> the > >>>>>>>>> option and hence make it a required option than leaving them at > >> the > >>>>>>> API > >>>>>>>>> layer and make Printed as optional for mapper / label only? > >>>>>>>>> > >>>>>>>>> > >>>>>>>> It isn't required as we will still have the no-arg print() which > >> will > >>>>>>> just > >>>>>>>> go to sysout as it does now. > >>>>>>>> > >>>>>>>> > >>>>>>>>> > >>>>>>>>> 2.1 KStream#through / to > >>>>>>>>> > >>>>>>>>> We should have an overloaded function without Produced? > >>>>>>>>> > >>>>>>>> > >>>>>>>> Yes - we already have those so they are not part of the KIP, i.e, > >>>>>>>> through(topic) > >>>>>>>> > >>>>>>>> > >>>>>>>>> > >>>>>>>>> 2.2 KStream#groupBy / groupByKey > >>>>>>>>> > >>>>>>>>> We should have an overloaded function without Serialized? > >>>>>>>>> > >>>>>>>> > >>>>>>>> Yes, as above > >>>>>>>> > >>>>>>>>> > >>>>>>>>> 2.3 KGroupedStream#count / reduce / aggregate > >>>>>>>>> > >>>>>>>>> We should have an overloaded function without Materialized? > >>>>>>>>> > >>>>>>>> > >>>>>>>> As above > >>>>>>>> > >>>>>>>>> > >>>>>>>>> 2.4 KStream#join > >>>>>>>>> > >>>>>>>>> We should have an overloaded function without Joined? > >>>>>>>>> > >>>>>>>> > >>>>>>>> as above > >>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> 2.5 Each of KTable's operators: > >>>>>>>>> > >>>>>>>>> We should have an overloaded function without Produced / > >> Serialized > >>>> / > >>>>>>>>> Materialized? > >>>>>>>>> > >>>>>>>>> > >>>>>>>> as above > >>>>>>>> > >>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> 3.1 Produced: the static functions have overlaps, which seems not > >>>>>>>>> necessary. I'd suggest jut having the following three static with > >>>>>>> another > >>>>>>>>> three similar member functions: > >>>>>>>>> > >>>>>>>>> public static <K, V> Produced<K, V> withKeySerde(final Serde<K> > >>>>>>> keySerde) > >>>>>>>>> > >>>>>>>>> public static <K, V> Produced<K, V> withValueSerde(final Serde<V> > >>>>>>>>> valueSerde) > >>>>>>>>> > >>>>>>>>> public static <K, V> Produced<K, V> withStreamPartitioner(final > >>>>>>>>> StreamPartitioner<K, V> partitioner) > >>>>>>>>> > >>>>>>>>> The key idea is that by using the same function name string for > >>>> static > >>>>>>>>> constructor and member functions, users do not need to remember > >> what > >>>>>>> are > >>>>>>>>> the differences but can call these functions with any ordering > >> they > >>>>>>> want, > >>>>>>>>> and later calls on the same spec will win over early calls. > >>>>>>>>> > >>>>>>>>> > >>>>>>>> That would be great if java supported it, but it doesn't. You > can't > >>>> have > >>>>>>>> static an member functions with the same signature. > >>>>>>>> > >>>>>>>> > >>>>>>>>> > >>>>>>>>> 3.2 Serialized: similarly > >>>>>>>>> > >>>>>>>>> public static <K, V> Serialized<K, V> withKeySerde(final Serde<K> > >>>>>>>> keySerde) > >>>>>>>>> > >>>>>>>>> public static <K, V> Serialized<K, V> withValueSerde(final > >> Serde<V> > >>>>>>>>> valueSerde) > >>>>>>>>> > >>>>>>>>> public Serialized<K, V> withKeySerde(final Serde<K> keySerde) > >>>>>>>>> > >>>>>>>>> public Serialized<K, V> withValueSerde(final Serde valueSerde) > >>>>>>>>> > >>>>>>>> > >>>>>>>> as above > >>>>>>>> > >>>>>>>> > >>>>>>>>> > >>>>>>>>> Also it has a final Serde<V> otherValueSerde in one of its static > >>>>>>>>> constructor, it that intentional? > >>>>>>>>> > >>>>>>>> > >>>>>>>> Nope: thanks. > >>>>>>>> > >>>>>>>>> > >>>>>>>>> 3.3. Joined: similarly, keep the static constructor signatures > the > >>>>>>> same > >>>>>>>> as > >>>>>>>>> its corresponding member fields. > >>>>>>>>> > >>>>>>>>> > >>>>>>>> As above > >>>>>>>> > >>>>>>>> > >>>>>>>>> 3.4 Materialized: it is a bit special, and I think we can keep > its > >>>>>>> static > >>>>>>>>> constructors with only two `as` as they are today.K > >>>>>>>>> > >>>>>>>>> > >>>>>>>> 4. Is there any modifications on StateStoreSupplier? Is it > replaced > >>>> by > >>>>>>>>> BytesStoreSupplier? Seems some more descriptions are lacking > here. > >>>>>>> Also > >>>>>>>> in > >>>>>>>>> > >>>>>>>>> > >>>>>>>> No modifications to StateStoreSupplier. It is superseceded by > >>>>>>>> BytesStoreSupplier. > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>>> public static <K, V, S extends StateStore> Materialized<K, V, S> > >>>>>>>>> as(final StateStoreSupplier<S> > >>>>>>>>> supplier) > >>>>>>>>> > >>>>>>>>> Is the parameter in type of BytesStoreSupplier? > >>>>>>>>> > >>>>>>>> > >>>>>>>> Yep - thanks > >>>>>>>> > >>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> Guozhang > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> On Thu, Jul 27, 2017 at 5:26 AM, Damian Guy < > damian....@gmail.com > >>> > >>>>>>>> wrote: > >>>>>>>>> > >>>>>>>>>> Updated link: > >>>>>>>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP- > >>>>>>>>>> 182%3A+Reduce+Streams+DSL+overloads+and+allow+easier+ > >>>>>>>>>> use+of+custom+storage+engines > >>>>>>>>>> > >>>>>>>>>> Thanks, > >>>>>>>>>> Damian > >>>>>>>>>> > >>>>>>>>>> On Thu, 27 Jul 2017 at 13:09 Damian Guy <damian....@gmail.com> > >>>>>>> wrote: > >>>>>>>>>> > >>>>>>>>>>> Hi, > >>>>>>>>>>> > >>>>>>>>>>> I've put together a KIP to make some changes to the > KafkaStreams > >>>>>>> DSL > >>>>>>>>> that > >>>>>>>>>>> will hopefully allow us to: > >>>>>>>>>>> 1) reduce the explosion of overloads > >>>>>>>>>>> 2) add new features without having to continue adding more > >>>>>>> overloads > >>>>>>>>>>> 3) provide simpler ways for people to use custom storage > engines > >>>>>>> and > >>>>>>>>> wrap > >>>>>>>>>>> them with logging, caching etc if desired > >>>>>>>>>>> 4) enable per-operator caching rather than global caching > >> without > >>>>>>>>> having > >>>>>>>>>>> to resort to supplying a StateStoreSupplier when you just want > >> to > >>>>>>>> turn > >>>>>>>>>>> caching off. > >>>>>>>>>>> > >>>>>>>>>>> The KIP is here: > >>>>>>>>>>> https://cwiki.apache.org/confluence/pages/viewpage. > >>>>>>>>>> action?pageId=73631309 > >>>>>>>>>>> > >>>>>>>>>>> Thanks, > >>>>>>>>>>> Damian > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> -- > >>>>>>>>> -- Guozhang > >>>>>>>>> > >>>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> > >>>>>>> -- > >>>>>>> -- Guozhang > >>>>>>> > >>>>>> > >>>>> > >>>> > >>>> > >> > > > >