Hello,

Kind reminder about this KIP: 
https://cwiki.apache.org/confluence/display/KAFKA/KIP-221%3A+Enhance+KStream+with+Connecting+Topic+Creation+and+Repartition+Hint
 
<https://cwiki.apache.org/confluence/display/KAFKA/KIP-221:+Enhance+KStream+with+Connecting+Topic+Creation+and+Repartition+Hint>

Regards,
Levani

> On Jul 9, 2019, at 11:38 AM, Levani Kokhreidze <levani.co...@gmail.com> wrote:
> 
> Hello,
> 
> In order to move this KIP forward, I’ve updated confluence page with the new 
> proposal 
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-221%3A+Enhance+KStream+with+Connecting+Topic+Creation+and+Repartition+Hint
>  
> <https://cwiki.apache.org/confluence/display/KAFKA/KIP-221:+Enhance+KStream+with+Connecting+Topic+Creation+and+Repartition+Hint>
> I’ve also filled “Rejected Alternatives” section. 
> 
> Looking forward to discuss this KIP :)
> 
> King regards,
> Levani
> 
> 
>> On Jul 3, 2019, at 1:08 PM, Levani Kokhreidze <levani.co...@gmail.com 
>> <mailto:levani.co...@gmail.com>> wrote:
>> 
>> Hello Matthias,
>> 
>> Thanks for the feedback and ideas. 
>> I like the idea of introducing dedicated `Topic` class for topic 
>> configuration for internal operators like `groupedBy`.
>> Would be great to hear others opinion about this as well.
>> 
>> Kind regards,
>> Levani 
>> 
>> 
>>> On Jul 3, 2019, at 7:00 AM, Matthias J. Sax <matth...@confluent.io 
>>> <mailto:matth...@confluent.io>> wrote:
>>> 
>>> Levani,
>>> 
>>> Thanks for picking up this KIP! And thanks for summarizing everything.
>>> Even if some points may have been discussed already (can't really
>>> remember), it's helpful to get a good summary to refresh the discussion.
>>> 
>>> I think your reasoning makes sense. With regard to the distinction
>>> between operators that manage topics and operators that use user-created
>>> topics: Following this argument, it might indicate that leaving
>>> `through()` as-is (as an operator that uses use-defined topics) and
>>> introducing a new `repartition()` operator (an operator that manages
>>> topics itself) might be good. Otherwise, there is one operator
>>> `through()` that sometimes manages topics but sometimes not; a different
>>> name, ie, new operator would make the distinction clearer.
>>> 
>>> About adding `numOfPartitions` to `Grouped`. I am wondering if the same
>>> argument as for `Produced` does apply and adding it is semantically
>>> questionable? Might be good to get opinions of others on this, too. I am
>>> not sure myself what solution I prefer atm.
>>> 
>>> So far, KS uses configuration objects that allow to configure a certain
>>> "entity" like a consumer, producer, store. If we assume that a topic is
>>> a similar entity, I am wonder if we should have a
>>> `Topic#withNumberOfPartitions()` class and method instead of a plain
>>> integer? This would allow us to add other configs, like replication
>>> factor, retention-time etc, easily, without the need to change the "main
>>> API".
>>> 
>>> Just want to give some ideas. Not sure if I like them myself. :)
>>> 
>>> 
>>> -Matthias
>>> 
>>> 
>>> 
>>> On 7/1/19 1:04 AM, Levani Kokhreidze wrote:
>>>> Actually, giving it more though - maybe enhancing Produced with num of 
>>>> partitions configuration is not the best approach. Let me explain why:
>>>> 
>>>> 1) If we enhance Produced class with this configuration, this will also 
>>>> affect KStream#to operation. Since KStream#to is the final sink of the 
>>>> topology, for me, it seems to be reasonable assumption that user needs to 
>>>> manually create sink topic in advance. And in that case, having num of 
>>>> partitions configuration doesn’t make much sense. 
>>>> 
>>>> 2) Looking at Produced class, based on API contract, seems like Produced 
>>>> is designed to be something that is explicitly for producer (key 
>>>> serializer, value serializer, partitioner those all are producer specific 
>>>> configurations) and num of partitions is topic level configuration. And I 
>>>> don’t think mixing topic and producer level configurations together in one 
>>>> class is the good approach.
>>>> 
>>>> 3) Looking at KStream interface, seems like Produced parameter is for 
>>>> operations that work with non-internal (e.g topics created and managed 
>>>> internally by Kafka Streams) topics and I think we should leave it as it 
>>>> is in that case.
>>>> 
>>>> Taking all this things into account, I think we should distinguish between 
>>>> DSL operations, where Kafka Streams should create and manage internal 
>>>> topics (KStream#groupBy) vs topics that should be created in advance (e.g 
>>>> KStream#to).
>>>> 
>>>> To sum it up, I think adding numPartitions configuration in Produced will 
>>>> result in mixing topic and producer level configuration in one class and 
>>>> it’s gonna break existing API semantics.
>>>> 
>>>> Regarding making topic name optional in KStream#through - I think 
>>>> underline idea is very useful and giving users possibility to specify num 
>>>> of partitions there is even more useful :) Considering arguments against 
>>>> adding num of partitions in Produced class, I see two options here:
>>>> 1) Add following method overloads
>>>>    * through() - topic will be auto-generated and num of partitions will 
>>>> be taken from source topic
>>>>    * through(final int numOfPartitions) - topic will be auto generated 
>>>> with specified num of partitions
>>>>    * through(final int numOfPartitions, final Produced<K, V> produced) - 
>>>> topic will be with generated with specified num of partitions and 
>>>> configuration taken from produced parameter.
>>>> 2) Leave KStream#through as it is and introduce new method - 
>>>> KStream#repartition (I think Matthias suggested this in one of the threads)
>>>> 
>>>> Considering all mentioned above I propose the following plan:
>>>> 
>>>> Option A:
>>>> 1) Leave Produced as it is
>>>> 2) Add num of partitions configuration to Grouped class (as mentioned in 
>>>> the KIP)
>>>> 3) Add following method overloads to KStream#through
>>>>    * through() - topic will be auto-generated and num of partitions will 
>>>> be taken from source topic
>>>>    * through(final int numOfPartitions) - topic will be auto generated 
>>>> with specified num of partitions
>>>>    * through(final int numOfPartitions, final Produced<K, V> produced) - 
>>>> topic will be with generated with specified num of partitions and 
>>>> configuration taken from produced parameter.
>>>> 
>>>> Option B:
>>>> 1) Leave Produced as it is
>>>> 2) Add num of partitions configuration to Grouped class (as mentioned in 
>>>> the KIP)
>>>> 3) Add new operator KStream#repartition for creating and managing internal 
>>>> repartition topics
>>>> 
>>>> P.S. I’m sorry if all of this was already discussed in the mailing list, 
>>>> but I kinda got with all the threads that were about this KIP :(
>>>> 
>>>> Kind regards,
>>>> Levani
>>>> 
>>>>> On Jul 1, 2019, at 9:56 AM, Levani Kokhreidze <levani.co...@gmail.com 
>>>>> <mailto:levani.co...@gmail.com>> wrote:
>>>>> 
>>>>> Hello,
>>>>> 
>>>>> I would like to resurrect discussion around KIP-221. Going through the 
>>>>> discussion thread, there’s seems to agreement around usefulness of this 
>>>>> feature. 
>>>>> Regarding the implementation, as far as I understood, the most optimal 
>>>>> solution for me seems the following:
>>>>> 
>>>>> 1) Add two method overloads to KStream#through method (essentially making 
>>>>> topic name optional)
>>>>> 2) Enhance Produced class with numOfPartitions configuration field.
>>>>> 
>>>>> Those two changes will allow DSL users to control parallelism and trigger 
>>>>> re-partition without doing stateful operations.
>>>>> 
>>>>> I will update KIP with interface changes around KStream#through if this 
>>>>> changes sound sensible.
>>>>> 
>>>>> Kind regards,
>>>>> Levani
>>>> 
>>>> 
>>> 
>> 
> 

Reply via email to