Apache Kafka
Message Size
Configuration
Data Management
Server Settings

Where to set maximum message size in Apache Kafka?

System Design practice on Codemia

Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.

Practice system design

Apache Kafka is a distributed streaming platform that is widely used for building real-time data pipelines and streaming apps. It's robust, scalable, and integrates well with a vast array of data systems. One common requirement in managing a Kafka instance is controlling the size of messages that can be published to ensure system reliability and performance. Here, we shall discuss how and where to set the maximum message size in Apache Kafka, both at the broker and topic level.

Understanding Message Size in Kafka

In Apache Kafka, a message is not just a singular unit of data but can consist of a key, a value, and headers. The maximum size of a message determines the amount of data that can be transmitted between producers, brokers, and consumers. Kafka manages messages in batches to optimize network and storage utilization, and as a result, the size of message batches is also an important consideration.

Configuring Maximum Message Size

1. Broker-Level Configuration

At the broker level, the message size can be restricted by setting the message.max.bytes property in the broker’s configuration file (server.properties). This setting determines the largest size of a message that the broker will accept. The default value is typically 1 MB (1000012 bytes).

Example: To change the maximum message size to 2 MB on the broker, you would update server.properties as follows:

properties
message.max.bytes=2000000

2. Topic-Level Configuration

For finer granularity, Kafka also allows the configuration of message size at the topic level using the max.message.bytes property. This can be configured when creating a new topic or by modifying an existing topic.

Example: To set the maximum message size for a specific topic to 512 KB:

For a new topic:

bash
bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic example-topic --config max.message.bytes=524288

For an existing topic:

bash
bin/kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name example-topic --alter --add-config max.message.bytes=524288

Importance of Syncing Producer and Consumer Settings

When setting the maximum message size in Kafka, it’s essential to ensure that the configurations on the producer and consumer sides are aligned. Producers have a max.request.size configuration which limits the size of a request that a producer can send. This should ideally be below or match the max.message.bytes to prevent issues during data publishing.

Similarly, consumers have a fetch.message.max.bytes setting that determines the maximum amount of data the server will attempt to fetch in one request. It’s prudent to ensure this setting is large enough to handle the maximum message size that the topic can have.

Practical Implications

Increasing the maximum message size can lead to higher memory usage and longer processing times which can impact system performance. Careful consideration and testing should be undertaken before adjusting these settings in a production environment.

Table: Summary of Key Configuration Properties

PropertyScopeDefault ValueDescription
message.max.bytesBroker1000012 bytesMaximum size of message that the broker will accept
max.message.bytesTopic1000012 bytesMaximum size of message that can be appended to a given topic
max.request.sizeProducer1048576 bytesMaximum size of a request that the producer can send
fetch.message.max.bytesConsumer57671680 bytesMaximum bytes in a fetch request by the consumer

Summary

Setting the maximum message size in Apache Kafka is crucial for system stability and ensuring smooth operation of data flows. Both broker-level and topic-level configurations provide flexibility in managing data transmission sizes to suit different requirements. Adjustments should be made judiciously after evaluating the impact on overall system performance and resource usage. Considerations for corresponding producer and consumer settings are also vital to ensure compatibility and prevent disruptions in data processing.


Related reading
Course
Beginner
27 lessons
10 hours
System Design Fundamentals

Build a strong foundation in designing scalable, reliable distributed systems.

View the course
Track what you have practised

A free account saves your progress, solutions and study plan across every problem on Codemia.

System Design practice on Codemia

Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.

Practice system design

All Rights Reserved.