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