Myeonghyeon Lee created KAFKA-8996:
--------------------------------------

             Summary: Support health check method of TransactionManager and 
KafkaProducer
                 Key: KAFKA-8996
                 URL: https://issues.apache.org/jira/browse/KAFKA-8996
             Project: Kafka
          Issue Type: Wish
          Components: clients
    Affects Versions: 2.3.0
            Reporter: Myeonghyeon Lee


Request to add Transactional KafkaProducer health check method to KafkaProducer 
and TransactionManager.

 
{code:java}

producer.initTransactions();

try {
    producer.beginTransaction();

    for (int i = 0; i < 100; i++) {
        producer.send(new ProducerRecord<>("my-topic", Integer.toString(i), 
Integer.toString(i)));

    // check broker, transaction coordinator, producer is not zombie 
    boolean canCommit = producer.canCommitTransaction();

    if (canCommit) {
       producer.commitTransaction();
    } else {
       producer.abortTransaction();
    }

} catch (....)
}
....


{code}
 

 

I want to check if Transactional KafkaProducer is in normal state before Kafka 
Transaction commitTransaction.

If Kafka Broker is abnormal or if Producer is Zombie, an error will occur when 
commit is executed.

If KafkaProducer has a health check method, I can detect problems and take 
other actions before committing Kafka Transaction.

 

Typically, "best efforts 1PC" for consistency with heterogeneous databases.
{code:java}
1. Start Kafka transaction
2. Start DB transaction
3. Insert record to DB SUCCESS
4. Send message to Kafka SUCCESS
5. Commit DB Transaction
6. Commit Kafka Transaction   // can be failed broker status or producer is 
zombie{code}
I know that "best efforts 1PC" does not guarantee full consistency.

However, if KafkaProducer is provided with a health check method, I have a 
chance to check Kafka's status once before a haterogeneous database commit.

 

Please review.

 

 

 

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to