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的压力太大,写不过来了,导致出现超时的异常。

 

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页