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*