You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "xuexiaoyue (Jira)" <ji...@apache.org> on 2022/03/24 07:24:00 UTC

[jira] [Commented] (KAFKA-13768) Transactional producer exits because of expiration in RecordAccumulator

    [ https://issues.apache.org/jira/browse/KAFKA-13768?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17511644#comment-17511644 ] 

xuexiaoyue commented on KAFKA-13768:
------------------------------------

I found that KAFKA-8805; Bump producer epoch on recoverable errors (#7389)  fix this by automatically abort and bump the producer epoch, but it need the condition 'coordinatorSupportsBumpingEpoch' to be satisfied. If not satisfied, it still turn into fatal error state. I think it may be better to transitionToAbortableError and let the user abort it?

> Transactional producer exits because of expiration in RecordAccumulator
> -----------------------------------------------------------------------
>
>                 Key: KAFKA-13768
>                 URL: https://issues.apache.org/jira/browse/KAFKA-13768
>             Project: Kafka
>          Issue Type: Improvement
>          Components: producer 
>    Affects Versions: 2.0.0
>            Reporter: xuexiaoyue
>            Priority: Major
>
> Hi team, I'm using a transactional producer and set request.timeout.ms to a rather small value such as 10s, meanwhile set zookeeper.session.timeout.ms longer such as 30s. 
> When the producer sending records and one broker accidentally shut down, I notice the producer throw out 'org.apache.kafka.common.KafkaException: The client hasn't received acknowledgment for some previously sent messages and can no longer retry them. It isn't safe to continue' and exit.
> Looking into the code, I found that when a batch expired in RecordAccumulator, it will be marked as unsolved in Sender#sendProducerData. And if it's a transactional process, it will be doomed to transitionToFatalError later.
> I'm wondering why we need to transitionToFatalError here? Is it better to abort this transaction instead? I know it's necessary to bump the epoch during the idempotence sending, but why we let the producer crash in this case?



--
This message was sent by Atlassian Jira
(v8.20.1#820001)