我目前正在尝试在Docker Swarm中部署Kafka集群。 Kafka无法与Swarm的副本功能配合使用,因为每个Kafka代理(节点)都需要单独配置和访问(即,前面没有负载均衡器)。因此,每个代理都配置为具有 replicas = 1 的单个服务,例如 kafka1,kafka2 和 kafka3 服务。
每隔一段时间,将需要通过 docker stack deploy (由人员或CI / CD管道完成)更改Kafka代理的配置或映像。然后,Swarm将同时重新创建所有容器,结果,Kafka群集暂时不可用,这对于应该运行24/7的关键基础架构来说是不可接受的。而且我什至没有提到卡夫卡下面的Zookeeper集群,同样适用。
所需的行为是Swarm重新创建 kafka1 服务的容器,等待其完全启动并与其他代理同步(所有主题分区都同步),然后Swarm重新启动 kafka2 服务,等等。
我想我可以在Kafka Docker映像中构造一个运行状况检查,当Kafka代理完全同步时,它将告诉Docker引擎。但是,如何使Swarm执行跨越服务边界的滚动更新呢?它忽略Docker Compose知道的 depends_on 设置,并滚动更新策略apply to service replicas only。有想法吗?