问题
由于要记录一些用户行为数据和系统监控指标信息,用到了kafka。.Net环境下生产者我们用的到的是 confluent-kafka-dotnet, 它底层是调用的librdkafka。运行正常,不过隔段时间会打印出这样一段异常信息:
1
localhost:9092/bootstrap: Connection closed
数据写入kafka也正常,并不会丢失数据。没有什么影响,由于平时比较忙,这个问题就暂且搁置了一段时间。
很长一段时间过去了~~,还是会经常输出这个日志。虽说没什么影响,经常需要在Kibana下查看日志,总是能看到这个信息,终究是感觉不爽,打算一探究竟解决掉这个烦人的问题。
探索
经过查询一些资料,了解到: kafka 0.9.0+ 版本会每隔一段时间主动关闭空闲连接,默认是10分钟。
name | description | type | default |
connections.max.idle.ms | Idle connections timeout: the server socket processor threads close the connections that idle more than this | long | 600000 |
通过查询日志验证一下,发现果然是每隔10分钟输出一条连接断开的记录,命令参考: grep kafka -B 5 log.txt
在librdkafka中,有一个决定是否打印断连信息的开关。如果对接的是0.9.0+版本的kafka,建议关闭。在 https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md 中有如下一段说明:
Property | C/P | Range | Default |
log.connection.close | * | true,false | true |
该开关默认是开启的, 可通过配置这个参数关闭连接断开日志输出的问题。
参考文档
- https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md
- https://github.com/edenhill/librdkafka/issues/516
- http://kafka.apache.org/documentation.html