
# 迁移Kafka业务到MQS
#### 概述
Kafka业务迁移指将连接其他Kafka的生产与消费消息的客户端切换成连接ROMA Connect，部分还涉及将持久化的消息文件迁移到ROMA Connect上。
在业务迁移过程中，连续性要求高的业务，需要平滑迁移，不能有长时间的中断。
#### 迁移准备
1. 确保消息生产与消费客户端与ROMA Connect实例的消息集成MQS连接地址网络互通。您可以在ROMA Connect实例控制台的"实例信息"页面查看消息集成MQS连接地址。
   - 如果使用内网地址连接，则客户端与ROMA Connect实例应在同一VPC内。若客户端和ROMA Connect实例在不同VPC，可以通过创建VPC对等连接，将两个VPC的网络打通，实现跨VPC访问，具体请参考[VPC对等连接说明](https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0046655036.html)。
   
   - 如果使用公网地址连接，则客户端需要有公网访问权限。
    
2. 确保ROMA Connect实例的消息集成规格不能低于原业务使用的Kafka规格。消息集成规格请参考[产品规格](https://support.huaweicloud.com/productdesc-roma/product-specifications.html#section3) 。
3. 在ROMA Connect实例上创建与原Kafka相同配置的Topic，包括Topic名称、副本数、分区数、消息老化时间，以及是否同步复制和落盘等。
 
#### 方案一：先迁生产，再迁消费
- **方案介绍**
  本方案中，先将生产消息的业务迁移到ROMA Connect，原Kafka不会有新的消息生产。待原Kafka的消息全部消费完成后，再将消费消息业务迁移到ROMA Connect，开始消费新的消息。
  该案为业界通用的迁移方案，操作步骤简单，迁移过程由业务侧自主控制，整个过程中消息不会存在乱序问题。但是该方案中需要等待消费者业务直至消费完毕，存在一个时间差的问题，部分数据可能存在较大的端到端时延。
  此方案**适用于对消息顺序有要求，却对端到端时延不敏感的业务。**
  
- **迁移流程**
  1. 将生产客户端的Kafka连接地址修改为ROMA Connect实例的消息集成MQS连接地址。
  
  2. 重启生产业务，使得生产者将新的消息发送到ROMA Connect实例中。
  
  3. 观察各消费组在原Kafka的消费进度，直到原Kafka中数据都已经被消费完毕。
  
  4. 将消费客户端的Kafka连接地址修改为ROMA Connect实例的消息集成MQS连接地址。
  
  5. 重启消费业务，使得消费者从ROMA Connect实例中消费消息。
  
  6. 观察消费者是否能正常从ROMA Connect实例中获取数据。
  
  7. 迁移结束。
   
 
#### 方案二：同时消费，后迁生产
- **方案介绍**
  本方案中，消费者业务启用多个消费客户端，分别从原Kafka和ROMA Connect消费消息，然后将生产业务切到ROMA Connect，这样能确保所有消息都被及时消费。
  该方案中消费业务会在一段时间内同时消费原Kafka和ROMA Connect。由于在迁移生产业务之前，消费业务就已经运行在ROMA Connect上，因此不会存在端到端时延的问题。但是在迁移生产的开始阶段，同时消费原Kafka与ROMA Connect，会导致部分消息之间的生产顺序无法保证，存在消息乱序的问题。
  此方案**适用于对端到端时延有要求，却对消息顺序不敏感的业务**。
  
- **迁移流程**
  1. 启动新的消费客户端，配置Kafka连接地址为ROMA Connect实例的消息集成MQS连接地址，消费ROMA Connect实例中的数据。
     ![](https://support.huaweicloud.com/usermanual-roma/public_sys-resources/note_3.0-zh-cn.png)
     原有消费客户端需继续运行，消费业务同时消费原Kafka与新Kafka实例的消息。
     
  
  2. 修改生产客户端，Kafka连接地址改为ROMA Connect实例的消息集成MQS连接地址。
  
  3. 重启生产客户端，将生产业务迁移到ROMA Connect实例中。
  
  4. 生产业务迁移后，观察连接ROMA Connect实例的消费业务是否正常。
  
  5. 等待原Kafka中数据消费完毕，关闭原有消费业务客户端。
  
  6. 迁移结束。
   
 
#### 迁移持久化数据
如果需要将原Kafka的已消费数据也迁移到ROMA Connect实例，可以使用开源工具[MirrorMaker](https://github.com/miguecoll/kafka-mirror-maker)，模拟成原Kafka的消费客户端，以及ROMA Connect实例的生产客户端，将原Kafka所有消息数据迁移到ROMA Connect实例。
若原Kafka的Topic为单副本存储，ROMA Connect实例中的Topic为3副本存储，则建议ROMA Connect实例存储空间为原Kafka的3倍。
