我有一个用Go编写的服务器端应用程序,用于制作卡夫卡事件。它可以正常运行数天,每秒产生约1.6k消息,然后遇到一个偶发问题,所有卡夫卡消息发送都停止,需要手动重启服务器应用程序才能恢复卡夫卡消息发送。
我已经附上了事件开始时的度量图截图。要注释我所看到的情况:
-
在七天的时间里,这个应用程序运行得非常完美。对于排队的每封邮件,都会向发送一个传递事件通知
kafkaProducer.Events()
.您可以看到num queued=num delivered。
-
10:39:问题开始了。传递通知计数迅速降至零。卡夫卡消息不断排队,但回调停止了。
-
10:52:
kafkaProducer.ProduceChannel()
已满,并尝试将新消息排队进入go通道阻止goroutine。此时,除非手动重新启动,否则应用程序将不会再发送另一条卡夫卡消息。
-
17:55:我手动重新启动了应用程序。卡夫卡消息队列/传递继续。卡夫卡的尝试次数降至零。
我的围棋代码发送卡夫卡信息的唯一地方是:
recordChannelGauge.Inc()
kafkaProducer.ProduceChannel() <- &msg
recordChannelGauge.Dec()
在公制屏幕截图中,请注意
recordChannelGauge
通常保持为零,因为向卡夫卡发送消息
ProduceChannel()
不会阻塞每个
Inc()
紧接着是匹配的
Dec()
然而,当
ProduceChannel()
满了,goroutine街区和
记录仪
保持在1,并且在手动重新启动应用程序之前永远不会解除阻止。
仅供参考,我的环境详情:
-
Go服务器二进制是用golang 1.10构建的。十、
-
最新版本的
github.com/confluentinc/confluent-kafka-go/kafka
.这个库不使用版本,它使用的是最新的git commit,到本文撰写时已经有2个月了,所以我确定我使用的是最新的版本。
-
服务器操作系统Ubuntu 16.04.5
-
librdkafka1版本librdka0。11.6~1交流5。0.1-
我怀疑这是因为confluentinc go客户端中存在一些内部问题,它没有适当地处理一些错误场景。
此外,在出现问题时,我没有看到相关的日志输出。我确实看到,在问题发生之前,日志中偶尔出现卡夫卡代理断开连接和超时错误,这些错误似乎并不严重。这些日志消息每隔几个小时左右发生一次,持续数天,没有造成严重后果。
Nov 26 06:52:04 01 appserver.linux[6550]: %4|1543215124.447|REQTMOUT|rdkafka#producer-1| [thrd:kafka-broker-3:9092/bootstrap]: kafka-broker-3:9092/bootstrap: Timed out 0 in-flight, 1 retry-queued, 0 out-queue, 0 partially-sent requests
Nov 26 06:52:10 01 appserver.linux[6550]: %4|1543215130.448|REQTMOUT|rdkafka#producer-1| [thrd:kafka-broker-3:9092/bootstrap]: kafka-broker-3:9092/bootstrap: Timed out 0 in-flight, 1 retry-queued, 0 out-queue, 0 partially-sent requests
Nov 26 08:46:57 01 appserver.linux[6550]: 2018/11/26 08:46:57 Ignored event: kafka-broker-2:9092/bootstrap: Disconnected (after 600000ms in state UP)
Nov 26 08:47:02 01 appserver.linux[6550]: %4|1543222022.803|REQTMOUT|rdkafka#producer-1| [thrd:kafka-broker-2:9092/bootstrap]: kafka-broker-2:9092/bootstrap: Timed out 0 in-flight, 1 retry-queued, 0 out-queue, 0 partially-sent requests
Nov 26 08:47:09 01 appserver.linux[6550]: %4|1543222029.807|REQTMOUT|rdkafka#producer-1| [thrd:kafka-broker-2:9092/bootstrap]: kafka-broker-2:9092/bootstrap: Timed out 0 in-flight, 1 retry-queued, 0 out-queue, 0 partially-sent requests
放大到问题发生
缩小显示之前和之后