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

文章目录

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

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. 错误解析

错误信息:

plaintext 复制代码
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 生产者发送超大消息

java 复制代码
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();
        }
    }
}

结果:

plaintext 复制代码
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,提高消息允许的最大大小:

java 复制代码
props.put("max.request.size", 5242880); // 5MB

4.2 方法 2:调整 Kafka Broker 配置

修改 server.properties:

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

重启 Kafka:

sh 复制代码
bin/kafka-server-stop.sh
bin/kafka-server-start.sh -daemon config/server.properties

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

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

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

java 复制代码
props.put("fetch.message.max.bytes", 5242880);

4.5 方法 5:大消息拆分

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

5. 最佳实践:

  1. 避免发送超大消息,Kafka 设计用于小消息(<1MB)。

  2. 使用压缩 :

    java 复制代码
    props.put("compression.type", "gzip"); // 也可以是 lz4, snappy
  3. 利用 Kafka 分片,拆分大文件存储到多个分区。

相关推荐
weifont4 分钟前
自动化抓取和上架商品:能不动手,就少动手
运维·前端·自动化
拂拉氏20 分钟前
【知识讲解】 Linux之动静态库的了解
linux·运维·服务器·动静态库
Mikko71 小时前
Linux 重启后日志没了?进程被 OOM 杀了去哪看?logrotate 之后日志还往旧文件写?三台真机实测日志与性能排查
linux·运维·centos
Pniubi1 小时前
分布式锁分类讲解
分布式
光依旧1 小时前
发版就掉请求?Spring Boot优雅停机的四步
运维·spring boot·nginx·高可用·优雅停机·mcp server
yichengerp3 小时前
电子行业常用erp系统有哪些?推荐适合中小电子厂的易呈erp软件,操作简单,易落地
大数据·运维·人工智能·云计算·制造
天国梦3 小时前
国密门禁品牌怎么选?2026年最新3个避坑要点
运维·服务器·数据库·python
nvd113 小时前
深入剖析:GCP Pub/Sub 与 Apache Kafka 对消息处理延迟与消费者卡死的处理机制异同
分布式·kafka·apache
我不是阵雨4 小时前
分布式事务难题与实战解法全解析
分布式·微服务·架构
信可维4 小时前
自动化操作多平台账号:登录态、双会话与 User Data 的 3 个坑
运维·自动化