Kafka常见问题之 org.apache.kafka.common.errors.RecordTooLargeException

ops/2025/2/1 23:17:38/

文章目录

  • Kafka常见问题之 org.apache.kafka.common.errors.RecordTooLargeException: The message is 1,048,576 bytes when serialized which is larger than the maximum request size.
  • 1. 错误解析
  • 2. 错误原因
  • 3. 错误复现案例
    • 3.1 生产者发送超大消息
  • 4. 解决方案
    • 4.1 方法 1:调整 Kafka 生产者配置**
    • 4.2 方法 2:调整 Kafka Broker 配置
    • 4.3 方法 3:调整 Kafka 主题配置
    • 4.4 方法 4:调整 Kafka 消费者配置
    • 4.5 方法 5:大消息拆分
  • 5. 最佳实践:

apachekafkacommonerrorsRecordTooLargeException_The_message_is_1048576_bytes_when_serialized_which_is_larger_than_the_maximum_request_size_1">Kafka常见问题之 org.apache.kafka.common.errors.RecordTooLargeException: The message is 1,048,576 bytes when serialized which is larger than the maximum request size.

1. 错误解析

错误信息:

org.apache.kafka.common.errors.RecordTooLargeException: The message is 1,048,576 bytes when serialized which is larger than the maximum request size.

这个错误表明,Kafka 生产者在发送消息时,单条消息的序列化大小超出了 Kafka 允许的最大请求大小(默认 1MB,即 1,048,576 字节)。

2. 错误原因

  1. Kafka 生产者端限制

    • max.request.size(默认 1MB):生产者允许的最大单个请求大小。
  2. Kafka 代理端(Broker)限制

    • message.max.bytes(默认 1MB):Kafka Broker 允许的单条消息最大大小。
  3. Kafka 主题端(Topic)限制

    • max.message.bytes(默认 1MB):Kafka 主题允许的单条消息最大大小。
  4. Kafka 消费端限制

    • fetch.message.max.bytes:消费者可拉取的最大消息大小,若小于生产者消息大小,会导致消费者无法消费。

3. 错误复现案例

3.1 生产者发送超大消息

import org.apache.kafka.clients.producer.*;import java.util.Properties;public class LargeMessageProducer {public static void main(String[] args) {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("max.request.size", 1048576); // 1MB,默认值KafkaProducer<String, String> producer = new KafkaProducer<>(props);String topic = "test-topic";String largeMessage = "A".repeat(1048577); // 1MB + 1 字节的消息ProducerRecord<String, String> record = new ProducerRecord<>(topic, largeMessage);try {producer.send(record);} catch (Exception e) {e.printStackTrace();} finally {producer.close();}}
}

结果:

org.apache.kafka.common.errors.RecordTooLargeException: The message is 1,048,577 bytes when serialized which is larger than the maximum request size.

4. 解决方案

4.1 方法 1:调整 Kafka 生产者配置**

KafkaProducer 配置中增加 max.request.size,提高消息允许的最大大小:

props.put("max.request.size", 5242880); // 5MB

4.2 方法 2:调整 Kafka Broker 配置

修改 server.properties

message.max.bytes=5242880  # 5MB
replica.fetch.max.bytes=5242880  # 让 Follower 可以拉取大消息

重启 Kafka:

bin/kafka-server-stop.sh
bin/kafka-server-start.sh -daemon config/server.properties

4.3 方法 3:调整 Kafka 主题配置

kafka-configs.sh --alter --zookeeper localhost:2181 --entity-type topics --entity-name test-topic --add-config max.message.bytes=5242880

4.4 方法 4:调整 Kafka 消费者配置

props.put("fetch.message.max.bytes", 5242880);

4.5 方法 5:大消息拆分

  • 将大消息拆分成多个小消息,并在消费端重组。

5. 最佳实践:

  1. 避免发送超大消息,Kafka 设计用于小消息(<1MB)。
  2. 使用压缩
    props.put("compression.type", "gzip"); // 也可以是 lz4, snappy
    
  3. 利用 Kafka 分片,拆分大文件存储到多个分区。

http://www.ppmy.cn/ops/154880.html

相关文章

ZooKeeper-3.8.3-会话

ZooKeeper 会话 1. 会话创建与状态转换 ZooKeeper 客户端通过语言绑定创建服务句柄来建立会话。句柄初始为“连接中”&#xff08;CONNECTING&#xff09;状态&#xff0c;成功连接到 ZooKeeper 服务的某台服务器后转为“已连接”&#xff08;CONNECTED&#xff09;状态。若遇…

7 Spark 底层执行原理

7 Spark 底层执行原理 1. 从代码角度看 DAG 图的构建2. 将 DAG 划分为 Stage 核心算法3. 将 DAG 划分为 Stage 剖析4. 提交 Stages5. 监控 Job、Task、Executor6. 获取任务执行结果7. 任务调度总体诠释Spark 运行架构特点 Spark 运行流程 Spark运行流程 具体运行流程如下&…

蓝桥杯嵌入式省赛lcd模版

LCD原理图 可以参考和使用官方的参考例程 配置完引脚后点击GENERATE CODE即可无需其他操作 将这两个头文件复制到 在给的案例路径下将lcd.c也复制到bsp路径下面 #include "my_main.h" uint8_t led_sta0x10; char text[30]; void LED_Disp(uint8_t dsLED) {HAL_GPIO…

设计模式Python版 原型模式

文章目录 前言一、原型模式二、原型模式示例三、原型管理器 前言 GOF设计模式分三大类&#xff1a; 创建型模式&#xff1a;关注对象的创建过程&#xff0c;包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&#xff1a;关注类和对…

5 长度和距离计算模块(length.rs)

这段代码定义了一个泛型结构体 Length<T, Unit>&#xff0c;用于表示一维长度&#xff0c;其中 T 表示长度的数值类型&#xff0c;而 Unit 是一个编译时检查单位一致性的占位符类型&#xff0c;不会用于运行时表示长度的值。这个设计允许开发者在编译阶段确保不同单位之间…

【C++高并发服务器WebServer】-8:终端、进程组、会话、守护进程

本文目录 一、终端二、进程组三、会话四、进程组、会话、控制终端之间的关系五、守护进程六、创建守护进程的流程 一、终端 在 UNIX 系统中&#xff0c;用户通过终端登录系统后得到一个shell 进程&#xff0c;这个终端成为 shell 进程的控制终端(Controlling Terminal)&#x…

舵机型号与识别

舵机型号繁多&#xff0c;不同品牌和制造商有不同的命名规则。常见的舵机品牌包括 Futaba、Hitec、Tower Pro、Savox、JX Servo 等。以下是舵机型号的常见识别方法以及一些典型的型号示例&#xff1a; 一、舵机型号的识别方法 型号命名规则&#xff1a; 舵机型号通常由字母和数…

vue3项目中编写less

css,less&#xff0c;sass文件一般写在vue3的asset目录下 1.引入依赖 npm install -D less2.定义less文件 3.在其他文件中引入less文件 如在app.vue文件中引入&#xff0c; 可使用绝对路径也可以使用相对路径