Java client 写 Kafka 失败的处理,client和server都得把配置参数优化一下

1,java.util.concurrent.ExecutionException:org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for topic-partion: 3000 ms has passed since batch creation plus linger time
2,java.util.concurrent.ExecutionException:org.apache.kafka.common.errors.NetworkException: The server disconnected before a response was received.
3,java.util.concurrent.ExecutionException:org.apache.kafka.common.errors.NotLeaderForPartionException: This server is not the leader for that topic-partition

在使用Java producer发送数据到kafka的时候,出现了上面的至少3种异常。

  • 1,首先增加kafka服务器的每个broker的内存。写不进去kafka,可以看看各个broker的kafka日志,有没有oom的异常,有就扩内存。没有也考虑一下内存设置是否够大。
  • 2,增加kafka的partition分区数量,我们这是由20变48个,这个数字也是有讲究的,这个48个分区,选的吉利,方便扩展broker的个数,2,3,4,6,8,12,14,,,也就是说48的约数比较多,相应的集群broker数量也好扩展,充分均匀分布式。还有就是分区多,对应的线程也就多,并发量就大,对读写有一定好处。
  • 3,kafka服务端有个参数 message.max.bytes broker端能够接收的最大消息大小,约977KB,你发的消息体大的,可以扩展这个值,具体常用的几个参数,即调优推荐参考链接:kafka server/broker 服务端的参数配置说明
  • 4,kafka producer 的参数优化,一般简单测试发数据到kafka就是配置上2个字符串序列化方式,加上kafka的server地址和topic就够了,若是producer发送数据到缓存的速度大于kafka自己线程的发送速度,就会造成积压,可以调整producer的缓存大小和批处理个数,以及最大消息体大小,发送之后等待确认收到的返回的时间设置,还可以尝试增加producer的个数来提高写kafka的效率。常用的几个参数说明参考链接:Java kafka producer 的常用参数的意义说明及建议
  • 5,增大服务器的句柄数的设置,kafka多线程都在写文件,当句柄数占用到极限的时候,kafka就会一不写,二也不让读,或者只读不写等情况。这个时候就要修改Linux服务器的最大句柄数来增大kafka服务器的读写能力。我们这次也是因为这个才处理了kafka上面的问题,上面的问题就是因为kafka的压力太大,写不过来了,导致出现超时的异常。
  • 6,是不是已经有跨域访问的问题了?kafka服务的broker的配置,conf目录下的server.properties,大概叫这个名字吧,里面的host.name=192.168.1.191的配置是不是正确的IP地址,而不是没有配置或者配置的是机器名字,要是这么滴,那跨域写kafka就不行了,服务器的hosts配置上机器映射,kafka的config文件中加 listeners=PLAINTEXT://192.168.22.171:9092。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值