Canes Kelly created KAFKA-5826: ---------------------------------- Summary: Transactional Producer needs another way to control transactional expiration Key: KAFKA-5826 URL: https://issues.apache.org/jira/browse/KAFKA-5826 Project: Kafka Issue Type: Improvement Components: clients, core Affects Versions: 0.11.0.0 Reporter: Canes Kelly Priority: Minor
Since transactional producer can send message to several TopicPartitions, it's hard to customize transaction timeout by the user when starts a transaction. In current version of kafka, users who want to send message with transaction should set the timeout configuration which indicates the max time interval between the beginning transaction time with the expiration time. But it's hard to say how long is the most appropriate time to wait for expiration. If timeout is too short, normal appending could be abort because of the large amount of TopicPartitions needed to append. If timeout is too long, consumer must wait for the LSO updated, which means the decline of performance. So the timeout is hard to be determined by users. However, connection expiration time of producer and cluster is easier to determine.So I propose to try the other way to calculate the timeout of a transaction. 1. Use heartbeat timeout instead of transaction timeout. Like consumer, we can make producer to send heartbeat to prove it's alive. Then we can use the way of consumer heartbeat to calculate expiration. 2. update the timestamp of a transaction when producer sends a ProduceRequest to append message. Then we can make *latest timestamp + timeout < now * as the timout flag -- This message was sent by Atlassian JIRA (v6.4.14#64029)