Thanks for clarification. I see your point. Java varargs are problematic
in general IMHO as they force you to put them as last argument making
parameter ordering unnatural for some cases (as we have it currently in
the API).

Nevertheless, I think that reading a single topic is the most common
case and thus I would love to see the overloads as mentioned in my last
email in addition to the overloads taking a Collection of topics. Maybe
it's just personal taste -- I agree that the overhead of specifying a
singleton on not severe, but to me it still feels like a "step backward"
as reading a single topic should be the pattern for like 90% or more of
the cases.


-Matthias


On 8/24/17 12:03 PM, Guozhang Wang wrote:
> Matthias,
> 
> I think it's my bad that I did not post another comment on the mailing list
> while syncing with Damian. Here it is:
> 
> Regarding 1) above, a second thought on varargs: though I have not heard
> from anyone using multiple topics, it is also true that people will just
> keep silent until their APIs gets removed. So instead of keeping a single
> topic name in the constructor, it'd better to still allow users to pass
> multiple topics, as a Collection<String> topic.
> 
> It does mean that users who would only want a single topic would feel
> inconvenient with "Collections.singleton(topic)", but I felt it is not too
> big of an issue. On the other hand KafkaConsumer also only allow
> `subscribe(Collection<String> topics)` so I'd suggest in this KIP we do not
> have two overloads of "stream(topic)" and "stream(topics)" and consider
> adding that as a syntax-sugar if it does become a big complaint.
> 
> 
> Guozhang
> 
> 
> 
> On Thu, Aug 24, 2017 at 11:32 AM, Matthias J. Sax <matth...@confluent.io>
> wrote:
> 
>> We now have
>>
>>> public synchronized <K, V> KStream<K, V> stream(final Collection<String>
>> topic, final Consumed<K, V> options)
>>
>> This would prevent so write code like
>>
>> builder.stream("topic", Consumers.with(...));
>>
>> I think, we need methods
>>
>> StreamsBuilder#stream(String topic);
>> StreamsBuilder#stream(String topic, Consumed options);
>>
>> Or do I miss anything?
>>
>>
>> -Matthias
>>
>>
>> On 8/24/17 1:53 AM, Damian Guy wrote:
>>> I've updated the kip to reflect Bill's comment and also to make
>>> StreamBuilder methods have topic as the first param, i.e.,
>>> StreamBuilder#stream no longer accepts varargs.
>>>
>>> On Thu, 24 Aug 2017 at 09:12 Damian Guy <damian....@gmail.com> wrote:
>>>
>>>> On Thu, 24 Aug 2017 at 02:49 Guozhang Wang <wangg...@gmail.com> wrote:
>>>>
>>>>> I have a couple of comments but otherwise it LGTM:
>>>>>
>>>>> 1. For these two functions in StreamsBuilder, the topic String is set
>> as
>>>>> the second parameter in between of two options. Would that be better
>> to be
>>>>> set as the first or the last one instead?
>>>>>
>>>>> It would be better as the first, but then it is different to the
>>>> #streams() methods due to varargs.
>>>>
>>>>
>>>>> public synchronized <K, V> KTable<K, V> table(final Consumed<K, V>
>>>>> consumed, final String topic, final Materialized<K, V> materialized)
>>>>>
>>>>> public synchronized <K, V> GlobalKTable<K, V> globalTable(final
>>>>> Consumed<K,
>>>>> V> consumed, final String topic, final Materialized<K, V> materialized)
>>>>>
>>>>> I understand that we cannot do it for the first parameter because of
>> the
>>>>> vararg type. So I'd suggest either
>>>>>
>>>>> a) set it as the last parameter, but then it is inconsistent with other
>>>>> functions like these:
>>>>>
>>>>> void to(final String topic, final Produced<V, V> options);
>>>>>
>>>>> KTable<K, V> through(final String topic, final Materialized<K, V>
>>>>> options);
>>>>>
>>>>> b) only allow one single topic name parameter in
>> StreamsBuilder.stream()
>>>>> since in practice we do not see too many usages of multiple topics,
>> plus
>>>>> it
>>>>> can be semi-supported with "merge" as we move it from StreamsBuilder to
>>>>> KStream (KAFKA-5765),
>>>>>
>>>>> Perhaps this is the better approach
>>>>
>>>>
>>>>> 2. KGroupedStream's function:
>>>>>
>>>>> <VR> KTable<K, VR> aggregate(final Initializer<VR> initializer,
>>>>>                              final Aggregator<? super K, ? super V, VR>
>>>>> aggregator,
>>>>>                              final Serde<VR> aggValueSerde,
>>>>>                              final Materialized<K, VR, KeyValueStore<K,
>>>>> VR>> materialized);
>>>>>
>>>>> The "aggValueSerde" seems not needed?
>>>>>
>>>>> 3. +1 on `KGroupedStream` v.s. `GroupedKStream`. I think KGroupedStream
>>>>> was
>>>>> a bad name as a hind-sight. I personally feel we should just correct it
>>>>> with a new class and deprecate / remove the old one before 1.0.0, but
>> that
>>>>> could be in its own KIP.
>>>>>
>>>>>
>>>> The problem with this is that we'd need to add new `groupBy` and
>>>> `groupByKey` methods that return `GroupedKStream`, we can't change the
>>>> existing ones as that would break compatibility. So what would we name
>>>> these methods?
>>>>
>>>>
>>>>>
>>>>> Guozhang
>>>>>
>>>>>
>>>>>
>>>>> On Wed, Aug 23, 2017 at 1:01 PM, Damian Guy <damian....@gmail.com>
>> wrote:
>>>>>
>>>>>> 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
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> -- Guozhang
>>>>>
>>>>
>>>
>>
>>
> 
> 

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to