kafka 的 ClosedChannelException

在使用kafka_2.10-0.8.1.1版本的Spark实时任务中,遇到ClosedChannelException,但数据准确性未受影响,仅导致任务速度减慢。分析源码发现,此异常在kafka的BlockingChannel中抛出,可能与server.properties配置有关。调整相关参数并重启Kafka后,异常消失,实时任务执行时间减少至原来的1/10,性能显著提升。
摘要由CSDN通过智能技术生成

 

场景: kafka 版本kafka_2.10-0.8.1.1 ,spark任务刚开始正常运行,一段时间后,报下面的错误,但是数据准确性不影响,只是严重拖慢了实时任务

 [Stage 46825:=========================================> (3 + 1) / 4]17/11/04 23:14:23 WARN TaskSetManager: Lost task 0.0 in stage 46825.0 (TID 1631417, hadoopslave1): java.nio.channels.ClosedChannelException

at kafka.network.BlockingChannel.send(BlockingChannel.scala:100)

at kafka.consumer.SimpleConsumer.liftedTree1$1(SimpleConsumer.scala:78)

at kafka.consumer.SimpleConsumer.kafka$consumer$SimpleConsumer$$sendRequest(SimpleConsumer.scala:68)

at kafka.consumer.SimpleConsumer$$anonfun$fetch$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(SimpleConsumer.scala:112)

at kafka.consumer.SimpleConsumer$$anonfun$fetch$1$$anonfun$apply$mcV$sp$1.apply(SimpleConsumer.scala:112)

at kafka.consumer.SimpleConsumer$$anonfun$fetch$1$$anonfun$apply$mcV$sp$1.apply(SimpleConsumer.scala:112)

at kafka.metrics.KafkaTimer.time(KafkaTimer.scala:33)

at kafka.consumer.SimpleConsumer$$anonfun$fetch$1.apply$mcV$sp(SimpleConsumer.scala:111)

at kafka.consumer.SimpleConsumer$$anonfun$fetch$1.apply(SimpleConsumer.scala:111)

at kafka.consumer.SimpleConsumer$$anonfun$fetch$1.apply(SimpleConsumer.scala:111)

 

分析:

查看源码 kafka 源码  kafka.network.BlockingChannel ,知道该异常抛出的时候,什么都木有做,所以只是拖慢实时任务,并不影响数据准确性

 def send(request: RequestOrResponse):Int = {

    if(!connected)

      throw new ClosedChannelException()

 

    val send = new BoundedByteBufferSend(request)

    send.writeCompletely(writeChannel)

  }

 

那是什么什么造成连接kafka异常呢? 查找资料得知 kafka 的  server.properties 的下面 参数可能影响

num.network.threads=2 #处理网络请求的线程数

zookeeper.connection.timeout.ms=1000000 # kafka 连接 zookeeper 的 超时时间,如果过大,一次连接不上,就会卡死很久

 

改为

num.network.threads=3

zookeeper.connection.timeout.ms=6000

 

 

重启kafka ,该错误不再报,而且 每个实时任务的时间 减小魏原来的1/10 ,性能几乎提高 10倍

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值