Hi Edo,
Thanks for the KIP. Looks like a useful improvement. I have some 
comments/questions.

4) For a new interface, I wonder whether it would be better to use 
TopicIdPartition rather
than TopicPartition. Topic IDs are gradually spreading across the public 
interfaces for Kafka.

5) The new topic config is called `record.validation.policy`. The javadoc for 
the validationPolicy()
method says `validation.policy`.

6) I’m surprised that you need a `HeaderProxy` interface when `Headers` and 
`Header` are
already interfaces. I would have expected it was possible to create proxy 
instances of the
headers using the existing interfaces with a little cunning.

Thanks,
Andrew

> On 26 Jun 2023, at 16:05, Edoardo Comar <edoardli...@gmail.com> wrote:
>
> Hi Kirk,
> thanks for your comments.
>
>> 1. Does record.validation.policy.class.name support multiple classes, or 
>> just one? I’m probably not wrapping my head around it,
>> but I’d imagine different policies for different families or groupings of 
>> topics, thus the need for supporting multiple policies.
>> But if there are multiple then you run the risk of conflicts of ownership of 
>> validation, so ¯\_(ツ)_/¯
>
> We have only identified the use case for a single policy, but as
> mentioned in the Rejected Alternatives section of the KIP, we think a
> Facade-like policy could be written by a Kafka admin to dispatch
> validation to different policies. Allowing multiple policies to be
> specified would introduce complexities (as you noted), and we wanted
> to avoid making too many assumptions without having a strong use-case
> for this support.
>
>> 2. Is there any concern that a validation class may alter the contents of 
>> the ByteBuffer of the key and/or value?
>> Perhaps that’s already handled and/or outside the scope of this KIP?
>
> Good point. This behaviour isn’t defined, and what happens could
> change between Kafka versions (or depending on compression settings).
> We have modified the Javadoc in the KIP to indicate that the
> ByteBuffer’s are read-only wrapper, as we don’t intend this plug-point
> to be used for modifying message data. We also spotted that this was a
> problem for returning headers (as the common Header interface returns
> a byte array from one of its methods), and have updated the Javadoc
> accordingly.
>
>
>> 3. What is the benefit to introducing the inner TopicMetadata and 
>> RecordProxy interfaces vs.
>> passing the TopicPartition, String (validation policy), and Record into the 
>> validate() method directly?
>
> We wanted to avoid Record as the package
> org.apache.kafka.common.record is documented as *not* being a
> published API, and doesn’t necessarily maintain compatibility between
> versions. This was highlighted as a potential problem during the
> discussion of KIP-729.
>
> We designed the API using interfaces as arguments to the methods, so
> that further properties can be added in the future without breaking
> existing implementations.
>
>
> On Wed, 21 Jun 2023 at 17:08, Kirk True <k...@kirktrue.pro> wrote:
>>
>> Hi Edo/Adrian!
>>
>> Thanks for the KIP.
>>
>> I have some questions, and apologies that the may fall under the “stupid” 
>> column because I’m not that familiar with this area :)
>>
>> 1. Does record.validation.policy.class.name support multiple classes, or 
>> just one? I’m probably not wrapping my head around it, but I’d imagine 
>> different policies for different families or groupings of topics, thus the 
>> need for supporting multiple policies. But if there are multiple then you 
>> run the risk of conflicts of ownership of validation, so ¯\_(ツ)_/¯
>>
>> 2. Is there any concern that a validation class may alter the contents of 
>> the ByteBuffer of the key and/or value? Perhaps that’s already handled 
>> and/or outside the scope of this KIP?
>>
>> 3. What is the benefit to introducing the inner TopicMetadata and 
>> RecordProxy interfaces vs. passing the TopicPartition, String (validation 
>> policy), and Record into the validate() method directly?
>>
>> Thanks,
>> Kirk
>>
>>> On Jun 20, 2023, at 2:28 AM, Edoardo Comar <edoardli...@gmail.com> wrote:
>>>
>>> Thanks Николай,
>>> We’d like to open a vote next week.
>>> Hopefully getting some more feedback before then.
>>>
>>> Edo
>>>
>>>
>>> On Wed, 7 Jun 2023 at 19:15, Николай Ижиков <nizhi...@apache.org> wrote:
>>>
>>>> Hello.
>>>>
>>>> As author of one of related KIPs I’m +1 for this change.
>>>> Long waited feature.
>>>>
>>>>> 7 июня 2023 г., в 19:02, Edoardo Comar <eco...@uk.ibm.com> написал(а):
>>>>>
>>>>> Dear all,
>>>>> Adrian and I would like to start a discussion thread on
>>>>>
>>>>> KIP-940: Broker extension point for validating record contents at
>>>> produce time
>>>>>
>>>>>
>>>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-940%3A+Broker+extension+point+for+validating+record+contents+at+produce+time
>>>>>
>>>>> This KIP proposes a new broker-side extension point (a “record
>>>> validation policy”) that can be used to reject records published by a
>>>> misconfigured client.
>>>>> Though general, it is aimed at the common, best-practice use case of
>>>> defining Kafka message formats with schemas maintained in a schema 
>>>> registry.
>>>>>
>>>>> Please post your feedback, thanks !
>>>>>
>>>>> Edoardo & Adrian
>>>>>
>>>>> Unless otherwise stated above:
>>>>>
>>>>> IBM United Kingdom Limited
>>>>> Registered in England and Wales with number 741598
>>>>> Registered office: PO Box 41, North Harbour, Portsmouth, Hants. PO6 3AU


Reply via email to