Bird
Raised Fist0
Kafkadevops~10 mins

Transactional producer in Kafka - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to initialize the Kafka producer with transactions enabled.

Kafka
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("enable.idempotence", [1]);
KafkaProducer<String, String> producer = new KafkaProducer<>(props);
Drag options to blanks, or click blank then click option'
Afalse
Btrue
C"true"
D"false"
Attempts:
3 left
💡 Hint
Common Mistakes
Using string "true" instead of boolean true
Setting 'enable.idempotence' to false
Omitting the property entirely
2fill in blank
medium

Complete the code to initialize the transaction with a unique transactional ID.

Kafka
props.put("transactional.id", [1]);
producer.initTransactions();
Drag options to blanks, or click blank then click option'
AtransactionalId
Bmy-transactional-id
C"transactionalId"
D"my-transactional-id"
Attempts:
3 left
💡 Hint
Common Mistakes
Not using quotes around the transactional ID string
Using an invalid or empty transactional ID
3fill in blank
hard

Fix the error in starting a transaction before sending messages.

Kafka
producer.[1]();
producer.send(new ProducerRecord<>("my-topic", "key", "value"));
producer.commitTransaction();
Drag options to blanks, or click blank then click option'
AbeginTransaction
BstartTransaction
CbeginTransactions
DinitTransaction
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'startTransaction' which does not exist
Using plural 'beginTransactions'
Using 'initTransaction' which is incorrect
4fill in blank
hard

Fill both blanks to handle exceptions properly during a transaction.

Kafka
try {
    producer.[1]();
    producer.send(new ProducerRecord<>("my-topic", "key", "value"));
    producer.commitTransaction();
} catch (ProducerFencedException e) {
    producer.close();
} catch (Exception e) {
    producer.[2]();
}
Drag options to blanks, or click blank then click option'
AbeginTransaction
BcommitTransaction
CabortTransaction
Dclose
Attempts:
3 left
💡 Hint
Common Mistakes
Calling commitTransaction() in the catch block instead of abortTransaction()
Not handling ProducerFencedException properly
5fill in blank
hard

Fill all three blanks to create a transactional producer, send a message, and commit the transaction.

Kafka
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("enable.idempotence", [1]);
props.put("transactional.id", [2]);
KafkaProducer<String, String> producer = new KafkaProducer<>(props);
producer.[3]();
producer.beginTransaction();
producer.send(new ProducerRecord<>("my-topic", "key", "value"));
producer.commitTransaction();
Drag options to blanks, or click blank then click option'
Atrue
B"txn-123"
CinitTransactions
DbeginTransaction
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'beginTransaction()' instead of 'initTransactions()' to initialize
Not quoting the transactional ID string
Setting enable.idempotence as a string instead of boolean

Practice

(1/5)
1.

What is the main purpose of using a transactional producer in Kafka?

easy
A. To compress messages before sending
B. To increase the speed of message delivery
C. To send multiple messages as a single atomic unit
D. To create multiple topics automatically

Solution

  1. Step 1: Understand transactional producer role

    Transactional producers ensure that a group of messages are sent together as one unit, so either all succeed or none do.
  2. Step 2: Compare options

    Options A, B, and D describe unrelated features like compression, speed, or topic creation, which are not the main purpose of transactions.
  3. Final Answer:

    To send multiple messages as a single atomic unit -> Option C
  4. Quick Check:

    Transactional producer = atomic message group [OK]
Hint: Transactional producer = all-or-nothing message send [OK]
Common Mistakes:
  • Confusing transactions with message compression
  • Thinking transactions speed up delivery
  • Believing transactions create topics automatically
2.

Which configuration is required to enable transactions in a Kafka producer?

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
// Which property below is needed for transactions?
easy
A. props.put("max.in.flight.requests.per.connection", "5");
B. props.put("acks", "0");
C. props.put("compression.type", "gzip");
D. props.put("transactional.id", "my-transactional-id");

Solution

  1. Step 1: Identify transaction enabling property

    The property "transactional.id" uniquely identifies the producer's transaction and is required to enable transactions.
  2. Step 2: Check other options

    Options B, C, and D configure acknowledgments, compression, and request limits, which are unrelated to enabling transactions.
  3. Final Answer:

    props.put("transactional.id", "my-transactional-id"); -> Option D
  4. Quick Check:

    Enable transactions = set transactional.id [OK]
Hint: Set transactional.id to enable transactions [OK]
Common Mistakes:
  • Using acks=0 instead of transactional.id
  • Confusing compression with transactions
  • Missing transactional.id causes errors
3.

What will be the output of the following Kafka producer code snippet?

producer.initTransactions();
producer.beginTransaction();
producer.send(new ProducerRecord<>("topic", "key1", "value1"));
producer.commitTransaction();
System.out.println("Transaction committed");

Assuming no errors occur, what is printed?

medium
A. Transaction aborted
B. Transaction committed
C. Exception thrown
D. No output

Solution

  1. Step 1: Follow transaction flow

    The code initializes transactions, begins one, sends a message, then commits the transaction.
  2. Step 2: Check output statement

    After commitTransaction(), it prints "Transaction committed". No errors occur, so this line executes.
  3. Final Answer:

    Transaction committed -> Option B
  4. Quick Check:

    Commit success prints message [OK]
Hint: commitTransaction() followed by print means success message [OK]
Common Mistakes:
  • Assuming commitTransaction() prints automatically
  • Confusing abortTransaction() with commitTransaction()
  • Expecting no output when print is present
4.

Identify the error in this Kafka transactional producer code snippet:

producer.beginTransaction();
producer.send(new ProducerRecord<>("topic", "key", "value"));
// Missing commit or abort here
producer.close();
medium
A. Missing call to commitTransaction() or abortTransaction() before close()
B. beginTransaction() should be called after send()
C. producer.close() should be called before beginTransaction()
D. ProducerRecord is missing a partition number

Solution

  1. Step 1: Check transaction lifecycle

    After beginTransaction() and send(), the code must call commitTransaction() or abortTransaction() to complete the transaction.
  2. Step 2: Identify missing step

    The code closes the producer without committing or aborting, which is incorrect and causes errors.
  3. Final Answer:

    Missing call to commitTransaction() or abortTransaction() before close() -> Option A
  4. Quick Check:

    Transaction must end before close() [OK]
Hint: Always commit or abort before closing producer [OK]
Common Mistakes:
  • Skipping commitTransaction() or abortTransaction()
  • Calling beginTransaction() after send()
  • Ignoring transaction lifecycle rules
5.

You want to send two messages atomically to two different topics using a Kafka transactional producer. Which sequence of calls is correct?

// Assume producer is configured with transactional.id
producer.initTransactions();
// What is the correct order?
hard
A. beginTransaction(); send(topic1); send(topic2); commitTransaction();
B. send(topic1); beginTransaction(); send(topic2); commitTransaction();
C. beginTransaction(); send(topic1); commitTransaction(); send(topic2);
D. send(topic1); send(topic2); beginTransaction(); commitTransaction();

Solution

  1. Step 1: Understand transaction boundaries

    beginTransaction() must be called before sending any messages to start the transaction.
  2. Step 2: Send all messages within the transaction and then commit

    Both messages must be sent after beginTransaction() and before commitTransaction() to be atomic.
  3. Final Answer:

    beginTransaction(); send(topic1); send(topic2); commitTransaction(); -> Option A
  4. Quick Check:

    Start transaction, send all, then commit [OK]
Hint: Begin transaction before sends, commit after all sends [OK]
Common Mistakes:
  • Sending messages before beginTransaction()
  • Committing before all messages sent
  • Starting transaction after sending messages
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard