Hey everyone,

As I see devs favouring the current style of implementation, and that is
inline with existing code. I would like to go ahead with the same approach
as mentioned in the KIP.
Can I get a few more votes so that I can take the KIP forward.

Thanks



On Sun, Aug 27, 2023 at 1:38 PM Sagar <sagarmeansoc...@gmail.com> wrote:

> Hi Ismael,
>
> Thanks for pointing us towards the direction of a DTO based approach. The
> AdminClient examples seem very neat and extensible in that sense.
> Personally, I was trying to think only along the lines of how the current
> Partitioner interface has been designed, i.e having all requisite
> parameters as separate arguments (Topic, Key, Value etc).
>
> Regarding this question of yours:
>
> A more concrete question: did we consider having the method `partition`
> > take `ProduceRecord` as one of its parameters and `Cluster` as the other?
>
>
> No, I don't think in the discussion thread it was brought up and as I said
> it appears that could be due to an attempt to keep the new method's
> signature similar to the existing one within Partitioner. If I understood
> the intent of the question correctly, are you trying to hint here that
> `ProducerRecord` already contains all the arguments that the `partition`
> method accepts and also has a `headers` field within it. So, instead of
> adding another method for the `headers` field, why not create a new method
> taking ProducerRecord directly?
>
> If my understanding is correct, then it seems like a very clean way of
> adding support for `headers`. Anyways, the partition method within
> KafkaProducer already takes a ProducerRecord as an argument so that makes
> it easier. Keeping that in mind, should this new method's (which takes a
> ProducerRecord as an input) default implementation invoke the existing
> method ? One challenge I see there is that the existing partition method
> expects serialized keys and values while ProducerRecord doesn't have access
> to those (It directly operates on K, V).
>
> Thanks!
> Sagar.
>
>
> On Sun, Aug 27, 2023 at 8:51 AM Ismael Juma <m...@ismaeljuma.com> wrote:
>
> > A more concrete question: did we consider having the method `partition`
> > take `ProduceRecord` as one of its parameters and `Cluster` as the other?
> >
> > Ismael
> >
> > On Sat, Aug 26, 2023 at 12:50 PM Greg Harris
> <greg.har...@aiven.io.invalid
> > >
> > wrote:
> >
> > > Hey Ismael,
> > >
> > > > The mention of "runtime" is specific to Connect. When it comes to
> > > clients,
> > > one typically compiles and runs with the same version or runs with a
> > newer
> > > version than the one used for compilation. This is standard practice in
> > > Java and not something specific to Kafka.
> > >
> > > When I said "older runtimes" I was being lazy, and should have said
> > > "older versions of clients at runtime," thank you for figuring out
> > > what I meant.
> > >
> > > I don't know how common it is to compile a partitioner against one
> > > version of clients, and then distribute and run the partitioner with
> > > older versions of clients and expect graceful degradation of features.
> > > If you say that it is very uncommon and not something that we should
> > > optimize for, then I won't suggest otherwise.
> > >
> > > > With regards to the Admin APIs, they have been extended several times
> > > since introduction (naturally). One of them is:
> > > >
> > >
> >
> https://github.com/apache/kafka/commit/1d22b0d70686aef5689b775ea2ea7610a37f3e8c
> > >
> > > Thanks for the example. I also see that includes a migration from
> > > regular arguments to the DTO style, consistent with your
> > > recommendation here.
> > >
> > > I think the DTO style and the proposed additional argument style are
> > > both reasonable.
> > >
> > > Thanks,
> > > Greg
> > >
> > > On Sat, Aug 26, 2023 at 9:46 AM Ismael Juma <m...@ismaeljuma.com> wrote:
> > > >
> > > > Hi Greg,
> > > >
> > > > The mention of "runtime" is specific to Connect. When it comes to
> > > clients,
> > > > one typically compiles and runs with the same version or runs with a
> > > newer
> > > > version than the one used for compilation. This is standard practice
> in
> > > > Java and not something specific to Kafka.
> > > >
> > > > With regards to the Admin APIs, they have been extended several times
> > > since
> > > > introduction (naturally). One of them is:
> > > >
> > > >
> > >
> >
> https://github.com/apache/kafka/commit/1d22b0d70686aef5689b775ea2ea7610a37f3e8c
> > > >
> > > > Ismael
> > > >
> > > > On Sat, Aug 26, 2023 at 8:29 AM Greg Harris
> > <greg.har...@aiven.io.invalid
> > > >
> > > > wrote:
> > > >
> > > > > Hey Ismael,
> > > > >
> > > > > Thank you for clarifying where the DTO pattern is used already, I
> did
> > > > > not have the admin methods in mind.
> > > > >
> > > > > > With the DTO approach, you don't create a new DTO, you simply
> add a
> > > new
> > > > > overloaded constructor and accessor to the DTO.
> > > > >
> > > > > With this variant, partitioner implementations would receive a
> > > > > `NoSuchMethodException` when trying to access newer methods in
> older
> > > > > runtimes. Do we expect the interface implementers will maintain the
> > > > > try-catch to support backwards-compatibility?
> > > > > Fortunately here the Headers type already exists, but in the future
> > if
> > > > > a new subtype is added at the same time as the change to the DTO is
> > > > > made, interface implementers will need to be careful to avoid
> > > > > NoClassDefFoundErrors.
> > > > > We used this "add a new method" style extension in
> > > > >
> > > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-610%3A+Error+Reporting+in+Sink+Connectors
> > > > > and had to be very specific in recommending how users interact with
> > > > > the new extension point, and there ended up being lots of sharp
> edges
> > > > > in practice.
> > > > >
> > > > > Do you have any examples of a DTO-based API that has been extended
> > > > > since it was initially implemented? I'm not familiar with the
> > > > > evolution of the Admin APIs.
> > > > >
> > > > > Thanks!
> > > > > Greg
> > > > >
> > > > > On Sat, Aug 26, 2023 at 6:45 AM Ismael Juma <m...@ismaeljuma.com>
> > wrote:
> > > > > >
> > > > > > Hi Greg,
> > > > > >
> > > > > > The point is that the approach proposed here introduces
> complexity
> > > > > forever.
> > > > > > Each new user of this interface that needs access to the
> parameters
> > > not
> > > > > > exposed originally needs to implement the abstract method with an
> > > empty
> > > > > > implementation and it needs to override whichever additional
> > default
> > > they
> > > > > > care about (this KIP introduces a second method, but future KIPs
> > > would
> > > > > > introduce additional methods for new parameters). One would never
> > > design
> > > > > > the interface like this from the start.
> > > > > >
> > > > > > With the DTO approach, you don't create a new DTO, you simply
> add a
> > > new
> > > > > > overloaded constructor and accessor to the DTO. The implementers
> of
> > > the
> > > > > > interface still have a single method (two here since we made a
> > > mistake
> > > > > > originally) and they can decide which of the values from the DTO
> > they
> > > > > would
> > > > > > like to access. This approach has been the recommended approach
> for
> > > years
> > > > > > and it's how the Admin apis work (they're the most recent
> client).
> > An
> > > > > > example:
> > > > > >
> > > > > > createTopics(Collection<NewTopic> newTopics, CreateTopicsOptions
> > > > > options);
> > > > > >
> > > > > > This makes it easy to add new fields to `NewTopic` or
> > > > > `CreateTopicsOptions`.
> > > > > >
> > > > > > Ismael
> > > > > >
> > > > > > On Wed, Aug 23, 2023 at 11:48 AM Greg Harris
> > > > > <greg.har...@aiven.io.invalid>
> > > > > > wrote:
> > > > > >
> > > > > > > Hey Jack,
> > > > > > >
> > > > > > > The design of this KIP is also consistent with the way header
> > > support
> > > > > > > was added to Connect:
> > > > > > >
> > > > > > >
> > > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-440%3A+Extend+Connect+Converter+to+support+headers
> > > > > > > I think making argument for precedent here is reasonable.
> > > > > > >
> > > > > > > Hi Ismael,
> > > > > > >
> > > > > > > Can you expand what you mean by "without breaking
> > compatibility"? I
> > > > > > > think the approach proposed here (a default method) would be
> > > backwards
> > > > > > > compatible. If an implementation wishes to make use of the new
> > > > > > > signature, they can override the new method and the version of
> > > Kafka
> > > > > > > will determine which implementation is used without instance
> > > checking,
> > > > > > > reflection, or exceptions.
> > > > > > >
> > > > > > > I believe that when you pass a DTO, that some sort of instance
> > > > > > > checking, reflection, or exceptions would be required for the
> > > > > > > Partitioner to determine whether additional information is
> > present.
> > > > > > > For example, if we wished to add some information X to the
> > > partitioner
> > > > > > > in the future, the caller could pass either a `PartitionInfo`
> or
> > > > > > > `PartitionInfoWithX` DTO instance, and the callee could use an
> > > > > > > `instanceof` check and a cast before accessing the X
> information.
> > > That
> > > > > > > seems to be more machinery for the Partitioner implementation
> to
> > > > > > > manage as compared to maintaining multiple methods, which may
> > just
> > > be
> > > > > > > one-line calls to other methods.
> > > > > > >
> > > > > > > Please let me know if I've misunderstood your DTO design.
> > > > > > >
> > > > > > > Thanks!
> > > > > > > Greg
> > > > > > >
> > > > > > > On Tue, Aug 22, 2023 at 9:33 PM Jack Tomy <
> jacktomy...@gmail.com
> > >
> > > > > wrote:
> > > > > > > >
> > > > > > > > Hi Ismael,
> > > > > > > >
> > > > > > > > That would be totally different from the pattern currently
> > being
> > > > > followed
> > > > > > > > in all the interfaces, for example serializer.
> > > > > > > > I personally don't favour that either. Let's see if the
> > community
> > > > > has any
> > > > > > > > opinions on the same.
> > > > > > > >
> > > > > > > > Hey everyone, please share your thoughts on using a DTO
> instead
> > > of
> > > > > > > separate
> > > > > > > > params for the interface.
> > > > > > > >
> > > > > > > > Thanks.
> > > > > > > >
> > > > > > > > On Mon, Aug 21, 2023 at 8:06 PM Ismael Juma <
> m...@ismaeljuma.com
> > >
> > > > > wrote:
> > > > > > > >
> > > > > > > > > Hi Jack,
> > > > > > > > >
> > > > > > > > > I mean a DTO. That means you can add additional parameters
> > > later
> > > > > > > without
> > > > > > > > > breaking compatibility. The current proposal would result
> in
> > > yet
> > > > > > > another
> > > > > > > > > method each time we need to add parameters.
> > > > > > > > >
> > > > > > > > > Ismael
> > > > > > > > >
> > > > > > > > > On Sun, Aug 20, 2023 at 4:53 AM Jack Tomy <
> > > jacktomy...@gmail.com>
> > > > > > > wrote:
> > > > > > > > >
> > > > > > > > > > Hey Ismael,
> > > > > > > > > >
> > > > > > > > > > Are you suggesting to pass a param like a DTO or you are
> > > > > suggesting
> > > > > > > to
> > > > > > > > > pass
> > > > > > > > > > the record object?
> > > > > > > > > >
> > > > > > > > > > I would also like to hear other devs' opinions on this
> as I
> > > > > > > personally
> > > > > > > > > > favour what is done currently.
> > > > > > > > > >
> > > > > > > > > > On Thu, Aug 17, 2023 at 9:34 AM Ismael Juma <
> > > m...@ismaeljuma.com>
> > > > > > > wrote:
> > > > > > > > > >
> > > > > > > > > > > Hi,
> > > > > > > > > > >
> > > > > > > > > > > Thanks for the KIP. The problem outlined here is a
> great
> > > > > example
> > > > > > > why we
> > > > > > > > > > > should be using a record-like structure to pass the
> > > parameters
> > > > > to a
> > > > > > > > > > method
> > > > > > > > > > > like this. Then we can add more parameters without
> having
> > > to
> > > > > > > introduce
> > > > > > > > > > new
> > > > > > > > > > > methods. Have we considered this option?
> > > > > > > > > > >
> > > > > > > > > > > Ismael
> > > > > > > > > > >
> > > > > > > > > > > On Mon, Aug 7, 2023 at 5:26 AM Jack Tomy <
> > > > > jacktomy...@gmail.com>
> > > > > > > > > wrote:
> > > > > > > > > > >
> > > > > > > > > > > > Hey everyone.
> > > > > > > > > > > >
> > > > > > > > > > > > I would like to call for a vote on KIP-953: partition
> > > method
> > > > > to
> > > > > > > be
> > > > > > > > > > > > overloaded to accept headers as well.
> > > > > > > > > > > >
> > > > > > > > > > > > KIP :
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > >
> > > > >
> > >
> >
> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=263424937
> > > > > > > > > > > > Discussion thread :
> > > > > > > > > > > >
> > > > > https://lists.apache.org/thread/0f20kvfqkmhdqrwcb8vqgqn80szcrcdd
> > > > > > > > > > > >
> > > > > > > > > > > > Thanks
> > > > > > > > > > > > --
> > > > > > > > > > > > Best Regards
> > > > > > > > > > > > *Jack*
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > --
> > > > > > > > > > Best Regards
> > > > > > > > > > *Jack*
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > --
> > > > > > > > Best Regards
> > > > > > > > *Jack*
> > > > > > >
> > > > >
> > >
> >
>


-- 
Best Regards
*Jack*

Reply via email to