背景
- 项目使用docker swarm部署
- 服务之间使用消息中间件 kafka 通信
- Kafka 使用 star 3.7k 的
wurstmeister/kafka:2.12-2.2.1
镜像 - Zookeeper 使用
zookeeper:3.5.5
镜像
问题描述
每当Kafka和Zookeeper服务重启后,项目就会报以下错误:
org.apache.kafka.common.errors.UnknownTopicOrPartitionException:
This server does not host this topic-partition
由于是开发环境,之前每次遇到这种问题,都是粗鲁的直接清掉Kafka
和Zookeeper
的存储文件,随后重启就工作正常。
在切CICD环境之前,我们一直使用物理机部署程序在跑,在物理机上安装的Kafka和Zookeeper, 项目运行了一年多从来没出现过这种问题。
排查问题
首先仔细阅读了kafka镜像的readme文件,问题出现在下面这块:
By default each broker will get a new port number and broker id on restart. Depending on your use case this might not be desirable. If you need to use specific ports and broker ids, modify the docker-compose configuration accordingly.
默认情况下,在重启Kafk