我使用sarama(1.27) ClusterAdmin来管理kafka1.1.0中的主题。我管理kafka主题的应用程序是作为REST服务运行的。我的应用程序在一段时间内运行良好,我可以获取/创建/删除主题。
但是经过一段时间没有任何活动后,一个新的主题请求收到错误- write tcp xxxxx:37888->xxxxx:9092: write: broken。
我偶然发现了这个How to fix broker may not be available after broken pipe。
由于我的应用程序是作为服务运行的,我如何防止管道损坏的问题?我只在应用程序退出时关闭ClusterAdmin。使用相同的ClusterAdmin连接为所有请求提供服务。我为每个请求重新初始化clusterAdmin,如果出于任何原因它是空的(通常在第一次初始化后它不是空的,所以相同的连接被重用)。
我应该在每个请求得到服务后关闭clusteradmin,然后为每个主题请求打开一个NewClusterAdmin(),还是需要使用一个keepalive选项?
下面是我的现有代码:
if admin == nil{
admin, err := NewClusterAdmin([]string{"localhost:9092"}, s.config)
..
}
topicMetadata, err := admin.DescribeTopics([]string{topicName})发布于 2021-08-02 07:11:16
我也遇到了这个错误。我解决这个问题的方法是再试几次,例如2到10次。
https://stackoverflow.com/questions/63742478
复制相似问题