我的团队观察到,如果经纪人流程不洁,那么它将阻止 生产环境 者向kafka主题发送消息 .

以下是如何重现问题:1)创建一个带有三个代理(A,B和C)的Kafka 0.10 . 2)使用replication_factor = 2创建主题3)将 生产环境 者设置为发送带有“acks = all”的消息,这意味着必须先创建所有副本才能继续下一条消息 . 3)强制IEM(IBM Endpoint Manager)向代理A发送补丁并强制服务器在安装补丁后重新启动 .

注意:min.insync.replicas = 1

结果: - 生产环境 者在代理重新启动后无法向kafka主题发送消息,并返回加入群集并显示以下错误消息 . [2016-09-28 09:32:41,823] WARN在获取具有相关ID 0的元数据时出错:(org.apache.kafka.clients.NetworkClient)

我们怀疑对于我们的kafka环境,replication_factor(2)的数量是不够的,但实际上需要解释当代理面临不洁关闭时会发生什么 . 设置具有2个代理和replication_factor = 1的群集时发生同样的问题 .

我用来恢复服务的解决方法是清理kafka主题日志文件和zookeeper数据(rmr / brokers / topics / XXX和rmr / consumers / XXX) .

谢谢,Anukool