kafka单条消息过大导致线上OOM,运维连夜跑路了!

简介: kafka生产者罢工,停止生产,生产者内存急剧升高,导致程序几次重启。查看日志,发现Pro程序爆异常kafka.common.MessageSizeTooLargeException。

1 线上问题

kafka生产者罢工,停止生产,生产者内存急剧升高,导致程序几次重启。


查看日志,发现Pro程序爆异常kafka.common.MessageSizeTooLargeException。


查看kafka配置,默认单条消息最大1M,当单条消息长度超过1M,就会出现发送到broker失败,从而导致消息在producer的队列一直累积,直到Pro OOM。


赶紧修改kafka配置,解决问题。


2 修改步骤

修改kafka的broker配置:message.max.bytes(默认1000000B),单条消息最大长度。使用kafka时,应预估单条消息的最大长度,不然会发送失败

修改kafka的broker配置:replica.fetch.max.bytes (默认1MB),broker可复制的消息的最大字节数。应该比message.max.bytes大,否则broker会接收此消息,但无法将此消息复制出去,从而造成数据丢失

修改消费者程序端配置:fetch.message.max.bytes (默认1MB) – 消费者能读取的最大消息。应该≥message.max.bytes。若不调节该参数,会导致消费者无法消费到消息,且不会爆出异常或警告,导致消息在broker累积

按需调整上三参数。


3 是否参数调节得越大越好

或者说,单条消息越大越好?参考http://www.mamicode.com/info-detail-453907.html说法:


3.1 性能

通过性能测试,kafka在消息为10K时吞吐量达到最大,更大消息降低吞吐量,在设计集群的容量时,尤其要考虑。


3.2 可用的内存和分区数

Brokers会为每个分区分配replica.fetch.max.bytes参数指定的内存空间,假设


replica.fetch.max.bytes=1M


且有1000个分区,则需近1G内存,确保分区数最大的消息不会超过服务器内存,否则OOM。


消费端的fetch.message.max.bytes指定最大消息需要的内存空间,同样,分区数最大需要内存空间不能超过服务器内存。所以,若你有大消息要传送,则在内存一定时,只能:


使用较少分区数

或使用更大内存的服务器

3.3 GC

更大的消息会让GC更长(因为broker需分配更大的块),关注GC日志和服务器日志信息。若长时间的GC导致kafka丢失了zk的会话,则需配置zookeeper.session.timeout.ms参数为更大的超时时间。

目录
相关文章
|
消息中间件 存储 分布式计算
运维zookeeper+kafka
zookeeper+kafka
133 1
BXA
|
消息中间件 存储 Prometheus
Kafka运维与监控
Kafka是由Apache Software Foundation开发的一款分布式流处理平台和消息队列系统 可以处理大规模的实时数据流,具有高吞吐量、低延迟、持久性和可扩展性等优点 常用于数据架构、数据管道、日志聚合、事件驱动等场景,对Kafka的运维和监控十分必要 本文旨在介绍Kafka的运维和监控相关内容
BXA
281 0
|
消息中间件 SQL JSON
【大数据开发运维解决方案】Kylin消费Kafka数据流式构建cube
文章开始之前先说明环境情况,这里kylin消费的kafka数据是从Oracle 数据库用Ogg For Bigdata以json格式将数据投递到kafka topic的,投递的时候,关于insert和update 之前的数据投递到名为 ZTVOUCHER_INS 的topic,而delete和update之后的数据投递到名为 ZTVOUCHER_DEL 的topic中,这里主要介绍kylin如何消费数据创建流式cube。
【大数据开发运维解决方案】Kylin消费Kafka数据流式构建cube
|
消息中间件 XML 存储
【夯实Kafka实战性能调优技能】消息队列服务端出现内存溢出OOM以及相关性能调优实战分析
【夯实Kafka实战性能调优技能】消息队列服务端出现内存溢出OOM以及相关性能调优实战分析
607 0
|
消息中间件 Java Kafka
Kafka技术专题之「问题分析篇」消息队列服务端出现内存溢出OOM以及相关实战分析系列
Kafka技术专题之「问题分析篇」消息队列服务端出现内存溢出OOM以及相关实战分析系列
388 0
|
消息中间件 运维 Kafka
【kafka 运维】 kafka-consumer-groups.sh 消费者组管理
消费者组管理 kafka-consumer-groups.sh 1. 查看消费者列表--list sh bin/kafka-consumer-groups.sh --bootstrap-server xxxx:9090 --list 先调用MetadataRequest拿到所有在线Broker列表 再给每个Broker发送ListGroupsRequest请求获取 消费者组数据 2. 查看消费者组详情--describe
【kafka 运维】 kafka-consumer-groups.sh 消费者组管理
|
消息中间件 运维 监控
【kafka运维】ConfigCommand运维脚本
ConfigCommand Config相关操作; 动态配置可以覆盖默认的静态配置; 1 查询配置 Topic配置查询 展示关于Topic的动静态配置 1.1.查询单个Topic配置(只列举动态配置)
【kafka运维】ConfigCommand运维脚本
|
消息中间件 运维 Java
【kafka运维】Leader重新选举运维脚本
【kafka运维】Leader重新选举运维脚本
|
消息中间件 运维 Kafka
呕心沥血20万字《Kafka运维与实战宝典》免费开放下载了
呕心沥血20万字《Kafka运维与实战宝典》免费开放下载了
|
消息中间件 运维 网络协议
【kafka运维】Topic的生产和消费运维脚本
1.Topic的发送kafka-console-producer.sh 1.1 生产无key消息 ## 生产者 bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test --producer.config config/producer.properties 1.2 生产有key消息加上属性--property parse.key=true