消息队列的特点是,数据一旦被消费,则已经完成了使命,除了备份外,没有太大意义。

因此对于消息队列来说,如果想做集群迁移,只需要做到把旧的集群消费完毕即可,具体来说有以下几个步骤:

建立新集群,Topic 和 ConsumerGroup 预先备好; 开启消费者以做好准备消费新集群的数据; 把发送者的接入点(bootstrap servers)改成新集群的接入点; 待旧集群的数据消费完之后,直接下掉即可。

图解如下:

  1. 备好新集群(建好Topic和ConsumerGroup)



  2. 开启新消费者



  3. 开启新的生产者,同时下掉旧的生产者



  4. 过一段时间内,下掉旧的集群即可。

在这个过程中,您需要做的事情是:

  1. 迁移Metadata(也即Topic和ConsumerGroup)
  2. 按照顺序修改生产者和消费者的配置重启。

由于生产者和消费者都是集群化的,一台一台操作,可以做到对上层业务无感知。