设计一套Kafka到RocketMQ的双写+双读技术方案,实现无缝迁移!

设计一套Kafka到RocketMQ的双写+双读技术方案,实现无缝迁移!

1、背景

假设你们公司本来线上的MQ用的主要是Kafka,现在要从Kafka迁移到RocketMQ去,那么这个迁移的过程应该怎么做呢?应该采用什么样的技术方案来做迁移呢?

2、方案

介绍一个MQ集群迁移过程中的双写+双读技术方案。

3、具体逻辑

简单来说,如果你要做MQ集群迁移,是不可能那么的简单粗暴的,因为你不可能说在某一个时间点突然之间就说把所有的Producer系统都停机,然后更新他的代码,接着全部重新上线,然后所有Producer系统都把消息写入到RocketMQ去了

一般来说,首先你要做到双写,也就是说,在你所有的Producer系统中,要引入一个双写的代码,让他同时往Kafka和RocketMQ中去写入消息,然后多写几天,起码双写要持续个1周左右,因为MQ一般都是实时数据,里面数据也就最多保留一周。

当你的双写持续一周过后,你会发现你的Kafka和RocketMQ里的数据看起来是几乎一模一样了,因为MQ反正也就保留最近几天的数据,当你双写持续超过一周过后,你会发现Kafka和RocketMQ里的数据几乎一模一样了。

但是光是双写还是不够的,还需要同时进行双读,也就是说在你双写的同时,你所有的Consumer系统都需要同时从Kafka和RocketMQ里获取消息,分别都用一模一样的逻辑处理一遍。

只不过从Kafka里获取到的消息还是走核心逻辑去处理,然后可以落入数据库或者是别的存储什么的,但是对于RocketMQ里获取到的消息,你可以用一样的逻辑处理,但是不能把处理结果具体的落入数据库之类的地方。

你的Consumer系统在同时从Kafka和RocketMQ进行消息读取的时候,你需要统计每个MQ当日读取和处理的消息的数量,这点非常的重要,同时对于RocketMQ读取到的消息处理之后的结果,可以写入一个临时的存储中。

同时你要观察一段时间,当你发现持续双写和双读一段时间之后,如果所有的Consumer系统通过对比发现,从Kafka和RocketMQ读取和处理的消息数量一致,同时处理之后得到的结果也都是一致的,此时就可以判断说当前Kafka和RocketMQ里的消息是一致的,而且计算出来的结果也都是一致的。

这个时候就可以实施正式的切换了,你可以停机Producer系统,再重新修改后上线,全部修改为仅仅写RocketMQ,这个时候他数据不会丢,因为之前已经双写了一段时间了,然后所有的Consumer系统可以全部下线后修改代码再上线,全部基于RocketMQ来获取消息,计算和处理,结果写入存储中。

相关推荐

  1. 前端实现token无感刷新技术方案

    2024-06-07 11:34:01       21 阅读
  2. 从HTTP迁移HTTPS:篇全面测试方案设计指南

    2024-06-07 11:34:01       11 阅读
  3. RocketMQ从搭建

    2024-06-07 11:34:01       34 阅读
  4. rocketmq从部署+dashbord

    2024-06-07 11:34:01       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-07 11:34:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-07 11:34:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-07 11:34:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-07 11:34:01       20 阅读

热门阅读

  1. 深入理解 Spring Boot 启动原理

    2024-06-07 11:34:01       11 阅读
  2. transformers DataCollator介绍

    2024-06-07 11:34:01       8 阅读
  3. 事务 ---- mysql

    2024-06-07 11:34:01       9 阅读
  4. python的视频处理FFmpeg库使用

    2024-06-07 11:34:01       10 阅读
  5. C# 证件照替换底色与设置背景图---PaddleSegSharp

    2024-06-07 11:34:01       9 阅读
  6. 详解MySQL的间隙锁

    2024-06-07 11:34:01       9 阅读
  7. mm-qcamera-daemon主函数分析

    2024-06-07 11:34:01       7 阅读
  8. Mysql基础进阶速成版

    2024-06-07 11:34:01       7 阅读
  9. 在 Vue 中实现算法可视化

    2024-06-07 11:34:01       10 阅读
  10. Elixir学习笔记——关键字列表和映射

    2024-06-07 11:34:01       8 阅读
  11. SwiftUI二列表和导航

    2024-06-07 11:34:01       7 阅读