librdkafka 输出连接断开日志的问题

The problem of librdkafka output connection disconnect

Posted by alovn on April 18, 2019

问题

由于要记录一些用户行为数据和系统监控指标信息,用到了kafka。.Net环境下生产者我们用的到的是 confluent-kafka-dotnet, 它底层是调用的librdkafka。运行正常,不过隔段时间会打印出这样一段异常信息:

1
localhost:9092/bootstrap: Connection closed

数据写入kafka也正常,并不会丢失数据。没有什么影响,由于平时比较忙,这个问题就暂且搁置了一段时间。

很长一段时间过去了~~,还是会经常输出这个日志。虽说没什么影响,经常需要在Kibana下查看日志,总是能看到这个信息,终究是感觉不爽,打算一探究竟解决掉这个烦人的问题。

探索

经过查询一些资料,了解到: kafka 0.9.0+ 版本会每隔一段时间主动关闭空闲连接,默认是10分钟。

namedescriptiontypedefault
connections.max.idle.msIdle connections timeout: the server socket processor threads close the connections that idle more than thislong600000

通过查询日志验证一下,发现果然是每隔10分钟输出一条连接断开的记录,命令参考: grep kafka -B 5 log.txt

在librdkafka中,有一个决定是否打印断连信息的开关。如果对接的是0.9.0+版本的kafka,建议关闭。在 https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md 中有如下一段说明:

PropertyC/PRangeDefault
log.connection.close*true,falsetrue

该开关默认是开启的, 可通过配置这个参数关闭连接断开日志输出的问题。

参考文档

开源项目