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*