Skip to main content
Version: v3&v6

Kafka topic 重复导致 project-api 失败

故障表现

project-api 启动失败,报错提示 panic: Error at onStart: kafka carver: Topic with this name already exists. Topic 'ones.ones.task.updated' already exists

出现的环境

该问题在 docker 部署方式下升级到 v3.14 的版本中偶现

故障根因

问题根因是每次restart时,kafka都是被强行杀掉的,这种情况下kafka会进入故障恢复过程,在启动阶段会有一段时间可以正常连接,但是ListTopics操作不会返回任何Topic;在这期间bang-api启动了,从kafka加载Topic列表加载不到,认为所有订阅的Topic都不存在,开始创建Topic,然后就遇到Topic已存在的冲突

解决方案1

等2分钟然后手动启动 project-api

supervisorctl start ones-ai-project-api

解决方案2

  1. 查看 topic 是否以及存在
/usr/share/kafka/bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --list
  1. 查看该 topic 是否有消费积压
/usr/share/kafka/bin/kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --list|xargs -n 1 /usr/share/kafka/bin/kafka-consumer-groups.sh --bootstrap-server 127.0.0.1:9092 --describe --group|grep ones.ones.task.updated
  1. 删除 topic

删之前先停服务,不要让他在后面反复重启;删完之后再启动

/usr/share/kafka/bin/kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --topic ones.ones.task.updated --delete

删除之后,服务启动正常