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

server/2025/2/6 3:15:15/

文章目录

  • 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/server/165312.html

相关文章

CF 761A.Dasha and Stairs(Java实现)

题目分析 大概意思是输入偶数值奇数值&#xff0c;判断是否能够凑成一连串数字 思路分析 能够连成一串数字的条件考虑&#xff1a;1.偶数与奇数差为1&#xff1b;2.偶数与奇数相等&#xff0c;且不为0 代码 import java.util.*;public class Main {public static void…

AJAX案例——图片上传个人信息操作

黑马程序员视频地址&#xff1a; AJAX-Day02-11.图片上传https://www.bilibili.com/video/BV1MN411y7pw?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p26 图片上传 <!-- 文件选择元素 --><input type"file"…

react中如何获取dom元素

实现代码 const inputRef useRef(null) inputRef.current.focus()

《苍穹外卖》项目学习记录-Day11用户统计

返回的数据由前端这个折线图来约定的&#xff0c;也就是说折线图对这个数据有这样的要求&#xff0c;我们去适应前端的这个数据格式&#xff0c;也就是前端需要什么样的数据&#xff0c;我们后端给它什么样的数据。 统计指定时间区间之内的每一天的用户数量&#xff0c;每一天的…

QMK启用摇杆和鼠标按键功能

虽然选择了触摸屏&#xff0c;我仍选择为机械键盘嵌入摇杆模块&#xff0c;这本质上是对"操作连续性"的执着。   值得深思的是&#xff0c;本次开发过程中借助DeepSeek的代码生成与逻辑推理&#xff0c;其展现的能力已然颠覆传统编程范式&#xff0c;需求描述可自动…

Hive:窗口函数[ntile, first_value,row_number() ,rank(),dens_rank()]和自定义函数

ntile 分组 它把有序的数据集合 平均分配 到 指定的数量&#xff08;num &#xff09;个桶中 , 将桶号分配给每一行。如果不能平均分配&#xff0c;则优先分配较小编号的桶&#xff0c;并且各个桶中能放的行数最多相差1。 被称作窗口函数、序列函数或分析函数, 本质上是一种…

Vue06

目录 一、声明式导航-导航链接 1.需求 2.解决方案 3.通过router-link自带的两个样式进行高亮 二、声明式导航的两个类名 1.router-link-active 2.router-link-exact-active 三、声明式导航-自定义类名&#xff08;了解&#xff09; 1.问题 2.解决方案 3.代码演示 四…

物联网智能项目之——智能家居项目的实现!

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于物联网智能项目之——智能家居项目…