Kyle, it might make sense to start a VOTE thread, it doesn’t seem there are 
more comments.

Thanks
Eno
> On May 16, 2017, at 6:42 PM, Damian Guy <damian....@gmail.com> wrote:
> 
> Yeah - i wish we'd named KGroupedStream GroupedKStream, similarly for
> KGroupedTable.
> 
> On Tue, 16 May 2017 at 17:59 Kyle Winkelman <winkelman.k...@gmail.com>
> wrote:
> 
>> I have added code blocks and a note about the partial results.
>> 
>> Can I ask why you dont like KCogroupedStream? I just think that because it
>> is created from a KGroupedStream we should keep a similar name format.
>> 
>> On May 16, 2017 9:23 AM, "Damian Guy" <damian....@gmail.com> wrote:
>> 
>> Hi Kyle,
>> 
>> Can you put the code examples etc in {code} blocks to make it easier to
>> read?
>> 
>> I think this is probably a pretty common use-case and therefore a
>> worthwhile addition to the API.
>> 
>> I'd suggest dropping the K from KCogroupedStream and calling it
>> CogroupedStream or CogroupedKStream.
>> In your example, wouldn't the output potentially have more partial results?
>> I.e, for each input on any stream you'd potentially see a record produced?
>> I think it is worth mentioning this.
>> 
>> Thanks,
>> Damian
>> 
>> On Tue, 16 May 2017 at 12:26 Kyle Winkelman <winkelman.k...@gmail.com>
>> wrote:
>> 
>>> No problem, I just wanted to make sure people still had more to say. I
>> will
>>> wait another week.
>>> 
>>> Thanks,
>>> Kyle
>>> 
>>> On May 16, 2017 4:25 AM, "Eno Thereska" <eno.there...@gmail.com> wrote:
>>> 
>>>> Hi Kyle,
>>>> 
>>>> Sorry for the delay in reviews, tomorrow is feature freeze deadline (
>>>> 
>> https://cwiki.apache.org/confluence/display/KAFKA/Release+Plan+0.11.0.0
>>> <
>>>> 
>> https://cwiki.apache.org/confluence/display/KAFKA/Release+Plan+0.11.0.0
>>>> )
>>>> so people are busier than usual. Stay tuned.
>>>> 
>>>> Eno
>>>>> On 15 May 2017, at 13:25, Kyle Winkelman <winkelman.k...@gmail.com>
>>>> wrote:
>>>>> 
>>>>> Damian Guy, could you let me know if you plan to review this further?
>>>> There
>>>>> is no rush, but if you dont have any additional comments I could
>> start
>>>> the
>>>>> voting and finish my WIP PR.
>>>>> 
>>>>> Thanks,
>>>>> Kyle
>>>>> 
>>>>> On May 9, 2017 11:07 AM, "Kyle Winkelman" <winkelman.k...@gmail.com>
>>>> wrote:
>>>>> 
>>>>>> Eno, is there anyone else that is an expert in the kafka streams
>> realm
>>>>>> that I should reach out to for input?
>>>>>> 
>>>>>> I believe Damian Guy is still planning on reviewing this more in
>> depth
>>>> so
>>>>>> I will wait for his inputs before continuing.
>>>>>> 
>>>>>> On May 9, 2017 7:30 AM, "Eno Thereska" <eno.there...@gmail.com>
>>> wrote:
>>>>>> 
>>>>>>> Thanks Kyle, good arguments.
>>>>>>> 
>>>>>>> Eno
>>>>>>> 
>>>>>>>> On May 7, 2017, at 5:06 PM, Kyle Winkelman <
>>> winkelman.k...@gmail.com>
>>>>>>> wrote:
>>>>>>>> 
>>>>>>>> *- minor: could you add an exact example (similar to what Jay’s
>>>> example
>>>>>>> is,
>>>>>>>> or like your Spark/Pig pointers had) to make this super concrete?*
>>>>>>>> I have added a more concrete example to the KIP.
>>>>>>>> 
>>>>>>>> *- my main concern is that we’re exposing this optimization to the
>>>> DSL.
>>>>>>> In
>>>>>>>> an ideal world, an optimizer would take the existing DSL and do
>> the
>>>>>>> right
>>>>>>>> thing under the covers (create just one state store, arrange the
>>> nodes
>>>>>>>> etc). The original DSL had a bunch of small, composable pieces
>>> (group,
>>>>>>>> aggregate, join) that this proposal groups together. I’d like to
>>> hear
>>>>>>> your
>>>>>>>> thoughts on whether it’s possible to do this optimization with the
>>>>>>> current
>>>>>>>> DSL, at the topology builder level.*
>>>>>>>> You would have to make a lot of checks to understand if it is even
>>>>>>> possible
>>>>>>>> to make this optimization:
>>>>>>>> 1. Make sure they are all KTableKTableOuterJoins
>>>>>>>> 2. None of the intermediate KTables are used for anything else.
>>>>>>>> 3. None of the intermediate stores are used. (This may be
>> impossible
>>>>>>>> especially if they use KafkaStreams#store after the topology has
>>>> already
>>>>>>>> been built.)
>>>>>>>> You would then need to make decisions during the optimization:
>>>>>>>> 1. Your new initializer would the composite of all the individual
>>>>>>>> initializers and the valueJoiners.
>>>>>>>> 2. I am having a hard time thinking about how you would turn the
>>>>>>>> aggregators and valueJoiners into an aggregator that would work on
>>> the
>>>>>>>> final object, but this may be possible.
>>>>>>>> 3. Which state store would you use? The ones declared would be for
>>> the
>>>>>>>> aggregate values. None of the declared ones would be guaranteed to
>>>> hold
>>>>>>> the
>>>>>>>> final object. This would mean you must created a new state store
>> and
>>>> not
>>>>>>>> created any of the declared ones.
>>>>>>>> 
>>>>>>>> The main argument I have against it is even if it could be done I
>>>> don't
>>>>>>>> know that we would want to have this be an optimization in the
>>>>>>> background
>>>>>>>> because the user would still be required to think about all of the
>>>>>>>> intermediate values that they shouldn't need to worry about if
>> they
>>>> only
>>>>>>>> care about the final object.
>>>>>>>> 
>>>>>>>> In my opinion cogroup is a common enough case that it should be
>> part
>>>> of
>>>>>>> the
>>>>>>>> composable pieces (group, aggregate, join) because we want to
>> allow
>>>>>>> people
>>>>>>>> to join more than 2 or more streams in an easy way. Right now I
>>> don't
>>>>>>> think
>>>>>>>> we give them ways of handling this use case easily.
>>>>>>>> 
>>>>>>>> *-I think there will be scope for several such optimizations in
>> the
>>>>>>> future
>>>>>>>> and perhaps at some point we need to think about decoupling the
>> 1:1
>>>>>>> mapping
>>>>>>>> from the DSL into the physical topology.*
>>>>>>>> I would argue that cogroup is not just an optimization it is a new
>>> way
>>>>>>> for
>>>>>>>> the users to look at accomplishing a problem that requires
>> multiple
>>>>>>>> streams. I may sound like a broken record but I don't think users
>>>> should
>>>>>>>> have to build the N-1 intermediate tables and deal with their
>>>>>>> initializers,
>>>>>>>> serdes and stores if all they care about is the final object.
>>>>>>>> Now if for example someone uses cogroup but doesn't supply
>>> additional
>>>>>>>> streams and aggregators this case is equivalent to a single
>> grouped
>>>>>>> stream
>>>>>>>> making an aggregate call. This case is what I view an optimization
>>> as,
>>>>>>> we
>>>>>>>> could remove the KStreamCogroup and act as if there was just a
>> call
>>> to
>>>>>>>> KGroupedStream#aggregate instead of calling
>> KGroupedStream#cogroup.
>>> (I
>>>>>>>> would prefer to just write a warning saying that this is not how
>>>>>>> cogroup is
>>>>>>>> to be used.)
>>>>>>>> 
>>>>>>>> Thanks,
>>>>>>>> Kyle
>>>>>>>> 
>>>>>>>> On Sun, May 7, 2017 at 5:41 AM, Eno Thereska <
>>> eno.there...@gmail.com>
>>>>>>> wrote:
>>>>>>>> 
>>>>>>>>> Hi Kyle,
>>>>>>>>> 
>>>>>>>>> Thanks for the KIP again. A couple of comments:
>>>>>>>>> 
>>>>>>>>> - minor: could you add an exact example (similar to what Jay’s
>>>> example
>>>>>>> is,
>>>>>>>>> or like your Spark/Pig pointers had) to make this super concrete?
>>>>>>>>> 
>>>>>>>>> - my main concern is that we’re exposing this optimization to the
>>>> DSL.
>>>>>>> In
>>>>>>>>> an ideal world, an optimizer would take the existing DSL and do
>> the
>>>>>>> right
>>>>>>>>> thing under the covers (create just one state store, arrange the
>>>> nodes
>>>>>>>>> etc). The original DSL had a bunch of small, composable pieces
>>>> (group,
>>>>>>>>> aggregate, join) that this proposal groups together. I’d like to
>>> hear
>>>>>>> your
>>>>>>>>> thoughts on whether it’s possible to do this optimization with
>> the
>>>>>>> current
>>>>>>>>> DSL, at the topology builder level.
>>>>>>>>> 
>>>>>>>>> I think there will be scope for several such optimizations in the
>>>>>>> future
>>>>>>>>> and perhaps at some point we need to think about decoupling the
>> 1:1
>>>>>>> mapping
>>>>>>>>> from the DSL into the physical topology.
>>>>>>>>> 
>>>>>>>>> Thanks
>>>>>>>>> Eno
>>>>>>>>> 
>>>>>>>>>> On May 5, 2017, at 4:39 PM, Jay Kreps <j...@confluent.io> wrote:
>>>>>>>>>> 
>>>>>>>>>> I haven't digested the proposal but the use case is pretty
>> common.
>>>> An
>>>>>>>>>> example would be the "customer 360" or "unified customer
>> profile"
>>>> use
>>>>>>>>> case
>>>>>>>>>> we often use. In that use case you have a dozen systems each of
>>>> which
>>>>>>> has
>>>>>>>>>> some information about your customer (account details, settings,
>>>>>>> billing
>>>>>>>>>> info, customer service contacts, purchase history, etc). Your
>> goal
>>>> is
>>>>>>> to
>>>>>>>>>> join/munge these into a single profile record for each customer
>>> that
>>>>>>> has
>>>>>>>>>> all the relevant info in a usable form and is up-to-date with
>> all
>>>> the
>>>>>>>>>> source systems. If you implement that with kstreams as a
>> sequence
>>> of
>>>>>>>>> joins
>>>>>>>>>> i think today we'd fully materialize N-1 intermediate tables.
>> But
>>>>>>> clearly
>>>>>>>>>> you only need a single stage to group all these things that are
>>>>>>> already
>>>>>>>>>> co-partitioned. A distributed database would do this under the
>>>> covers
>>>>>>>>> which
>>>>>>>>>> is arguably better (at least when it does the right thing) and
>>>>>>> perhaps we
>>>>>>>>>> could do the same thing but I'm not sure we know the
>> partitioning
>>> so
>>>>>>> we
>>>>>>>>> may
>>>>>>>>>> need an explicit cogroup command that impllies they are already
>>>>>>>>>> co-partitioned.
>>>>>>>>>> 
>>>>>>>>>> -Jay
>>>>>>>>>> 
>>>>>>>>>> On Fri, May 5, 2017 at 5:56 AM, Kyle Winkelman <
>>>>>>> winkelman.k...@gmail.com
>>>>>>>>>> 
>>>>>>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>>> Yea thats a good way to look at it.
>>>>>>>>>>> I have seen this type of functionality in a couple other
>>> platforms
>>>>>>> like
>>>>>>>>>>> spark and pig.
>>>>>>>>>>> https://spark.apache.org/docs/0.6.2/api/core/spark/
>>>>>>>>> PairRDDFunctions.html
>>>>>>>>>>> https://www.tutorialspoint.com/apache_pig/apache_pig_
>>>>>>>>> cogroup_operator.htm
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> On May 5, 2017 7:43 AM, "Damian Guy" <damian....@gmail.com>
>>> wrote:
>>>>>>>>>>> 
>>>>>>>>>>>> Hi Kyle,
>>>>>>>>>>>> 
>>>>>>>>>>>> If i'm reading this correctly it is like an N way outer join?
>> So
>>>> an
>>>>>>>>> input
>>>>>>>>>>>> on any stream will always produce a new aggregated value - is
>>> that
>>>>>>>>>>> correct?
>>>>>>>>>>>> Effectively, each Aggregator just looks up the current value,
>>>>>>>>> aggregates
>>>>>>>>>>>> and forwards the result.
>>>>>>>>>>>> I need to look into it and think about it a bit more, but it
>>> seems
>>>>>>> like
>>>>>>>>>>> it
>>>>>>>>>>>> could be a useful optimization.
>>>>>>>>>>>> 
>>>>>>>>>>>> On Thu, 4 May 2017 at 23:21 Kyle Winkelman <
>>>>>>> winkelman.k...@gmail.com>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>>> I sure can. I have added the following description to my KIP.
>>> If
>>>>>>> this
>>>>>>>>>>>>> doesn't help let me know and I will take some more time to
>>> build
>>>> a
>>>>>>>>>>>> diagram
>>>>>>>>>>>>> and make more of a step by step description:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Example with Current API:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> KTable<K, V1> table1 =
>>>>>>>>>>>>> builder.stream("topic1").groupByKey().aggregate(initializer1,
>>>>>>>>>>>> aggregator1,
>>>>>>>>>>>>> aggValueSerde1, storeName1);
>>>>>>>>>>>>> KTable<K, V2> table2 =
>>>>>>>>>>>>> builder.stream("topic2").groupByKey().aggregate(initializer2,
>>>>>>>>>>>> aggregator2,
>>>>>>>>>>>>> aggValueSerde2, storeName2);
>>>>>>>>>>>>> KTable<K, V3> table3 =
>>>>>>>>>>>>> builder.stream("topic3").groupByKey().aggregate(initializer3,
>>>>>>>>>>>> aggregator3,
>>>>>>>>>>>>> aggValueSerde3, storeName3);
>>>>>>>>>>>>> KTable<K, CG> cogrouped = table1.outerJoin(table2,
>>>>>>>>>>>>> joinerOneAndTwo).outerJoin(table3, joinerOneTwoAndThree);
>>>>>>>>>>>>> 
>>>>>>>>>>>>> As you can see this creates 3 StateStores, requires 3
>>>> initializers,
>>>>>>>>>>> and 3
>>>>>>>>>>>>> aggValueSerdes. This also adds the pressure to user to define
>>>> what
>>>>>>> the
>>>>>>>>>>>>> intermediate values are going to be (V1, V2, V3). They are
>> left
>>>>>>> with a
>>>>>>>>>>>>> couple choices, first to make V1, V2, and V3 all the same as
>> CG
>>>> and
>>>>>>>>> the
>>>>>>>>>>>> two
>>>>>>>>>>>>> joiners are more like mergers, or second make them
>> intermediate
>>>>>>> states
>>>>>>>>>>>> such
>>>>>>>>>>>>> as Topic1Map, Topic2Map, and Topic3Map and the joiners use
>>> those
>>>> to
>>>>>>>>>>> build
>>>>>>>>>>>>> the final aggregate CG value. This is something the user
>> could
>>>>>>> avoid
>>>>>>>>>>>>> thinking about with this KIP.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> When a new input arrives lets say at "topic1" it will first
>> go
>>>>>>> through
>>>>>>>>>>> a
>>>>>>>>>>>>> KStreamAggregate grabbing the current aggregate from
>>> storeName1.
>>>> It
>>>>>>>>>>> will
>>>>>>>>>>>>> produce this in the form of the first intermediate value and
>>> get
>>>>>>> sent
>>>>>>>>>>>>> through a KTableKTableOuterJoin where it will look up the
>>> current
>>>>>>>>> value
>>>>>>>>>>>> of
>>>>>>>>>>>>> the key in storeName2. It will use the first joiner to
>>> calculate
>>>>>>> the
>>>>>>>>>>>> second
>>>>>>>>>>>>> intermediate value, which will go through an additional
>>>>>>>>>>>>> KTableKTableOuterJoin. Here it will look up the current value
>>> of
>>>>>>> the
>>>>>>>>>>> key
>>>>>>>>>>>> in
>>>>>>>>>>>>> storeName3 and use the second joiner to build the final
>>> aggregate
>>>>>>>>>>> value.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> If you think through all possibilities for incoming topics
>> you
>>>> will
>>>>>>>>> see
>>>>>>>>>>>>> that no matter which topic it comes in through all three
>> stores
>>>> are
>>>>>>>>>>>> queried
>>>>>>>>>>>>> and all of the joiners must get used.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Topology wise for N incoming streams this creates N
>>>>>>>>>>>>> KStreamAggregates, 2*(N-1) KTableKTableOuterJoins, and N-1
>>>>>>>>>>>>> KTableKTableJoinMergers.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Example with Proposed API:
>>>>>>>>>>>>> 
>>>>>>>>>>>>> KGroupedStream<K, V1> grouped1 = builder.stream("topic1").
>>>>>>>>>>> groupByKey();
>>>>>>>>>>>>> KGroupedStream<K, V2> grouped2 = builder.stream("topic2").
>>>>>>>>>>> groupByKey();
>>>>>>>>>>>>> KGroupedStream<K, V3> grouped3 = builder.stream("topic3").
>>>>>>>>>>> groupByKey();
>>>>>>>>>>>>> KTable<K, CG> cogrouped = grouped1.cogroup(initializer1,
>>>>>>> aggregator1,
>>>>>>>>>>>>> aggValueSerde1, storeName1)
>>>>>>>>>>>>>     .cogroup(grouped2, aggregator2)
>>>>>>>>>>>>>     .cogroup(grouped3, aggregator3)
>>>>>>>>>>>>>     .aggregate();
>>>>>>>>>>>>> 
>>>>>>>>>>>>> As you can see this creates 1 StateStore, requires 1
>>> initializer,
>>>>>>> and
>>>>>>>>> 1
>>>>>>>>>>>>> aggValueSerde. The user no longer has to worry about the
>>>>>>> intermediate
>>>>>>>>>>>>> values and the joiners. All they have to think about is how
>>> each
>>>>>>>>> stream
>>>>>>>>>>>>> impacts the creation of the final CG object.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> When a new input arrives lets say at "topic1" it will first
>> go
>>>>>>> through
>>>>>>>>>>> a
>>>>>>>>>>>>> KStreamAggreagte and grab the current aggregate from
>>> storeName1.
>>>> It
>>>>>>>>>>> will
>>>>>>>>>>>>> add its incoming object to the aggregate, update the store
>> and
>>>> pass
>>>>>>>>> the
>>>>>>>>>>>> new
>>>>>>>>>>>>> aggregate on. This new aggregate goes through the
>>> KStreamCogroup
>>>>>>> which
>>>>>>>>>>> is
>>>>>>>>>>>>> pretty much just a pass through processor and you are done.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> Topology wise for N incoming streams the new api will only
>>> every
>>>>>>>>>>> create N
>>>>>>>>>>>>> KStreamAggregates and 1 KStreamCogroup.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> On Thu, May 4, 2017 at 4:42 PM, Matthias J. Sax <
>>>>>>>>> matth...@confluent.io
>>>>>>>>>>>> 
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Kyle,
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> thanks a lot for the KIP. Maybe I am a little slow, but I
>>> could
>>>>>>> not
>>>>>>>>>>>>>> follow completely. Could you maybe add a more concrete
>>> example,
>>>>>>> like
>>>>>>>>>>> 3
>>>>>>>>>>>>>> streams with 3 records each (plus expected result), and show
>>> the
>>>>>>>>>>>>>> difference between current way to to implement it and the
>>>> proposed
>>>>>>>>>>> API?
>>>>>>>>>>>>>> This could also cover the internal processing to see what
>>> store
>>>>>>> calls
>>>>>>>>>>>>>> would be required for both approaches etc.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> I think, it's pretty advanced stuff you propose, and it
>> would
>>>>>>> help to
>>>>>>>>>>>>>> understand it better.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Thanks a lot!
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> -Matthias
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> On 5/4/17 11:39 AM, Kyle Winkelman wrote:
>>>>>>>>>>>>>>> I have made a pull request. It can be found here.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> https://github.com/apache/kafka/pull/2975
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> I plan to write some more unit tests for my classes and get
>>>>>>> around
>>>>>>>>>>> to
>>>>>>>>>>>>>>> writing documentation for the public api additions.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> One thing I was curious about is during the
>>>>>>>>>>>>>> KCogroupedStreamImpl#aggregate
>>>>>>>>>>>>>>> method I pass null to the
>>> KGroupedStream#repartitionIfRequired
>>>>>>>>>>>> method.
>>>>>>>>>>>>> I
>>>>>>>>>>>>>>> can't supply the store name because if more than one
>> grouped
>>>>>>> stream
>>>>>>>>>>>>>>> repartitions an error is thrown. Is there some name that
>>>> someone
>>>>>>>>>>> can
>>>>>>>>>>>>>>> recommend or should I leave the null and allow it to fall
>>> back
>>>> to
>>>>>>>>>>> the
>>>>>>>>>>>>>>> KGroupedStream.name?
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Should this be expanded to handle grouped tables? This
>> would
>>> be
>>>>>>>>>>>> pretty
>>>>>>>>>>>>>> easy
>>>>>>>>>>>>>>> for a normal aggregate but one allowing session stores and
>>>>>>> windowed
>>>>>>>>>>>>>> stores
>>>>>>>>>>>>>>> would required KTableSessionWindowAggregate and
>>>>>>>>>>> KTableWindowAggregate
>>>>>>>>>>>>>>> implementations.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>> Kyle
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On May 4, 2017 1:24 PM, "Eno Thereska" <
>>> eno.there...@gmail.com
>>>>> 
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> I’ll look as well asap, sorry, been swamped.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Eno
>>>>>>>>>>>>>>>>> On May 4, 2017, at 6:17 PM, Damian Guy <
>>> damian....@gmail.com
>>>>> 
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Hi Kyle,
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Thanks for the KIP. I apologize that i haven't had the
>>> chance
>>>>>>> to
>>>>>>>>>>>> look
>>>>>>>>>>>>>> at
>>>>>>>>>>>>>>>>> the KIP yet, but will schedule some time to look into it
>>>>>>>>>>> tomorrow.
>>>>>>>>>>>>> For
>>>>>>>>>>>>>>>> the
>>>>>>>>>>>>>>>>> implementation, can you raise a PR against kafka trunk
>> and
>>>> mark
>>>>>>>>>>> it
>>>>>>>>>>>> as
>>>>>>>>>>>>>>>> WIP?
>>>>>>>>>>>>>>>>> It will be easier to review what you have done.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>> Damian
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> On Thu, 4 May 2017 at 11:50 Kyle Winkelman <
>>>>>>>>>>>> winkelman.k...@gmail.com
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> I am replying to this in hopes it will draw some
>> attention
>>>> to
>>>>>>> my
>>>>>>>>>>>> KIP
>>>>>>>>>>>>>> as
>>>>>>>>>>>>>>>> I
>>>>>>>>>>>>>>>>>> haven't heard from anyone in a couple days. This is my
>>> first
>>>>>>> KIP
>>>>>>>>>>>> and
>>>>>>>>>>>>>> my
>>>>>>>>>>>>>>>>>> first large contribution to the project so I'm sure I
>> did
>>>>>>>>>>>> something
>>>>>>>>>>>>>>>> wrong.
>>>>>>>>>>>>>>>>>> ;)
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> On May 1, 2017 4:18 PM, "Kyle Winkelman" <
>>>>>>>>>>>> winkelman.k...@gmail.com>
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Hello all,
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> I have created KIP-150 to facilitate discussion about
>>>> adding
>>>>>>>>>>>>> cogroup
>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>>> the streams DSL.
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Please find the KIP here:
>>>>>>>>>>>>>>>>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-
>>>>>>>>>>>>>>>>>>> 150+-+Kafka-Streams+Cogroup
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Please find my initial implementation here:
>>>>>>>>>>>>>>>>>>> https://github.com/KyleWinkelman/kafka
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>>>>> Kyle Winkelman
>>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>> 
>>>> 
>>> 
>> 

Reply via email to