Hi Matthias,

You're right and I agree with your comments.

Paweł—I'm happy with the KIP given Matthias’ points.

Thanks,
Kirk

On Tue, Mar 4, 2025, at 12:20 PM, Matthias J. Sax wrote:
> Hi,
> 
> I think it should be sufficient to just state in the JavaDocs of the new 
> interface, that the interface is not intended to be implement by users, 
> and point to the Consumer method that returns it.
> 
> To me, the main thing is really, that currently user can call `new` what 
> makes it easy to do thing wrong. If we change it to an interface, users 
> cannot call `new`, and if the interface says "do not implement me", it 
> should hopefully trigger the right response.
> 
> In the end, we can only do so much to guide users, and there is some 
> remaining responsibility to use the software as intended that we cannot 
> lift of them.
> 
> I don't think we would need a runtime check, but again, it's more of an 
> impl detail, not something the KIP has to cover?
> 
> 
> About naming: I agree that `DefaultConsumerGroupMetadata` is not a 
> default, but it's only an internal class that users should not really 
> see, so the name does not matter too much, and we could also rename it 
> at any point. Of course, could also just use `ConsumerGroupMetadataImpl` 
> instead to avoid the term "default".
> 
> Technically, the KIP does not even need to mention 
> `DefaultConsumerGroupMetadata` at all (or only very briefly). It's not 
> public API.
> 
> 
> 
> 
> -Matthias
> 
> On 3/1/25 12:35 PM, Paweł Szymczyk wrote:
> > Hi Kirk
> > Many thanks for very good questions!
> > 
> > KT1. I don't think that internal implementation should totally prevent of
> > passing alternative implementation, but for sure we need to log warning
> > when producer receives different than default implementaion. I think that
> > checking internally is the class implementation exactly
> > DefaultConsumerGroupMetadata  is against some basic principles like liskov
> > substition and if we like to design this mechanism that way, we shouldn't
> > expose an interface.
> > KT2. I am also not 100% satisfied with that name, I don't think that there
> > will be need for future different implementations as it is simple data
> > struct.
> > KT3. It will be place in producer/internals package and default java scope
> > for constructor and whole class.
> > 
> > @Matthias J. Sax <mj...@apache.org> having those KT1 and KT2 in mind,
> > should we move forward with an interface or maybe ConsumerGroupMetadata has
> > to be a class, but we have to  limit possibility to create an instance
> > manualy by making the class final and changing constructor visibility to
> > private or package scope?
> > 
> > czw., 27 lut 2025 o 01:51 Kirk True <k...@kirktrue.pro> napisał(a):
> > 
> >> Hi Paweł,
> >>
> >> Thanks for the KIP!
> >>
> >> My questions:
> >>
> >> KT1. What will prevent developers from implementing their own
> >> ConsumerGroupMetadata and passing that to sendOffsetsToTransaction()? I
> >> assume the code will check the incoming object is of type
> >> DefaultConsumerGroupMetadata?
> >>
> >> KT2. To me, the use of the adjective "default" in
> >> DefaultConsumerGroupMetadata implies that there could be other
> >> implementations. Is the intention that there could be other implementations
> >> in the future?
> >>
> >> KT3. DefaultConsumerGroupMetadata should be defined in an "internals"
> >> package of some sort, right? Will users ever reference the implementation
> >> class name in their code? I'm assuming not.
> >>
> >> Thanks!
> >> Kirk
> >>
> >> On Tue, Feb 25, 2025, at 8:24 AM, Paweł Szymczyk wrote:
> >>>
> >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-1136%3A+Make+ConsumerGroupMetadata+an+interface
> >>>
> >>> --
> >>> Pozdrawiam
> >>> Paweł Szymczyk
> >>>
> >>
> > 
> > 
> 
> 

Reply via email to