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