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