IT技术分享--kafka消息大小设置

kafka消息大小默认为1M,当需要调整消息大小时,可通过以下方式配置,亲测有效。

一、Kafka服务端配置文件修改

注意:kafka集群各个节点配置都要同步修改

(1)server.properties

1.修改以下配置:

# The send buffer (SO_SNDBUF) used by the socket server
#socket.send.buffer.bytes=102400
socket.send.buffer.bytes=10485760

# The receive buffer (SO_RCVBUF) used by the socket server
#socket.receive.buffer.bytes=102400
socket.receive.buffer.bytes=10485760

# The maximum size of a request that the socket server will accept (protection against OOM)
socket.request.max.bytes=10485760


2.添加以下配置

#5242880(5M)6291456(6M) 10485760(10M) 125829120(120M)
message.max.bytes=10485760

#每个分区试图获取的消息字节数。要大于等于message.max.bytes
replica.fetch.max.bytes=12582912

#原有的socket.send.buffer.bytes,socket.receive.buffer.bytes,socket.request.max.bytes也要改成和message.max.bytes一样的大小

(2)producer.properties

1. 修改以下配置

#请求的最大大小为字节9437184(9M)。要小于 message.max.bytes=10485760(10M)
max.request.size=9437184

(3)consumer.properties

1. 添加以下配置

#每个提取请求中为每个主题分区提取的消息字节数。要大于等于message.max.bytes=10485760(10M)12582912(12M)
fetch.message.max.bytes=12582912

(4)重启kafka

1. 先关闭kafka

./bin/kafka-server-stop.sh

2. 再启动kafka

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

二、客户端程序配置

##5242880 5M 10485760 10M

spring.kafka.producer.properties.max.request.size=10485760
spring.kafka.consumer.fetch-max-bytes=62914560

 

三、报错信息

当kafka需要发送大于1M的消息时,客户端程序必须配置这两个参数,否则将会报以下错误:

报错1:


`org.apache.kafka.common.errors.RecordTooLargeException:The message is xxxxx bytes when serialized which is larger than the maximum request size you have configured with the max.request.size configuration.`

图片

报错2:

Kafka - Received invalid metadata error in produce request on partition. NetworkException when send large data to kafka topic

在这里插入图片描述

https://mp.weixin.qq.com/s?__biz=MzkxNDI4NDYwNg==&mid=2247484212&idx=1&sn=72b105b44d717e56380f04b966fec95a&chksm=c1718a65f60603731b4a2066ea51c1f32272c1ca26d3bf0dbd649250aa64ba769babe48b255d#rd

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用Java统计Kafka消息总数的示例代码: ```java import java.util.Properties; import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.KafkaConsumer; import org.apache.kafka.common.TopicPartition; public class KafkaMessageCounter { public static void main(String[] args) { String topicName = "your_topic_name"; String bootstrapServers = "localhost:9092"; // Kafka集群地址 String groupId = "test_group"; // 消费者组ID Properties props = new Properties(); props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers); props.put(ConsumerConfig.GROUP_ID_CONFIG, groupId); props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false"); props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest"); props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props); TopicPartition partition = new TopicPartition(topicName, 0); consumer.assign(Arrays.asList(partition)); consumer.seekToBeginning(Arrays.asList(partition)); long messageCount = 0; while (true) { ConsumerRecords<String, String> records = consumer.poll(100); if (records.isEmpty()) { break; } for (ConsumerRecord<String, String> record : records) { messageCount++; } } System.out.println("Total message count: " + messageCount); consumer.close(); } } ``` 这段代码使用Kafka消费者API来消费指定topic的所有消息,并统计消息总数。需要注意的是,这里使用了手动提交offset的方式,以确保消息不会被重复消费。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT小太阳2022

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值