kafka.consumer.SimpleConsumer:由于套接字错误而重新连接:java.nio.channels.ClosedChannelException

时间:2016-03-04 23:19:36

标签: java sockets nio apache-kafka kafka-consumer-api

我正在为kafka运行一个简单的消费者,例如:

int timeout = 80000;
int bufferSize = 64*1024;
consumer = new SimpleConsumer(host, port,timeout, bufferSize, clientName);

这可以运行几个小时,但我得到一个例外 稍后的 kafka.consumer.SimpleConsumer:由于套接字错误而重新连接:

  

java.nio.channels.ClosedChannelException

和消费者停止......以前有人遇到过这个问题吗?

1 个答案:

答案 0 :(得分:1)

一个稍有不同的问题,但也许具有相同的根本原因和解决方案是answered here,相关部分:

  

您已关闭该频道,但仍在尝试使用它。

     

您的代码有几个问题。

     

首先,您的EOS测试失败。删除limit()== 0测试。那   不表示EOS,仅表示读取长度为零,这可以   随时会以非阻止模式发生。这并不意味着同行有   关闭了他的连接端,这并不意味着您应该关闭   你的结局。

     

第二,关闭通道也会关闭套接字。你应该关闭   仅通道,而不是套接字。

     

第三,关闭频道会取消键。您不需要关注   每次关闭都会取消。

     

您也可能无法检查准备好的密钥在   在使用循环之前先选择循环,例如阅读。