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
- 查看 topic 是否以及存在
/usr/share/kafka/bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --list
- 查看该 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
- 删除 topic
删之前先停服务,不要让他在后面反复重启;删完之后再启动
/usr/share/kafka/bin/kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --topic ones.ones.task.updated --delete
删除之后,服务启动正常