Hey everyone I'm closing the discussion as I haven't heard from 3 days.
Before I close the thread I would like to thank Sagar and Andrew for their suggestions and feedback. I believe it has helped to improve the KIP. Thank you all. On Fri, Aug 4, 2023 at 10:26 AM Jack Tomy <jacktomy...@gmail.com> wrote: > All right, Thanks Andrew. > > Hey everyone, > Please share your thoughts and feedback on the KIP : > https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=263424937 > > > > > On Fri, Aug 4, 2023 at 2:50 AM Andrew Schofield < > andrew_schofield_j...@outlook.com> wrote: > >> Hi Jack, >> I do understand the idea of extending the Partitioner interface so that >> people are now able to use headers in the partitioning decision, and I see >> that it’s filling in gap in the interface which was left when headers were >> originally added. >> >> Experience with non-default partitioning schemes in the past makes me >> unlikely to use anything other than the default partitioning scheme. >> But I wouldn’t let that dissuade you. >> >> Thanks, >> Andrew >> >> > On 3 Aug 2023, at 13:43, Jack Tomy <jacktomy...@gmail.com> wrote: >> > >> > Hey Andrew, Sagar >> > >> > Please share your thoughts. Thanks. >> > >> > >> > >> > On Mon, Jul 31, 2023 at 5:58 PM Jack Tomy <jacktomy...@gmail.com> >> wrote: >> > >> >> Hey Andrew, Sagar >> >> >> >> Thanks. I'm travelling so sorry for being brief and getting back late. >> >> >> >> 1. For the first concern, that is moving in a direction of server side >> >> partitioner, the idea seems very much promising but I believe we still >> have >> >> a long way to go. Since the proposal/design for the same is still not >> >> available, it's hard for me to defend my proposal. >> >> 2. For the second concern: >> >> 2.1 Loss of order in messages, I believe the ordering of messages is >> >> never promised and the partitioner has no requirement to ensure the >> same. >> >> It is upto the user to implement/use a partitioner which ensures >> ordering >> >> based on keys. >> >> 2.2 Key deciding the partitioner, It is totally up to the user to >> decide >> >> the partition regardless of the key, we are also passing the value to >> the >> >> partitioner. Even the existing implementation receives the value which >> lets >> >> the user decide the partition based on value. >> >> 2.3 Sending to a specific partition, for this, I need to be aware of >> the >> >> total number of partitions, but if I can do that same in partitioner, >> the >> >> cluster param gives me all the information I want. >> >> >> >> I would also quote a line from KIP-82 where headers were added to the >> >> serializer : The payload is traditionally for the business object, and >> *headers >> >> are traditionally used for transport routing*, filtering etc. So I >> >> believe when a user wants to add some routing information (in this case >> >> which set of partitions to go for), headers seem to be the right place. >> >> >> >> >> >> >> >> On Sat, Jul 29, 2023 at 8:48 PM Sagar <sagarmeansoc...@gmail.com> >> wrote: >> >> >> >>> Hi Andrew, >> >>> >> >>> Thanks for your comments. >> >>> >> >>> 1) Yes that makes sense and that's what even would expect to see as >> well. >> >>> I >> >>> just wanted to highlight that we might still need a way to let client >> side >> >>> partitioning logic be present as well. Anyways, I am good on this >> point. >> >>> 2) The example provided does seem achievable by simply attaching the >> >>> partition number in the ProducerRecord. I guess if we can't find any >> >>> further examples which strengthen the case of this partitioner, it >> might >> >>> be >> >>> harder to justify adding it. >> >>> >> >>> >> >>> Thanks! >> >>> Sagar. >> >>> >> >>> On Fri, Jul 28, 2023 at 2:05 PM Andrew Schofield < >> >>> andrew_schofield_j...@outlook.com> wrote: >> >>> >> >>>> Hi Sagar, >> >>>> Thanks for your comments. >> >>>> >> >>>> 1) Server-side partitioning doesn’t necessarily mean that there’s >> only >> >>> one >> >>>> way to do it. It just means that the partitioning logic runs on the >> >>> broker >> >>>> and >> >>>> any configuration of partitioning applies to the broker’s >> partitioner. >> >>> If >> >>>> we ever >> >>>> see a KIP for this, that’s the kind of thing I would expect to see. >> >>>> >> >>>> 2) In the priority example in the KIP, there is a kind of contract >> >>> between >> >>>> the >> >>>> producers and consumers so that some records can be processed before >> >>>> others regardless of the order in which they were sent. The producer >> >>>> wants to apply special significance to a particular header to control >> >>> which >> >>>> partition is used. I would simply achieve this by setting the >> partition >> >>>> number >> >>>> in the ProducerRecord at the time of sending. >> >>>> >> >>>> I don’t think the KIP proposes adjusting the built-in partitioner or >> >>>> adding to AK >> >>>> a new one that uses headers in the partitioning decision. So, any >> >>>> configuration >> >>>> for a partitioner that does support headers would be up to the >> >>>> implementation >> >>>> of that specific partitioner. Partitioner implements Configurable. >> >>>> >> >>>> I’m just providing an alternative view and I’m not particularly >> opposed >> >>> to >> >>>> the KIP. >> >>>> I just don’t think it quite merits the work involved to get it voted >> and >> >>>> merged. >> >>>> As an aside, a long time ago, I created a small KIP that was never >> >>> adopted >> >>>> and I didn’t push it because I eventually didn’t need it. >> >>>> >> >>>> Thanks, >> >>>> Andrew >> >>>> >> >>>>> On 28 Jul 2023, at 05:15, Sagar <sagarmeansoc...@gmail.com> wrote: >> >>>>> >> >>>>> Hey Andrew, >> >>>>> >> >>>>> Thanks for the review. Since I had reviewed the KIP I thought I >> would >> >>>> also >> >>>>> respond. Of course Jack has the final say on this since he wrote the >> >>> KIP. >> >>>>> >> >>>>> 1) This is an interesting point and I hadn't considered it. The >> >>>>> comparison with KIP-848 is a valid one but even within that KIP, it >> >>>> allows >> >>>>> client side partitioning for power users like Streams. So while we >> >>> would >> >>>>> want to move away from client side partitioner as much as possible, >> we >> >>>>> still shouldn't do away completely with Client side partitioning and >> >>> end >> >>>> up >> >>>>> being in a state of inflexibility for different kinds of usecases. >> >>> This >> >>>> is >> >>>>> my opinion though and you have more context on Clients, so would >> like >> >>> to >> >>>>> know your thoughts on this. >> >>>>> >> >>>>> 2) Regarding this, I assumed that since the headers are already part >> >>> of >> >>>> the >> >>>>> consumer records they should have access to the headers and if there >> >>> is a >> >>>>> contract b/w the applications producing and the application >> consuming, >> >>>> that >> >>>>> decisioning should be transparent. Was my assumption incorrect? But >> as >> >>>> you >> >>>>> rightly pointed out header based partitioning with keys is going to >> >>> lead >> >>>> to >> >>>>> surprising results. Assuming there is merit in this proposal, do you >> >>>> think >> >>>>> we should ignore the keys in this case (similar to the effect of >> >>>>> setting *partitioner.ignore.keys >> >>>>> *config to false) and document it appropriately? >> >>>>> >> >>>>> Let me know what you think. >> >>>>> >> >>>>> Thanks! >> >>>>> Sagar. >> >>>>> >> >>>>> >> >>>>> On Thu, Jul 27, 2023 at 9:41 PM Andrew Schofield < >> >>>>> andrew_schofield_j...@outlook.com> wrote: >> >>>>> >> >>>>>> Hi Jack, >> >>>>>> Thanks for the KIP. I have a few concerns about the idea. >> >>>>>> >> >>>>>> 1) I think that while a client-side partitioner seems like a neat >> >>> idea >> >>>> and >> >>>>>> it’s an established part of Kafka, >> >>>>>> it’s one of the things which makes Kafka clients quite complicated. >> >>> Just >> >>>>>> as KIP-848 is moving from >> >>>>>> client-side assignors to server-side assignors, I wonder whether >> >>> really >> >>>> we >> >>>>>> should be looking to make >> >>>>>> partitioning a server-side capability too over time. So, I’m not >> >>>> convinced >> >>>>>> that making the Partitioner >> >>>>>> interface richer is moving in the right direction. >> >>>>>> >> >>>>>> 2) For records with a key, the partitioner usually calculates the >> >>>>>> partition from the key. This means >> >>>>>> that records with the same key end up on the same partition. Many >> >>>>>> applications expect this to give ordering. >> >>>>>> Log compaction expects this. There are situations in which records >> >>> have >> >>>> to >> >>>>>> be repartitioned, such as >> >>>>>> sometimes happens with Kafka Streams. I think that a header-based >> >>>>>> partitioner for records which have >> >>>>>> keys is going to be surprising and only going to have limited >> >>>>>> applicability as a result. >> >>>>>> >> >>>>>> The tricky part about clever partitioning is that downstream >> systems >> >>>> have >> >>>>>> no idea how the partition >> >>>>>> number was arrived at, so they do not truly understand how the >> >>> ordering >> >>>>>> was derived. I do think that >> >>>>>> perhaps there’s value to being able to influence the partitioning >> >>> using >> >>>>>> the headers, but I wonder if actually >> >>>>>> transforming the headers into an “ordering context” that then flows >> >>> with >> >>>>>> the record as it moves through >> >>>>>> the system would be a stronger solution. Today, the key is the >> >>> ordering >> >>>>>> context. Maybe it should be a >> >>>>>> concept in its own right and the Producer could configure a >> converter >> >>>> from >> >>>>>> headers to ordering context. >> >>>>>> That is of course a much bigger change. >> >>>>>> >> >>>>>> In one of the examples you mention in the KIP, you mentioned using >> a >> >>>>>> header to control priority. I guess the >> >>>>>> idea is to preferentially process records off specific partitions >> so >> >>>> they >> >>>>>> can overtake lower priority records. >> >>>>>> I suggest just sending the records explicitly to specific >> partitions >> >>> to >> >>>>>> achieve this. >> >>>>>> >> >>>>>> Sorry for the essay, but you did ask for people to share their >> >>> thoughts >> >>>> :) >> >>>>>> >> >>>>>> Just my opinion. Let’s see what others think. >> >>>>>> >> >>>>>> Thanks, >> >>>>>> Andrew >> >>>>>> >> >>>>>>> On 25 Jul 2023, at 14:58, Jack Tomy <jacktomy...@gmail.com> >> wrote: >> >>>>>>> >> >>>>>>> Hey @Sagar >> >>>>>>> >> >>>>>>> Thanks again for the review. >> >>>>>>> 1. "a null headers value is equivalent to invoking the older >> >>> partition >> >>>>>>> method", this is not true. If someone makes an implementation and >> >>> the >> >>>>>>> headers come as null, still the new implementation will take >> effect. >> >>>>>>> Instead I have added : "Not overriding this method in the >> >>> Partitioner >> >>>>>>> interface has the same behaviour as using the existing method." >> >>>>>>> 2. Corrected. >> >>>>>>> >> >>>>>>> Hey @Sagar and everyone, >> >>>>>>> Please have a look at the new version and share your thoughts. >> >>>>>>> >> >>>>>> >> >>>> >> >>> >> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=263424937 >> >>>>>>> Like Sagar mentioned, I would also request more people who have >> more >> >>>>>>> context on clients to chime in. >> >>>>>>> >> >>>>>>> >> >>>>>>> On Tue, Jul 25, 2023 at 2:58 PM Sagar <sagarmeansoc...@gmail.com> >> >>>> wrote: >> >>>>>>> >> >>>>>>>> Hi Jack, >> >>>>>>>> >> >>>>>>>> Thanks I have a couple of final comments and then I am good. >> >>>>>>>> >> >>>>>>>> 1) Can you elaborate on the Javadocs of the partition headers >> >>> argument >> >>>>>> to >> >>>>>>>> specify that a null headers value is equivalent to invoking the >> >>> older >> >>>>>>>> partition method? It is apparent but generally good to call out. >> >>>>>>>> 2) In the Compatibility section, you have mentioned backward >> >>>>>> comparable. I >> >>>>>>>> believe it should be *backward compatible change.* >> >>>>>>>> >> >>>>>>>> I don't have other comments. Post this, probably someone else who >> >>> has >> >>>>>> more >> >>>>>>>> context on Clients can also chime in on this before we can move >> >>> this >> >>>> to >> >>>>>>>> Voting. >> >>>>>>>> >> >>>>>>>> Thanks! >> >>>>>>>> Sagar. >> >>>>>>>> >> >>>>>>>> >> >>>>>>>> On Sat, Jul 22, 2023 at 10:09 AM Jack Tomy < >> jacktomy...@gmail.com> >> >>>>>> wrote: >> >>>>>>>> >> >>>>>>>>> Hey @Sagar, >> >>>>>>>>> >> >>>>>>>>> Thank you again for the response and feedback. >> >>>>>>>>> >> >>>>>>>>> 1. Though the ask wasn't very clear to me I have attached the >> >>>> Javadoc >> >>>>>>>> as >> >>>>>>>>> per your suggestion. Please have a look and let me know if this >> >>>> meets >> >>>>>>>>> the >> >>>>>>>>> expectations. >> >>>>>>>>> 2. Done. >> >>>>>>>>> 3. Done >> >>>>>>>>> 4. Done >> >>>>>>>>> >> >>>>>>>>> Hey @Sagar and everyone, >> >>>>>>>>> Please have a look at the new version and share your thoughts. >> >>>>>>>>> >> >>>>>>>> >> >>>>>> >> >>>> >> >>> >> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=263424937 >> >>>>>>>>> >> >>>>>>>>> On Thu, Jul 20, 2023 at 9:46 PM Sagar < >> sagarmeansoc...@gmail.com> >> >>>>>> wrote: >> >>>>>>>>> >> >>>>>>>>>> Thanks Jack for the updates. >> >>>>>>>>>> >> >>>>>>>>>> Some more feedback: >> >>>>>>>>>> >> >>>>>>>>>> 1) It would be better if you can add the Javadoc in the Public >> >>>>>>>> interfaces >> >>>>>>>>>> section. That is a general practice used which gives the >> readers >> >>> of >> >>>>>> the >> >>>>>>>>> KIP >> >>>>>>>>>> a high level idea of the Public Interfaces. >> >>>>>>>>>> >> >>>>>>>>>> 2) In the proposed section, the bit about marking headers as >> read >> >>>> only >> >>>>>>>>>> seems like an implementation detail This can generally be >> >>> avoided in >> >>>>>>>>> KIPs. >> >>>>>>>>>> >> >>>>>>>>>> 3) Also, in the Deprecation section, can you mention again that >> >>> this >> >>>>>>>> is a >> >>>>>>>>>> backward compatible change and the reason for it (already done >> in >> >>>> the >> >>>>>>>>>> Proposed Changes section). >> >>>>>>>>>> >> >>>>>>>>>> 4) In the Testing Plan section, there is still the KIP template >> >>> bit >> >>>>>>>>> copied >> >>>>>>>>>> over. That can be removed. >> >>>>>>>>>> >> >>>>>>>>>> Thanks! >> >>>>>>>>>> Sagar. >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> On Thu, Jul 20, 2023 at 2:48 PM Jack Tomy < >> jacktomy...@gmail.com >> >>>> >> >>>>>>>> wrote: >> >>>>>>>>>> >> >>>>>>>>>>> Hey Everyone, >> >>>>>>>>>>> >> >>>>>>>>>>> Please consider this as a reminder and share your feedback. >> >>> Thank >> >>>>>>>> you. >> >>>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>> >> >>>>>>>> >> >>>>>> >> >>>> >> >>> >> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=263424937 >> >>>>>>>>>>> >> >>>>>>>>>>> On Tue, Jul 18, 2023 at 5:43 PM Jack Tomy < >> >>> jacktomy...@gmail.com> >> >>>>>>>>> wrote: >> >>>>>>>>>>> >> >>>>>>>>>>>> Hey @Sagar, >> >>>>>>>>>>>> >> >>>>>>>>>>>> Thank you for the response and feedback. >> >>>>>>>>>>>> >> >>>>>>>>>>>> 1. Done >> >>>>>>>>>>>> 2. Yeah, that was a mistake from my end. Corrected. >> >>>>>>>>>>>> 3. Can you please elaborate this, I have added the java doc >> >>>>>>>> along >> >>>>>>>>>> with >> >>>>>>>>>>>> the code changes. Should I paste the same in KIP too? >> >>>>>>>>>>>> 4. Moved. >> >>>>>>>>>>>> 5. I have added one more use case, it is actually helpful in >> >>> any >> >>>>>>>>>>>> situation where you want to pass some information to >> partition >> >>>>>>>>>> method >> >>>>>>>>>>> but >> >>>>>>>>>>>> don't have to have it in the key or value. >> >>>>>>>>>>>> 6. Added. >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> Hey @Sagar and everyone, >> >>>>>>>>>>>> Please have a look at the new version and share your >> thoughts. >> >>>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>> >> >>>>>>>> >> >>>>>> >> >>>> >> >>> >> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=263424937 >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> On Tue, Jul 18, 2023 at 9:53 AM Sagar < >> >>> sagarmeansoc...@gmail.com> >> >>>>>>>>>> wrote: >> >>>>>>>>>>>> >> >>>>>>>>>>>>> Hi Jack, >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> Thanks for the KIP! Seems like an interesting idea. I have >> >>> some >> >>>>>>>>>>> feedback: >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> 1) It would be great if you could clean up the text that >> >>> seems to >> >>>>>>>>>> mimic >> >>>>>>>>>>>>> the >> >>>>>>>>>>>>> KIP template. It is generally not required in the KIP. >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> 2) In the Public Interfaces where you mentioned *Partitioner >> >>>>>>>> method >> >>>>>>>>> in >> >>>>>>>>>>>>> **org/apache/kafka/clients/producer >> >>>>>>>>>>>>> will have the following update*, I believe you meant the >> >>>>>>>> Partitioner >> >>>>>>>>>>>>> *interface*? >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> 3) Staying on Public Interface, it is generally preferable >> to >> >>> add >> >>>>>>>> a >> >>>>>>>>>>>>> Javadocs section along with the newly added method. You >> could >> >>>> also >> >>>>>>>>>>>>> describe >> >>>>>>>>>>>>> the behaviour of it invoking the default existing method. >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> 4) The option that is mentioned in the Rejected >> Alternatives, >> >>>>>>>> seems >> >>>>>>>>>> more >> >>>>>>>>>>>>> like a workaround to the current problem that you are >> >>> describing. >> >>>>>>>>> That >> >>>>>>>>>>>>> could be added to the Motivation section IMO. >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> 5) Can you also add some more examples of scenarios where >> this >> >>>>>>>> would >> >>>>>>>>>> be >> >>>>>>>>>>>>> helpful? The only scenario mentioned seems to have a >> >>> workaround. >> >>>>>>>>> Just >> >>>>>>>>>>>>> trying to ensure that we have a strong enough motivation >> >>> before >> >>>>>>>>>> adding a >> >>>>>>>>>>>>> public API. >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> 6) One thing which should also be worth noting down would be >> >>> what >> >>>>>>>>>>> happens >> >>>>>>>>>>>>> if users override both methods, only one method (new or old) >> >>> and >> >>>>>>>> no >> >>>>>>>>>>>>> methods >> >>>>>>>>>>>>> (the default behaviour). It would help in understanding the >> >>>>>>>> proposal >> >>>>>>>>>>>>> better. >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> Thanks! >> >>>>>>>>>>>>> Sagar. >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> On Mon, Jul 17, 2023 at 9:19 PM Jack Tomy < >> >>> jacktomy...@gmail.com >> >>>>> >> >>>>>>>>>>> wrote: >> >>>>>>>>>>>>> >> >>>>>>>>>>>>>> Hey everyone, >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> Not seeing much discussion on the KPI. Might be because it >> is >> >>>>>>>> too >> >>>>>>>>>>>>>> obvious 😉. >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> If there are no more comments, I will start the VOTE in the >> >>>>>>>> coming >> >>>>>>>>>>> days. >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> On Sat, Jul 15, 2023 at 8:48 PM Jack Tomy < >> >>>>>>>> jacktomy...@gmail.com> >> >>>>>>>>>>>>> wrote: >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> Hey everyone, >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> Please take a look at the KPI below and provide your >> >>>>>>>> suggestions >> >>>>>>>>>> and >> >>>>>>>>>>>>>>> feedback. TIA. >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>> >> >>>>>>>> >> >>>>>> >> >>>> >> >>> >> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=263424937 >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> -- >> >>>>>>>>>>>>>>> Best Regards >> >>>>>>>>>>>>>>> *Jack* >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> -- >> >>>>>>>>>>>>>> Best Regards >> >>>>>>>>>>>>>> *Jack* >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> -- >> >>>>>>>>>>>> Best Regards >> >>>>>>>>>>>> *Jack* >> >>>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>>> -- >> >>>>>>>>>>> Best Regards >> >>>>>>>>>>> *Jack* >> >>>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> >> >>>>>>>>> -- >> >>>>>>>>> Best Regards >> >>>>>>>>> *Jack* >> >>>>>>>>> >> >>>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> -- >> >>>>>>> Best Regards >> >>>>>>> *Jack* >> >>>>>> >> >>>>>> >> >>>> >> >>>> >> >>> >> >> >> >> >> >> -- >> >> Best Regards >> >> *Jack* >> >> >> > >> > >> > -- >> > Best Regards >> > *Jack* >> >> >> > > -- > Best Regards > *Jack* > -- Best Regards *Jack*