Bird
Raised Fist0
Kafkadevops~10 mins

Batch size and compression tuning in Kafka - Step-by-Step Execution

Choose your learning style10 modes available
Process Flow - Batch size and compression tuning
Start Producer
↓
Collect Messages
↓
Check Batch Size
↓
Compress Batch
↓
Send Batch
↓
Repeat
Kafka producer collects messages into batches, compresses them if batch size is reached, then sends them to the broker.
Execution Sample
Kafka
producer = KafkaProducer(
  batch_size=16384,  # 16 KB
  compression_type='gzip'
)

for msg in messages:
  producer.send(topic, msg)
This code sets a batch size of 16 KB and uses gzip compression before sending messages.
Process Table
StepMessages Collected (bytes)Batch Size Limit (bytes)CompressionActionOutput
1500016384gzipCollect messageNo send yet
21200016384gzipCollect messageNo send yet
31650016384gzipBatch size exceededCompress and send batch
4016384gzipReset batchReady for next messages
5800016384gzipCollect messageNo send yet
61600016384gzipCollect messageNo send yet
71700016384gzipBatch size exceededCompress and send batch
8016384gzipReset batchReady for next messages
9---No more messagesStop
💡 No more messages to send, producer stops collecting.
Status Tracker
VariableStartAfter Step 1After Step 2After Step 3After Step 4After Step 5After Step 6After Step 7After Step 8Final
messages_collected_bytes05000120001650008000160001700000
batch_size_limit16384163841638416384163841638416384163841638416384
compression_typegzipgzipgzipgzipgzipgzipgzipgzipgzipgzip
Key Moments - 3 Insights
Why does the batch send happen only after the batch size is exceeded?
Because Kafka waits to fill the batch up to the configured batch size before sending to optimize network usage, as shown in steps 3 and 7 where the batch size exceeds 16384 bytes triggering compression and send.
What happens to the batch size counter after sending a batch?
It resets to zero to start collecting new messages, as seen in steps 4 and 8 where messages_collected_bytes goes back to 0.
Why is compression applied only when sending the batch?
Compression reduces the data size for network transfer and is applied just before sending the batch, as indicated in the 'Action' column at steps 3 and 7.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the messages_collected_bytes value just before the first batch is sent?
A12000
B16500
C5000
D0
💡 Hint
Check Step 3 in the execution_table where the batch size exceeded triggers sending.
At which step does the batch size counter reset to zero after sending?
AStep 7
BStep 3
CStep 4
DStep 5
💡 Hint
Look at the variable_tracker for messages_collected_bytes resetting after sending in the execution_table.
If the batch_size was increased to 20000 bytes, how would the action at Step 3 change?
ABatch would not be sent at Step 3 because size is below new limit
BCompression would be disabled
CBatch would be sent at Step 3 as before
DProducer would stop collecting messages
💡 Hint
Compare messages_collected_bytes with batch_size_limit in execution_table rows.
Concept Snapshot
Kafka producer batches messages before sending.
Batch size controls when to send.
Compression reduces data size before send.
Larger batch size means fewer sends but more latency.
Tune batch size and compression for performance.
Full Transcript
This visual execution shows how Kafka producer collects messages into batches. It keeps adding message sizes until the batch size limit is exceeded. When that happens, it compresses the batch using gzip and sends it to the broker. After sending, the batch size counter resets to zero to start collecting new messages. This process repeats until no more messages are left. Adjusting batch size affects when batches are sent, and compression helps reduce network load.

Practice

(1/5)
1. What does increasing the batch.size setting in Kafka producer configuration primarily affect?
easy
A. The number of bytes sent in one request to the broker
B. The number of partitions a topic has
C. The compression algorithm used for messages
D. The timeout for message delivery

Solution

  1. Step 1: Understand batch.size meaning

    The batch.size controls how many bytes the producer will try to batch together before sending to the broker.
  2. Step 2: Identify what batch.size affects

    Increasing batch.size means more data is sent in one request, improving throughput but possibly increasing latency.
  3. Final Answer:

    The number of bytes sent in one request to the broker -> Option A
  4. Quick Check:

    batch.size = bytes per request [OK]
Hint: Batch size controls bytes per request, not partitions or compression [OK]
Common Mistakes:
  • Confusing batch size with number of partitions
  • Thinking batch size sets compression type
  • Assuming batch size controls timeout
2. Which of the following is the correct way to enable compression with gzip in Kafka producer configuration?
easy
A. "compression": "gzip"
B. "compress.type": "gzip"
C. "compression.type": "gzip"
D. "compressionType": "gzip"

Solution

  1. Step 1: Recall Kafka producer config keys

    The correct key for compression is compression.type.
  2. Step 2: Match correct syntax

    The value should be a string like "gzip". So the correct config is "compression.type": "gzip".
  3. Final Answer:

    "compression.type": "gzip" -> Option C
  4. Quick Check:

    compression.type = gzip [OK]
Hint: Use exact key 'compression.type' to enable compression [OK]
Common Mistakes:
  • Using wrong key names like 'compression' or 'compress.type'
  • Incorrect camelCase key 'compressionType'
  • Missing quotes around 'gzip'
3. Given the following Kafka producer config snippet:
{
  "batch.size": 16384,
  "compression.type": "snappy"
}

What is the expected effect on message sending?
medium
A. Messages are sent in batches up to 16 KB and compressed with Snappy
B. Messages are sent one by one without compression
C. Messages are compressed with gzip and batch size is ignored
D. Batch size is 16 bytes and compression is disabled

Solution

  1. Step 1: Interpret batch.size value

    The batch size is set to 16384 bytes, which means messages will be grouped up to 16 KB before sending.
  2. Step 2: Interpret compression.type value

    The compression type is set to "snappy", so messages will be compressed using Snappy algorithm.
  3. Final Answer:

    Messages are sent in batches up to 16 KB and compressed with Snappy -> Option A
  4. Quick Check:

    batch.size=16384 + compression.type=snappy [OK]
Hint: Check batch size bytes and compression.type value carefully [OK]
Common Mistakes:
  • Confusing batch size units (bytes vs KB)
  • Assuming gzip compression instead of snappy
  • Thinking batch size disables compression
4. You have set batch.size to 0 in your Kafka producer config. What issue will this cause?
medium
A. Producer will throw a configuration error and fail to start
B. Producer will send messages immediately without batching
C. Producer will batch messages indefinitely causing delays
D. Producer will compress messages with default gzip

Solution

  1. Step 1: Understand batch.size valid values

    Batch size can be set to 0, which disables batching. Messages are sent immediately without waiting to fill a batch.
  2. Step 2: Identify Kafka producer behavior on batch.size=0

    The producer will not throw an error; it will work but send each message in its own request, potentially reducing throughput.
  3. Final Answer:

    Producer will send messages immediately without batching -> Option B
  4. Quick Check:

    batch.size=0 disables batching [OK]
Hint: batch.size=0 disables batching safely, sends immediately [OK]
Common Mistakes:
  • Thinking batch.size=0 causes a configuration error
  • Believing it causes indefinite batching and delays
  • Confusing batch size with compression settings
5. You want to optimize Kafka producer throughput for large messages but keep latency low. Which combination of settings is best?
hard
A. Use default batch.size and compression.type = "none"
B. Decrease batch.size and disable compression
C. Set batch.size to 0 and use compression.type = "gzip"
D. Increase batch.size and use compression.type = "lz4"

Solution

  1. Step 1: Consider batch.size impact on throughput and latency

    Larger batch sizes improve throughput by sending more data at once but can increase latency slightly.
  2. Step 2: Choose compression type for speed and size

    LZ4 compression is fast and efficient, reducing message size without high CPU cost, helping throughput and latency.
  3. Step 3: Evaluate other options

    Decreasing batch size reduces throughput; disabling compression wastes bandwidth; batch.size=0 causes no batching.
  4. Final Answer:

    Increase batch.size and use compression.type = "lz4" -> Option D
  5. Quick Check:

    Large batch + fast compression = best throughput & low latency [OK]
Hint: Big batch + fast compression (lz4) balances speed and size [OK]
Common Mistakes:
  • Choosing gzip which is slower than lz4
  • Setting batch.size to 0 reducing throughput
  • Disabling compression reduces efficiency
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