Thanks Florian! I will take a look at the PR.


On Mon, Nov 12, 2018 at 2:44 PM Florian Hussonnois <fhussonn...@gmail.com>
wrote:

> Hi Matthias,
>
> Sorry I was absent for a while. I have started a new PR for this KIP. It is
> still in progress for now. I'm working on it.
> https://github.com/apache/kafka/pull/5909
>
> Le ven. 19 oct. 2018 à 20:13, Matthias J. Sax <matth...@confluent.io> a
> écrit :
>
> > What is the status of this KIP?
> >
> > -Matthias
> >
> > On 7/19/18 5:17 PM, Guozhang Wang wrote:
> > > Hello Florian,
> > >
> > > Sorry for being late... Found myself keep apologizing for late replies
> > > these days. But I do want to push this KIP's progress forward as I see
> it
> > > very important and helpful feature for extensibility.
> > >
> > > About the exceptions, I've gone through them and hopefully it is an
> > > exhaustive list:
> > >
> > > 1. KTable#toStream()
> > > 2. KStream#merge(KStream)
> > > 3. KStream#process() / transform() / transformValues()
> > > 4. KGroupedTable / KGroupedStream#count()
> > >
> > >
> > > Here's my reasoning:
> > >
> > > * It is okay not letting users to override the name for 1/2, since they
> > are
> > > too trivial to be useful for debugging, plus their processor names
> would
> > > not determine any related topic / store names.
> > > * For 3, I'd vote for adding overloaded functions with Named.
> > > * For 4, if users really want to name the processor she can call
> > > aggregate() instead, so I think it is okay to skip this case.
> > >
> > >
> > > Guozhang
> > >
> > >
> > >
> > > On Fri, Jul 6, 2018 at 3:06 PM, Florian Hussonnois <
> > fhussonn...@gmail.com>
> > > wrote:
> > >
> > >> Hi,
> > >>
> > >> The option #3 seems to be a good alternative and I find the API more
> > >> elegant (thanks John).
> > >>
> > >> But, we still have the need to overload some methods either because
> > they do
> > >> not accept an action instance or because they are translated to
> multiple
> > >> processors.
> > >>
> > >> For example, this is the case for methods branch() and merge(). We
> could
> > >> introduce a new interface Named (or maybe a different name ?) with a
> > method
> > >> name(). All action interfaces could extend this one to implement the
> > option
> > >> 3).
> > >> This would result by having the following overloads  :
> > >>
> > >> Stream<K, V> merge(final Named name, final KStream<K, V> stream);
> > >> KStream<K, V>[] branch(final Named name, final Predicate<? super K, ?
> > super
> > >> V>... predicates)
> > >>
> > >> N.B : The list above is  not exhaustive
> > >>
> > >> ---------
> > >> user's code will become :
> > >>
> > >>         KStream<String, Integer> stream = builder.stream("test");
> > >>         KStream<String, Integer>[] branches =
> > >> stream.branch(Named.with("BRANCH-STREAM-ON-VALUE"),
> > >>                 Predicate.named("STREAM-PAIR-VALUE", (k, v) -> v % 2
> ==
> > >> 0),
> > >>                 Predicate.named("STREAM-IMPAIR-VALUE", (k, v) -> v % 2
> > !=
> > >> 0));
> > >>
> > >>         branches[0].to("pair");
> > >>         branches[1].to("impair");
> > >> ---------
> > >>
> > >> This is a mix of the options 3) and 1)
> > >>
> > >> Le ven. 6 juil. 2018 à 22:58, Guozhang Wang <wangg...@gmail.com> a
> > écrit :
> > >>
> > >>> Hi folks, just to summarize the options we have so far:
> > >>>
> > >>> 1) Add a new "as" for KTable / KStream, plus adding new fields for
> > >>> operators-returns-void control objects (the current wiki's proposal).
> > >>>
> > >>> Pros: no more overloads.
> > >>> Cons: a bit departing with the current high-level API design of the
> > DSL,
> > >>> plus, the inconsistency between operators-returns-void and
> > >>> operators-not-return-voids.
> > >>>
> > >>> 2) Add overloaded functions for all operators, that accepts a new
> > control
> > >>> object "Described".
> > >>>
> > >>> Pros: consistent with current APIs.
> > >>> Cons: lots of overloaded functions to add.
> > >>>
> > >>> 3) Add another default function in the interface (thank you J8!) as
> > John
> > >>> proposed.
> > >>>
> > >>> Pros: no overloaded functions, no "Described".
> > >>> Cons: do we lose lambda functions really (seems not if we provide a
> > >> "named"
> > >>> for each func)? Plus "Described" may be more extensible than a single
> > >>> `String`.
> > >>>
> > >>>
> > >>> My principle of considering which one is better depends primarily on
> > "how
> > >>> to make advanced users easily use the additional API, while keeping
> it
> > >>> hidden from normal users who do not care at all". For that purpose I
> > >> think
> > >>> 3) > 1) > 2).
> > >>>
> > >>> One caveat though, is that changing the interface would not be
> > >>> binary-compatible though source-compatible, right? I.e. users need to
> > >>> recompile their code though no changes needed.
> > >>>
> > >>>
> > >>>
> > >>> Another note: for 3), if we really want to keep extensibility of
> > >> Described
> > >>> we could do sth. like:
> > >>>
> > >>> ---------
> > >>>
> > >>> public interface Predicate<K, V> {
> > >>>     // existing method
> > >>>     boolean test(final K key, final V value);
> > >>>
> > >>>     // new default method adds the ability to name the predicate
> > >>>     default Described described() {
> > >>>         return new Described(null);
> > >>>     }
> > >>> }
> > >>>
> > >>> ----------
> > >>>
> > >>> where user's code becomes:
> > >>>
> > >>> stream.filter(named("key", (k, v) -> true));   // note `named` now
> just
> > >>> sets a Described("key") in "described()".
> > >>>
> > >>> stream.filter(described(Described.as("key", /* any other fancy
> > >> parameters
> > >>> in the future*/), (k, v) -> true));
> > >>> ----------
> > >>>
> > >>>
> > >>> I feel it is not much likely that we'd need to extend it further in
> the
> > >>> future, so just a `String` would be good enough. But just listing all
> > >>> possibilities here.
> > >>>
> > >>>
> > >>>
> > >>> Guozhang
> > >>>
> > >>>
> > >>>
> > >>>
> > >>>
> > >>>
> > >>> On Fri, Jul 6, 2018 at 8:19 AM, John Roesler <j...@confluent.io>
> > wrote:
> > >>>
> > >>>> Hi Florian,
> > >>>>
> > >>>> Sorry I'm late to the party, but I missed the message originally.
> > >>>>
> > >>>> Regarding the names, it's probably a good idea to stick to the same
> > >>>> character set we're currently using: letters, numbers, and hyphens.
> > The
> > >>>> names are used in Kafka topics, files and folders, and RocksDB
> > >> databases,
> > >>>> and we also need them to work with the file systems of Windows,
> Linux,
> > >>> and
> > >>>> MacOS. My opinion is that with a situation like that, it's better to
> > be
> > >>>> conservative. It might also be a good idea to impose an upper limit
> on
> > >>> name
> > >>>> length to avoid running afoul of any of those systems.
> > >>>>
> > >>>> ---
> > >>>>
> > >>>> It seems like there's a small debate between 1) adding a new method
> to
> > >>>> KStream (and maybe KTable) to modify its name after the fact, or 2)
> > >>>> piggy-backing on the config objects where they exist and adding one
> > >> where
> > >>>> they don't. To me, #2 is the better alternative even though it
> > produces
> > >>>> more overloads and may be a bit awkward in places.
> > >>>>
> > >>>> The reason is simply that #1 is a high-level departure from the
> > >>>> graph-building paradigm we're using in the DSL. Consider:
> > >>>>
> > >>>> Graph.node1(config).node2(config)
> > >>>>
> > >>>> vs
> > >>>>
> > >>>> Graph.node1().config().node2().config()
> > >>>>
> > >>>> We could have done either, but we picked the former. I think it's
> > >>> probably
> > >>>> a good goal to try and stick to it so that developers can develop
> and
> > >>> rely
> > >>>> on their instincts for how the DSL will behave.
> > >>>>
> > >>>> I do want to present one alternative to adding new config objects:
> we
> > >> can
> > >>>> just add a "name()" method to all our "action" interfaces. For
> > example,
> > >>>> I'll demonstrate how we can add a "name" to Predicate and then use
> it
> > >> to
> > >>>> name a "KStream#filter" DSL operator:
> > >>>>
> > >>>> public interface Predicate<K, V> {
> > >>>>     // existing method
> > >>>>     boolean test(final K key, final V value);
> > >>>>
> > >>>>     // new default method adds the ability to name the predicate
> > >>>>     default String name() {
> > >>>>         return null;
> > >>>>     }
> > >>>>
> > >>>>     // new static factory method adds the ability to wrap lambda
> > >>> predicates
> > >>>> with a named predicate
> > >>>>     static <K, V> Predicate<K, V> named(final String name, final
> > >>>> Predicate<K, V> predicate) {
> > >>>>         return new Predicate<K, V>() {
> > >>>>             @Override
> > >>>>             public boolean test(final K key, final V value) {
> > >>>>                 return predicate.test(key, value);
> > >>>>             }
> > >>>>
> > >>>>             @Override
> > >>>>             public String name() {
> > >>>>                 return name;
> > >>>>             }
> > >>>>         };
> > >>>>     }
> > >>>> }
> > >>>>
> > >>>> Then, here's how it would look to use it:
> > >>>>
> > >>>> // Anonymous predicates continue to work just fine
> > >>>> stream.filter((k, v) -> true);
> > >>>>
> > >>>> // Devs can swap in a Predicate that implements the name() method.
> > >>>> stream.filter(new Predicate<Object, Object>() {
> > >>>>     @Override
> > >>>>     public boolean test(final Object key, final Object value) {
> > >>>>         return true;
> > >>>>     }
> > >>>>
> > >>>>     @Override
> > >>>>     public String name() {
> > >>>>         return "hey";
> > >>>>     }
> > >>>> });
> > >>>>
> > >>>> // Or they can wrap their existing lambda using the static factory
> > >> method
> > >>>> stream.filter(named("key", (k, v) -> true));
> > >>>>
> > >>>> Just a thought.
> > >>>>
> > >>>> Overall, I think it's really valuable to be able to name the
> > >> processors,
> > >>>> for all the reasons you mentioned in the KIP. So thank you for
> > >>> introducing
> > >>>> this!
> > >>>>
> > >>>> Thanks,
> > >>>> -John
> > >>>>
> > >>>> On Thu, Jul 5, 2018 at 4:53 PM Florian Hussonnois <
> > >> fhussonn...@gmail.com
> > >>>>
> > >>>> wrote:
> > >>>>
> > >>>>> Hi, thank you very much for all you suggestions. I've started to
> > >> update
> > >>>> the
> > >>>>> KIP (
> > >>>>>
> > >>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-
> > >>>> 307%3A+Allow+to+define+custom+processor+names+with+KStreams+DSL
> > >>>>> ).
> > >>>>> Also, I propose to rename the Processed class into Described - this
> > >>> will
> > >>>> be
> > >>>>> more meaningful (but this is just a detail).
> > >>>>>
> > >>>>> I'm OK to not enforcing uppercase for specific names but should we
> > >>> allow
> > >>>>> arbitrary names with whitespaces for example ? Currently, I can't
> > >> tell
> > >>> if
> > >>>>> this can lead to some side effects ?
> > >>>>>
> > >>>>> Le lun. 11 juin 2018 à 01:31, Matthias J. Sax <
> matth...@confluent.io
> > >>>
> > >>> a
> > >>>>> écrit :
> > >>>>>
> > >>>>>> Just catching up on this thread.
> > >>>>>>
> > >>>>>> I like the general idea. Couple of comments:
> > >>>>>>
> > >>>>>>  - I think that adding `Processed` (or maybe a different name?) is
> > >> a
> > >>>>>> valid proposal for stateless operators that only have a single
> > >>> overload
> > >>>>>> atm. It would align with the overall API design.
> > >>>>>>
> > >>>>>>  - for all methods with multiple existing overloads, we can
> > >> consider
> > >>> to
> > >>>>>> extend `Consumed`, `Produced`, `Materialized` etc to take an
> > >>> additional
> > >>>>>> processor name (not sure atm how elegant this is; we would need to
> > >>>>>> "play" with the API a little bit; the advantage would be, that we
> > >> do
> > >>>> not
> > >>>>>> add more overloads what seems to be key for this KIP)
> > >>>>>>
> > >>>>>>  - operators return void: while I agree that the "name first"
> > >>> chaining
> > >>>>>> idea is not very intuitive, it might still work, if we name the
> > >>> method
> > >>>>>> correctly (again, we would need to "play" with the API a little
> bit
> > >>> to
> > >>>>> see)
> > >>>>>>
> > >>>>>>  - for DSL operators that are translated to multiple nodes: it
> > >> might
> > >>>>>> make sense to use the specified operator name as prefix and add
> > >>>>>> reasonable suffixes. For example, a join translates into 5
> > >> operators
> > >>>>>> that could be name "name-left-store-processor",
> > >>>>>> "name-left-join-processor", "name-right-store-processor",
> > >>>>>> "name-right-join-processor", and "name-join-merge-processor" (or
> > >>>>>> similar). Maybe just using numbers might also work.
> > >>>>>>
> > >>>>>>  - I think, we should strip the number suffixes if a user provides
> > >>>> names
> > >>>>>>
> > >>>>>>  - enforcing upper case seems to be tricky: for example, we do not
> > >>>>>> enforce upper case for store names and we cannot easily change it
> > >> as
> > >>> it
> > >>>>>> would break compatibility -- thus, for consistency reasons we
> might
> > >>> not
> > >>>>>> want to do this
> > >>>>>>
> > >>>>>>  - for better understand of the impact of the KIP, it would be
> > >> quite
> > >>>>>> helpful if you would list all method names that are affected in
> the
> > >>> KIP
> > >>>>>> (ie, list all newly added overloads)
> > >>>>>>
> > >>>>>>
> > >>>>>> -Matthias
> > >>>>>>
> > >>>>>>
> > >>>>>> On 5/31/18 6:40 PM, Guozhang Wang wrote:
> > >>>>>>> Hi Florian,
> > >>>>>>>
> > >>>>>>> Re 1: I think changing the KStreamImpl / KTableImpl to allow
> > >>>> modifying
> > >>>>>> the
> > >>>>>>> processor name after the operator is fine as long as we do the
> > >>> check
> > >>>>>> again
> > >>>>>>> when modifying that. In fact, we are having some topology
> > >>>> optimization
> > >>>>>>> going on which may modify processor names in the final topology
> > >>>>> anyways (
> > >>>>>>> https://github.com/apache/kafka/pull/4983). Semantically I think
> > >>> it
> > >>>> is
> > >>>>>>> easier to understand to developers than "deciding the processor
> > >>> name
> > >>>>> for
> > >>>>>>> the next operator".
> > >>>>>>>
> > >>>>>>> Re 2: Yeah I'm thinking that for operators that translates to
> > >>>> multiple
> > >>>>>>> processor names, we can still use the provided "hint" to name the
> > >>>>>> processor
> > >>>>>>> names, e.g. for Joins we can name them as `join-foo-this` and
> > >>>>>>> `join-foo-that` etc if user calls `as("foo")`.
> > >>>>>>>
> > >>>>>>> Re 3: The motivation I had about removing the suffix is that it
> > >> has
> > >>>>> huge
> > >>>>>>> restrictions on topology compatibilities: consider if user code
> > >>>> added a
> > >>>>>> new
> > >>>>>>> operator, or library does some optimization to remove some
> > >>> operators,
> > >>>>> the
> > >>>>>>> suffix indexing may be changed for a large amount of the
> > >> processor
> > >>>>> names:
> > >>>>>>> this will in turn change the internal state store names, as well
> > >> as
> > >>>>>>> internal topic names as well, making the new application topology
> > >>> to
> > >>>> be
> > >>>>>>> incompatible with the ones. One rationale I had about this KIP is
> > >>>> that
> > >>>>>>> aligned this effort, moving forward we can allow users to
> > >> customize
> > >>>>>>> internal names so that they can still be reused even with
> > >> topology
> > >>>>>> changes
> > >>>>>>> (e.g. KIP-230), so I think removing the suffix index would be
> > >> more
> > >>>>>>> applicable in the long run.
> > >>>>>>>
> > >>>>>>>
> > >>>>>>>
> > >>>>>>> Guozhang
> > >>>>>>>
> > >>>>>>>
> > >>>>>>>
> > >>>>>>>
> > >>>>>>>
> > >>>>>>> On Thu, May 31, 2018 at 3:08 PM, Florian Hussonnois <
> > >>>>>> fhussonn...@gmail.com>
> > >>>>>>> wrote:
> > >>>>>>>
> > >>>>>>>> Hi ,
> > >>>>>>>> Thank you very much for your feedback.
> > >>>>>>>>
> > >>>>>>>> 1/
> > >>>>>>>> I agree that overloading most of the methods with a Processed is
> > >>> not
> > >>>>>> ideal.
> > >>>>>>>> I've started modifying the KStream API and I got to the same
> > >>>>> conclusion.
> > >>>>>>>> Also ading a new method directly to KStreamImpl and KTableImpl
> > >>>> classes
> > >>>>>>>> seems to be a better option.
> > >>>>>>>>
> > >>>>>>>> However a processor name cannot be redefined after calling an
> > >>>> operator
> > >>>>>> (or
> > >>>>>>>> maybe I miss something in the code).
> > >>>>>>>> From my understanding, this will only set the KStream name
> > >>> property
> > >>>>> not
> > >>>>>> the
> > >>>>>>>> processor name previsouly added to the topology builder -
> > >> leading
> > >>> to
> > >>>>>>>> InvalidTopology exception.
> > >>>>>>>>
> > >>>>>>>> So the new method should actually defines the name of the next
> > >>>>>> processor :
> > >>>>>>>> Below is an example :
> > >>>>>>>>
> > >>>>>>>> *stream.as <http://stream.as
> > >>>> (Processed.name("MAPPE_TO_UPPERCASE")*
> > >>>>>>>> *          .map( (k, v) -> KeyValue.pair(k, v.toUpperCase()))*
> > >>>>>>>>
> > >>>>>>>> I think this approach could solve the cases for methods
> > >> returning
> > >>>>> void ?
> > >>>>>>>>
> > >>>>>>>> Regarding this new method we have two possible implementations :
> > >>>>>>>>
> > >>>>>>>>    1. Adding a method like : withName(String processorName)
> > >>>>>>>>    2. or adding a method accepting an Processed object :
> > >>>>> as(Processed).
> > >>>>>>>>
> > >>>>>>>> I think solution 2. is preferable as the Processed class could
> > >> be
> > >>>>>> enriched
> > >>>>>>>> further (in futur).
> > >>>>>>>>
> > >>>>>>>> 2/
> > >>>>>>>> As Guozhang said some operators add internal processors.
> > >>>>>>>> For example the branch() method create one KStreamBranch
> > >> processor
> > >>>> to
> > >>>>>> route
> > >>>>>>>> records and one KStreamPassThrough processor for each branch.
> > >>>>>>>> In that situation only the parent processor can be named. For
> > >>>> children
> > >>>>>>>> processors we could keep the current behaviour that add a suffix
> > >>>> (i.e
> > >>>>>>>> KSTREAM-BRANCHCHILD-)
> > >>>>>>>>
> > >>>>>>>> This also the case for the join() method that result to adding
> > >>>>> multiple
> > >>>>>>>> processors to the topology (windowing, left/right joins and a
> > >>> merge
> > >>>>>>>> processor).
> > >>>>>>>> I think, like for the branch method users could only define a
> > >>>>> processor
> > >>>>>>>> name prefix.
> > >>>>>>>>
> > >>>>>>>> 3/
> > >>>>>>>> I think we should  still added a suffix like "-0000000000" to
> > >>>>> processor
> > >>>>>>>> name and enforce uppercases as this will keep some consistency
> > >>> with
> > >>>>> the
> > >>>>>>>> ones generated by the API.
> > >>>>>>>>
> > >>>>>>>> 4/
> > >>>>>>>> Yes, the KTable interface should be modified like KStream to
> > >> allow
> > >>>>>> custom
> > >>>>>>>> processor names definition.
> > >>>>>>>>
> > >>>>>>>> Thanks,
> > >>>>>>>>
> > >>>>>>>>
> > >>>>>>>> Le jeu. 31 mai 2018 à 19:18, Damian Guy <damian....@gmail.com>
> > >> a
> > >>>>> écrit
> > >>>>>> :
> > >>>>>>>>
> > >>>>>>>>> Hi Florian,
> > >>>>>>>>>
> > >>>>>>>>> Thanks for the KIP. What about KTable and other DSL interfaces?
> > >>>> Will
> > >>>>>> they
> > >>>>>>>>> not want to be able to do the same thing?
> > >>>>>>>>> It would be good to see a complete set of the public API
> > >> changes.
> > >>>>>>>>>
> > >>>>>>>>> Cheers,
> > >>>>>>>>> Damian
> > >>>>>>>>>
> > >>>>>>>>> On Wed, 30 May 2018 at 19:45 Guozhang Wang <wangg...@gmail.com
> > >>>
> > >>>>> wrote:
> > >>>>>>>>>
> > >>>>>>>>>> Hello Florian,
> > >>>>>>>>>>
> > >>>>>>>>>> Thanks for the KIP. I have some meta feedbacks on the
> > >> proposal:
> > >>>>>>>>>>
> > >>>>>>>>>> 1. You mentioned that this `Processed` object will be added
> > >> to a
> > >>>> new
> > >>>>>>>>>> overloaded variant of all the stateless operators, what about
> > >>> the
> > >>>>>>>>> stateful
> > >>>>>>>>>> operators? Would like to hear your opinions if you have
> > >> thought
> > >>>>> about
> > >>>>>>>>> that:
> > >>>>>>>>>> note for stateful operators they will usually be mapped to
> > >>>> multiple
> > >>>>>>>>>> processor node names, so we probably need to come up with some
> > >>>> ways
> > >>>>> to
> > >>>>>>>>>> define all their names.
> > >>>>>>>>>>
> > >>>>>>>>>> 2. I share the same concern with Bill as for adding lots of
> > >> new
> > >>>>>>>> overload
> > >>>>>>>>>> functions into the stateless operators, as we have just spent
> > >>>> quite
> > >>>>>>>> some
> > >>>>>>>>>> effort in trimming them since 1.0.0 release. If the goal is to
> > >>>> just
> > >>>>>>>>> provide
> > >>>>>>>>>> some "hints" on the generated processor node names, not
> > >> strictly
> > >>>>>>>>> enforcing
> > >>>>>>>>>> the exact names that to be generated, then how about we just
> > >>> add a
> > >>>>> new
> > >>>>>>>>>> function to `KStream` and `KTable` classes like:
> > >>> "as(Processed)",
> > >>>>> with
> > >>>>>>>>> the
> > >>>>>>>>>> semantics as "the latest operators that generate this KStream
> > >> /
> > >>>>> KTable
> > >>>>>>>>> will
> > >>>>>>>>>> be named accordingly to this hint".
> > >>>>>>>>>>
> > >>>>>>>>>> The only caveat, is that for all operators like `KStream#to`
> > >> and
> > >>>>>>>>>> `KStream#print` that returns void, this alternative would not
> > >>>> work.
> > >>>>>> But
> > >>>>>>>>> for
> > >>>>>>>>>> the current operators:
> > >>>>>>>>>>
> > >>>>>>>>>> a. KStream#print,
> > >>>>>>>>>> b. KStream#foreach,
> > >>>>>>>>>> c. KStream#to,
> > >>>>>>>>>> d. KStream#process
> > >>>>>>>>>>
> > >>>>>>>>>> I personally felt that except `KStream#process` users would
> > >> not
> > >>>>>> usually
> > >>>>>>>>>> bother to override their names, and for `KStream#process` we
> > >>> could
> > >>>>> add
> > >>>>>>>> an
> > >>>>>>>>>> overload variant with the additional Processed object.
> > >>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>> 3. In your example, the processor names are still added with a
> > >>>>> suffix
> > >>>>>>>>> like
> > >>>>>>>>>> "
> > >>>>>>>>>> -0000000000", is this intentional? If yes, why (I thought with
> > >>>> user
> > >>>>>>>>>> specified processor name hints we will not add suffix to
> > >>>> distinguish
> > >>>>>>>>>> different nodes of the same type any more)?
> > >>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>> Guozhang
> > >>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>> On Tue, May 29, 2018 at 6:47 AM, Bill Bejeck <
> > >> bbej...@gmail.com
> > >>>>
> > >>>>>>>> wrote:
> > >>>>>>>>>>
> > >>>>>>>>>>> Hi Florian,
> > >>>>>>>>>>>
> > >>>>>>>>>>> Thanks for the KIP.  I think being able to add more context
> > >> to
> > >>>> the
> > >>>>>>>>>>> processor names would be useful.
> > >>>>>>>>>>>
> > >>>>>>>>>>> I like the idea of adding a "withProcessorName" to Produced,
> > >>>>> Consumed
> > >>>>>>>>> and
> > >>>>>>>>>>> Joined.
> > >>>>>>>>>>>
> > >>>>>>>>>>> But instead of adding the "Processed" parameter to a large
> > >>>>> percentage
> > >>>>>>>>> of
> > >>>>>>>>>>> the methods, which would result in overloaded methods (which
> > >> we
> > >>>>>>>> removed
> > >>>>>>>>>>> quite a bit with KIP-182) what do you think of adding a
> > >> method
> > >>>>>>>>>>> to the AbstractStream class "withName(String processorName)"?
> > >>> BTW
> > >>>>> I"m
> > >>>>>>>>> not
> > >>>>>>>>>>> married to the method name, it's the best I can do off the
> > >> top
> > >>> of
> > >>>>> my
> > >>>>>>>>>> head.
> > >>>>>>>>>>>
> > >>>>>>>>>>> For the methods that return void, we'd have to add a
> > >> parameter,
> > >>>> but
> > >>>>>>>>> that
> > >>>>>>>>>>> would at least cut down on the number of overloaded methods
> > >> in
> > >>>> the
> > >>>>>>>> API.
> > >>>>>>>>>>>
> > >>>>>>>>>>> Just my 2 cents.
> > >>>>>>>>>>>
> > >>>>>>>>>>> Thanks,
> > >>>>>>>>>>> Bill
> > >>>>>>>>>>>
> > >>>>>>>>>>> On Sun, May 27, 2018 at 4:13 PM, Florian Hussonnois <
> > >>>>>>>>>> fhussonn...@gmail.com
> > >>>>>>>>>>>>
> > >>>>>>>>>>> wrote:
> > >>>>>>>>>>>
> > >>>>>>>>>>>> Hi,
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> I would like to start a new discussion on following KIP :
> > >>>>>>>>>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-
> > >>>>>>>>>>>>
> > >>> 307%3A+Allow+to+define+custom+processor+names+with+KStreams+DSL
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> This is still a draft.
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> Looking forward for your feedback.
> > >>>>>>>>>>>> --
> > >>>>>>>>>>>> Florian HUSSONNOIS
> > >>>>>>>>>>>>
> > >>>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>> --
> > >>>>>>>>>> -- Guozhang
> > >>>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>
> > >>>>>>>>
> > >>>>>>>> --
> > >>>>>>>> Florian HUSSONNOIS
> > >>>>>>>>
> > >>>>>>>
> > >>>>>>>
> > >>>>>>>
> > >>>>>>
> > >>>>>>
> > >>>>>
> > >>>>> --
> > >>>>> Florian HUSSONNOIS
> > >>>>>
> > >>>>
> > >>>
> > >>>
> > >>>
> > >>> --
> > >>> -- Guozhang
> > >>>
> > >>
> > >>
> > >> --
> > >> Florian HUSSONNOIS
> > >>
> > >
> > >
> > >
> >
> >
>
> --
> Florian HUSSONNOIS
>


-- 
-- Guozhang

Reply via email to