Skip to main content

Re: Kafka Producer send offsets to transaction method confusion

It would be best if you would comment about it on the Jira ticket and we
can take it from there.

I cannot (and to be honest, also don't want to) make a call on this, but
hope that you and the other person can figure it out, who works on it...
Happy to moderate the discussion of course, if necessary.


-Matthias

On 2/20/25 2:24 AM, Paweł Szymczyk wrote:
> https://github.com/apache/kafka/pull/18977
>
> czw., 20 lut 2025 o 07:48 Paweł Szymczyk <pawel.szymczyk90@gmail.com>
> napisał(a):
>
>> Sure, I would love to continue working on this task and provide an
>> interface, I see that someone else has been assigned to Jira recently,
>> please let him know that I like to handle it on my own 🙂
>>
>>
>> Dnia 20 lutego 2025 03:51:02 CET, "Matthias J. Sax" <mjsax@apache.org>
>> napisał/a:
>>
>>> Thanks for reaching out. This is actually very good feedback.
>>>
>>> In general, it seems that `ConsumerGroupMetadata` should be an interface, not a class, making it impossible for users to create an instance.
>>>
>>> Of course, we cannot do anything for older releases, and it seems the JavaDocs do explain it correctly...
>>>
>>> But I did file https://issues.apache.org/jira/browse/KAFKA-18836 -- feel free to pick it up if you have interest to contribute a fix for Apache Kafka 4.1 release.
>>>
>>>
>>> -Matthias
>>>
>>>
>>> On 2/19/25 9:17 AM, Paweł Szymczyk wrote:
>>>
>>>> Hello!
>>>>
>>>> Recently, I had an opportunity to work with legacy code that was using an
>>>> old version of the Kafka native producer transactional API. Our goal was to
>>>> upgrade the code to the newest version and benefit from the upgraded
>>>> transactional API protocol. Initially, we found code that was highlighted
>>>> as deprecated (
>>>> https://kafka.apache.org/25/javadoc/org/apache/kafka/clients/producer/Producer.html#sendOffsetsToTransaction-java.util.Map-java.lang.String-
>>>> ):
>>>>
>>>> kafkaProducer.sendOffsetsToTransaction(Map.of(new
>>>>> TopicPartition(record.topic(), record.partition()), new
>>>>> OffsetAndMetadata(record.offset())), groupId);
>>>>>
>>>>>
>>>> Our first approach was to use the non-deprecated API:
>>>>
>>>> kafkaProducer.sendOffsetsToTransaction(Map.of(new
>>>>
>>>>> TopicPartition(record.topic(), record.partition()), new
>>>>> OffsetAndMetadata(record.offset())), new ConsumerGroupMetadata(groupId));
>>>>>
>>>>
>>>>
>>>> A few days later, after an extensive testing session, we finally read the
>>>> new sendOffsetsToTransaction method javadoc and discovered that we needed
>>>> to retrieve metadata from the Kafka Consumer.
>>>>
>>>> From our perspective, this upgrade process was more complicated than
>>>> expected and requires broad knowledge of the transactional protocol
>>>> upgrade. Are there any contradictions in making the public
>>>> ConsumerGroupMetadata(String
>>>> groupId) constructor deprecated too? It would have given us a clear hint
>>>> that we were still doing something wrong from the start.
>>>>
>>>>
>>> Paweł Szymczyk
>>
>
>

Comments