Hi Matthias,

Thank you for your response. I have left a comment in JIRA to the original
author about taking over KIP-512. In the meantime, I am still waiting for
my Confluence account to be created to edit the KIP.

Overall, it seems that the motivation must be clearly explained and the
> argument of "no needed" must be overcome in a convincing way, to get the
> KIP accepted


I agree completely. That’s why my initial email focused on explaining why
this feature is necessary.

But it seems we are already starting a discussion which should actually
> take place on the KIP discuss thread


Once I have edited KIP-512, I will start a new KIP discussion thread, and
we can continue our discussion there.

Regards,
Rich


On Sun, Jul 14, 2024 at 1:05 PM Matthias J. Sax <mj...@apache.org> wrote:

> Hey,
>
> Resurrecting KIP-512 might be a good idea. Just follow up on the Jira
> ticket and/or old DISCUSS thread, and ask to take over -- if the
> original author does not reply in a few days, just take it on; given
> that the KIP is many years old, I would be surprised if anybody objects
> that you resurrect it and take over.
>
>
>
> However, I would personally not add Headers to RecordMetadata, but
> follow the idea to pass Headers as additional parameter (which was you
> original proposal, and was also mentioned as alternative on the KIP-512
> discuss thread).
>
> As pointed out on the KIP-512 discussion, RecordMetadata is "Kafka
> metadata" about the records (send back by the broker) like the offset.
> Headers seems to be of a different quality because it's
> "user/application metadata"), and I believe it would become a convoluted
> API to add them to RecordMetadata where Headers IMHO do not belong to.
>
> But it seems we are already starting a discussion which should actually
> take place on the KIP discuss thread :) -- And it's of course just my
> personal opinion. In the end, the question will be what the majority of
> people believe is better.
>
>
>
> The other argument on KIP-512 was, that no change is necessary at all
> because Headers exist already client side. While I see the point, I
> don't really agree to it... In the end, while technically correct, it's
> quite complicated and clumsy to keep a copy of the Headers in the
> application code, and link them back and pass into an interceptor or
> callback to be used there. So letting the producer pass them into the
> interceptor and/or callback, seems to be a good improvement for user
> experience and ease of use.
>
>
>
> Overall, it seem that the motivation must be clearly explained and the
> argument of "no needed" but be overcome in a convincing way, to get the
> KIP accepted. The API design question seems to be of second nature, and
> I am sure an agreement can be found, if people agree that a change is
> needed in the first place.
>
>
>
> -Matthias
>
>
> On 7/13/24 5:15 PM, Rich C. wrote:
> > Hi Matthias,
> >
> > Thank you for the positive feedback. I am new to Kafka contributions and
> > have just requested a Confluence account for creating the KIP. I am
> > currently waiting for the account creation.
> >
> > I noticed that KIP-512
> > <
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-512%3AAdding+headers+to+RecordMetaData
> >,
> > which addressed a similar issue with headers, was proposed five years
> ago.
> > Do you suggest that I edit and improve KIP-512 (pending agreement from
> the
> > original author) or create a new KIP?
> >
> > My previous email focused on WHY we need this feature. This follow-up
> email
> > will discuss **HOW** we can implement it.
> >
> > **Implementation Options**
> >
> > 1. **Option 1: Add Headers to RecordMetadata** (Original KIP-512
> Approach)
> >     - **Prototype**: [
> >
> https://github.com/jychen7/kafka/pull/1](https://github.com/jychen7/kafka/pull/1)
> >
> > 2. **Option 2: Add a New onAcknowledgement Method with an Additional
> > Parameter for Headers or Producer Record**
> >     - This option was brainstormed from the original thread
> > <https://www.mail-archive.com/dev@kafka.apache.org/msg100650.html>
> >     - **Prototype**: [
> >
> https://github.com/jychen7/kafka/pull/2](https://github.com/jychen7/kafka/pull/2)
> >
> > I prefer Option 1 because it is backward compatible, does not introduce
> any
> > new API, and does not require deprecating any existing APIs. In my
> opinion,
> > headers are a form of metadata, and RecordMetadata is created on the
> client
> > side without needing extra information from the broker.
> >
> > What are your thoughts on these options? If there are other suggestions,
> I
> > am open to considering them as well.
> >
> > Best regards,
> > Rich
> >
> >
> > On Sat, Jul 13, 2024 at 1:50 PM Matthias J. Sax <mj...@apache.org>
> wrote:
> >
> >> Hi Rich,
> >>
> >> thanks for reaching out. I don't see any reason to object to this
> >> proposal. The best way forward would be to write a KIP and collect
> >> feedback from there.
> >>
> >>
> >> -Matthias
> >>
> >> On 7/12/24 9:14 PM, Rich C. wrote:
> >>> Dear Kafka Development Community,
> >>>
> >>> I propose enhancing the Kafka ProducerInterceptor interface,
> specifically
> >>> to make Record Headers available in the onAcknowledgement method. I
> would
> >>> appreciate your feedback on this proposal. If the feedback is
> positive, I
> >>> will follow up with a detailed discussion on implementing this feature.
> >>>
> >>> *Current State*
> >>>
> >>> At present, the topic, partition, offset, and timestamp are available
> in
> >>> the onAcknowledgement method. However, headers are not accessible.
> >>>
> >>> *Why This Feature Is Important*
> >>>
> >>> Two primary use cases highlight the importance of making headers
> >> available
> >>> in the onAcknowledgement method:
> >>>
> >>> 1. *Latency Measurement*
> >>>
> >>> Latency measurement is crucial for understanding the time taken for
> >>> messages to travel from the producer to Kafka and back to the producer
> as
> >>> an acknowledgment. The current setup does not allow for precise
> >> measurement
> >>> of the producer-side latency (a) in the following scenario:
> >>>
> >>> ```
> >>> producer send -> (a) -> Kafka -> (b) -> acknowledge
> >>> ```
> >>>
> >>>      - If using CreateTime, the calculation is: `now -
> message.timestamp =
> >>> (a) + (b)`
> >>>
> >>>      - If using LogAppendTime, the calculation is: `now -
> >> message.timestamp =
> >>> (b)`
> >>>
> >>> By making headers available in onAcknowledgement, we can include a
> >>> timestamp in the header when the message is sent. This allows us to
> >>> calculate the producer-side latency (a) as `message.timestamp -
> >>> CreateTimeFromHeader` when using LogAppendTime.
> >>>
> >>> 2. *Tracing Completeness*
> >>>
> >>> In distributed systems, tracing is essential for tracking the flow of
> >>> messages and understanding system behavior. The trace ID is typically
> >>> stored in the message headers. Having access to headers in the
> >>> onAcknowledgement method would enable us to add spans indicating when
> the
> >>> message arrives at Kafka and when it is acknowledged by the client.
> This
> >>> would significantly enhance tracing completeness and accuracy.
> >>>
> >>> *Why Not Use Callback on Send*
> >>>
> >>> While it is possible to use the Callback mechanism provided by the send
> >>> method, this approach has limitations:
> >>>
> >>> - *Injectability*: In some cases, such as with Debezium and Flink Kafka
> >>> sink, the Callback is not injectable, making it impractical to use this
> >>> method for the aforementioned purposes.
> >>>
> >>> I believe that adding Record Headers to the onAcknowledgement method in
> >>> ProducerInterceptor would significantly enhance Kafka's capabilities in
> >>> latency measurement and tracing, and also open up new opportunities for
> >>> further improvements and innovations.
> >>>
> >>> I look forward to your feedback on this proposal. If the community is
> in
> >>> favor, I will provide a detailed follow-up on how this feature can be
> >>> implemented. While KIP-512 was considered, we can discuss other options
> >> in
> >>> the next follow-up.
> >>>
> >>> Thank you for your consideration.
> >>>
> >>> Best regards,
> >>> Rich Chen
> >>>
> >>
> >
>

Reply via email to