Bumping up.....

On Sun, Sep 17, 2023 at 9:34 AM Jack Tomy <jacktomy...@gmail.com> wrote:

> Hey Ismael, Sagar and everyone,
>
> Sorry I seem to have interpreted the thread wrong. Before we go ahead with
> the DTO based approach I have few reasons not to go with it.
> a. It is not following the pattern we are following today. But here I
> agree that patterns are to be changed for good.
> b. The client is not supposed to modify the record object (This is my
> understanding, If this is not a necessary requirement, please call it
> out.), passing the entire object lets the client do that. To avoid that,
> there has to be a way to deep copy the record object each time, this adds
> unnecessary requirements on the record object to support the deepcopy
> implementation. I see a lot of complexity and coupling coming in here due
> to this N I believe it's a strong reason not to go ahead with the DTO
> approach.
>
> Please let me know what you think.
>
> Thanks.
>
>
>
>
>
> On Wed, Sep 6, 2023 at 7:06 AM Sagar <sagarmeansoc...@gmail.com> wrote:
>
>> Hey Jack,
>>
>> The way I interpreted this thread, it seems like there's more alignment on
>> the DTO based approach. I spent some time on the suggestion that Ismael
>> had
>> regarding the usage of ProducerRecord. Did you get a chance to look at the
>> reply I had posted and whether that makes sense? Also, checking out the
>> AdminClient APIs examples provided by Ismael will give you more context.
>> Let me know what you think.
>>
>> Thanks!
>> Sagar.
>>
>> On Thu, Aug 31, 2023 at 12:49 PM Jack Tomy <jacktomy...@gmail.com> wrote:
>>
>> > 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*
>> >
>>
>
>
> --
> Best Regards
> *Jack*
>


-- 
Best Regards
*Jack*

Reply via email to