Thanks Bill

On Wed, 23 Aug 2017 at 20:24 Bill Bejeck <bbej...@gmail.com> 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?
>
>
Yep, i'll update it


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

Reply via email to