Bird
Raised Fist0
Kafkadevops~30 mins

Transactional producer in Kafka - Mini Project: Build & Apply

Choose your learning style10 modes available
Transactional producer
📖 Scenario: You are building a simple Kafka producer that sends messages to a topic in a safe way using transactions. This means either all messages in a batch are sent successfully, or none are sent at all. This helps keep data consistent.
🎯 Goal: Create a Kafka transactional producer that sends two messages to a topic orders inside a transaction and commits the transaction.
📋 What You'll Learn
Create a Kafka producer with transactional id order-producer-1
Initialize transactions before sending messages
Begin a transaction before sending messages
Send two messages with keys order1 and order2 and values apple and banana to topic orders
Commit the transaction after sending messages
Close the producer at the end
💡 Why This Matters
🌍 Real World
Transactional producers are used in financial systems, order processing, and other applications where data consistency is critical.
💼 Career
Understanding Kafka transactions is important for backend developers, data engineers, and anyone working with reliable event streaming.
Progress0 / 4 steps
1
Create Kafka producer with transactional id
Create a Kafka producer called producer with the following properties: bootstrap.servers set to localhost:9092, key.serializer and value.serializer set to org.apache.kafka.common.serialization.StringSerializer, and transactional.id set to order-producer-1.
Kafka
Hint

Use Properties to set configuration and pass it to KafkaProducer. Don't forget to set transactional.id.

2
Initialize transactions
Call producer.initTransactions() to initialize transactions before sending any messages.
Kafka
Hint

Call initTransactions() on the producer before starting any transaction.

3
Begin transaction and send messages
Begin a transaction by calling producer.beginTransaction(). Then send two messages to topic orders: one with key order1 and value apple, and another with key order2 and value banana. Use producer.send() with new ProducerRecord<>(topic, key, value).
Kafka
Hint

Use beginTransaction() before sending messages. Use ProducerRecord to create messages with topic, key, and value.

4
Commit transaction and close producer
Commit the transaction by calling producer.commitTransaction(). Then close the producer by calling producer.close(). Finally, print "Transaction committed successfully".
Kafka
Hint

Use commitTransaction() to finish the transaction and close() to release resources. Use System.out.println() to print the success message.

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