记录下logstash kafka消费异常的问题
叮~~,您的告警信息已到账,请查收
最近开始使用ELK,日志已经上传到Kafka中,Logstash需要从Kafka读取数据,按找官网配置,运行切正常,告警是什么原因导致的呢?本地测试的时候也没有出现任何告警的情况。
运行logstash
./logstash -f logstash-2.3.4.conf -w 4 -b 2000
这是什么异常啊
Kafka::Consumer caught exception: Java::JavaLang::IllegalStateException
Iterator is in failed state
度娘一番后
./logstash -f logstash-2.3.4.conf -w 4 -b 2000 | grep MessageSizeTooLargeException
对,就是MessageSizeTooLargeException这个异常,只不过被刷刷刷刷刷掉了
那么MessageSizeTooLargeException为什么会出现呢?本地测试的时候并没有这样的问题。
咨询了公司同事:这个说明消息太大,要增加consumer fetch size
kafka中设置下面一些参数:
broker 配置:
message.max.bytes (默认:1000000) – broker能接收消息的最大字节数,这个值应该比消费端的fetch.message.max.bytes更小才对,否则broker就会因为消费端无法使用这个消息而挂起。
log.segment.bytes (默认: 1GB) – kafka数据文件的大小,确保这个数值大于一个消息的长度。一般说来使用默认值即可(一般一个消息很难大于1G,因为这是一个消息系统,而不是文件系统)。
replica.fetch.max.bytes (默认: 1MB) – broker可复制的消息的最大字节数。这个值应该比message.max.bytes大,否则broker会接收此消息,但无法将此消息复制出去,从而造成数据丢失。
consumer 配置:
fetch.message.max.bytes (默认 1MB) – 消费者能读取的最大消息。这个值应该大于或等于 message.max.bytes。
logstash的配置为
fetch_message_max_bytes
配置完后运行就正常啦。