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