实战1|分布式消息中间件Kafka业务迁移
分布式消息服务Kafka迁移指将生产与消费消息的客户端切换成连接新Kafka,部分还涉及将持久化的消息文件迁移到新的Kafka。主要涉及到以下2类场景:
业务上云且不希望业务有中断。
在上云过程中,连续性要求高的业务,需要平滑迁移,不能有长时间的中断。
迁移准备
1、配置网络环境
Kafka实例分内网地址以及公网地址两种网络连接方式。如果使用公网地址,则消息生成与消费客户端需要有公网访问权限,并配置如下安全组。
2、创建Kafka实例
Kafka的规格不能低于原业务使用的Kafka规格。具体请参考创建Kafka实例。
3、创建Topic
在新的Kafka实例上创建与原Kafka实例相同配置的Topic,包括Topic名称、副本数、分区数、消息老化时间,以及是否同步复制和落盘等。具体请参考创建Topic。
实施步骤(方案一:先迁生产,再迁消费)
指先将生产消息的业务迁移到新的Kafka,原Kafka不会有新的消息生产。待原有Kafka实例的消息全部消费完成后,再将消费消息业务迁移到新的Kafka,开始消费新Kafka实例的消息。
1、将生产客户端的Kafka连接地址修改为新Kafka实例的连接地址。
2、重启生产业务,使得生产者将新的消息发送到新Kafka实例中。
3、观察各消费组在原Kafka的消费进度,直到原Kafka中数据都已经被消费完毕。
4、将消费客户端的Kafka连接地址修改为新Kafka实例的连接地址。
5、重启消费业务,使得消费者从新Kafka实例中消费消息。
6、观察消费者是否能正常从新Kafka实例中获取数据。
7、迁移结束。
本方案为业界通用的迁移方案,操作步骤简单,迁移过程由业务侧自主控制,整个过程中消息不会存在乱序问题,适用于对消息顺序有要求的场景。但是该方案中需要等待消费者业务直至消费完毕,存在一个时间差的问题,部分数据可能存在较大的端到端时延。
实施步骤(方案二:同时消费,后迁生产)
指消费者业务启用多个消费客户端,分别向原Kafka和新Kafka实例消费消息,然后将生产业务切到新Kafka实例,这样能确保所有消息都被及时消费。
1、启动新的消费客户端,配置Kafka连接地址为新Kafka实例的连接地址,消费新Kafka实例中的数据。
说明:原有消费客户端需继续运行,消费业务同时消费原Kafka与新Kafka实例的消息。
2、修改生产客户端,Kafka连接地址改为新Kafka实例的连接地址。3、重启生产客户端,将生产业务迁移到新Kafka实例中。
4、生产业务迁移后,观察连接新Kafka实例的消费业务是否正常。
5、等待原Kafka中数据消费完毕,关闭原有消费业务客户端。
6、迁移结束。
迁移过程由业务自主控制。本方案中消费业务会在一段时间内同时消费原Kafka和新Kafka实例。由于在迁移生产业务之前,已经有消费业务运行在新Kafka实例上,因此不会存在端到端时延的问题。但在迁移生产的开始阶段,同时消费原Kafka与新Kafka实例,会导致部分消息之间的生产顺序无法保证,存在消息乱序的问题。此场景适用于对端到端时延有要求,却对消息顺序不敏感的业务。
Kafka业务迁移详情:点击此处前往
实战2|分布式消息中间件RabbitMQ业务迁移
RabbitMQ业务迁移是指将线下单机或集群实例迁移到华为云RabbitMQ实例。
方案架构
提供如下两种方案:
方案一:不迁移数据,先切换生产,再切换消费。
方案二:先迁移数据,然后同时切换生产和消费。
实施步骤(方案一:不迁移数据,先切换生产,再切换消费)
针对线下单机或集群实例,在不迁移数据的情况下,首先将消息生产切换到线上实例,不再生产消息到线下实例,消费方同时消费线下以及线上实例。当线下实例消息全部消费完后,将消息消费切换到线上实例,完成整个迁移过程。
通过以下方法,确认线下实例是否消费完成:
1、在RabbitMQ WebUI页面查看,Overview视图中,可消费消息数(Ready)以及未确认的消息数(Unacked)都为0时,说明消费完成。
2、调用API查看。
3、回显信息中“messages_ready”和“messages_unacknowledged”都为0时,说明消费完成。
实施步骤(方案二:先迁移数据,然后同时切换生产和消费)
1、在线下实例和线上实例都开启shovel插件,线上实例开启的方法请参见开启shovel插件。然后,在线下实例的RabbitMQ WebUI页面中配置shovel插件信息:Source为线下实例信息,Destination为线上实例信息,并在Source和Destination中设置需要同步的队列。
2、调用API查看。
3、回显信息中“messages_ready”和“messages_unacknowledged”都为0时,说明迁移完成。
RabbitMQ业务迁移详情:点击此处前往
实战3|分布式消息中间件RocketMQ业务迁移
RocketMQ业务迁移是指将其他厂商或者自建的RocketMQ迁移到华为云分布式消息服务RocketMQ版。
前提条件
1、配置网络环境
分布式消息服务RocketMQ版实例分内网地址以及公网地址两种网络连接方式。如果使用公网地址,则消息生产与消费客户端需要有公网访问权限,并配置如下安全组。
2、购买分布式消息服务RocketMQ版实例,具体请参考购买RocketMQ实例。
实施步骤
1、迁移元数据至分布式消息服务RocketMQ版实例。
获取其他厂商或自建RocketMQ实例的元数据。
进入RocketMQ实例的安装目录,执行以下命令,查询集群名称。
执行以下命令,导出元数据。
在控制台迁移元数据。
-登录分布式消息服务RocketMQ版控制台。
-单击RocketMQ实例的名称,进入实例详情页面。
-在左侧导航栏,选择“元数据迁移”,进入迁移任务列表页面。
-单击“创建迁移任务”,弹出“创建迁移任务”对话框。单击“确定”。
-迁移完成后,在迁移任务列表页面查看“任务状态”。
-当“任务状态”为“迁移完成”,表示所有元数据都已成功迁移。
-当“任务状态”为“迁移失败”,表示元数据中部分或全部元数据迁移失败。单击迁移任务名称,进入迁移任务详情页,在“迁移结果”中查看迁移失败的Topic/消费组名称,以及失败原因。
2、迁移生产消息至分布式消息服务RocketMQ版实例。
将生产客户端的元数据连接地址改为分布式消息服务RocketMQ版实例的元数据连接地址,重启生产业务,使得生产者将新的消息发送到分布式消息服务RocketMQ版实例中。
3、迁移消费消息至分布式消息服务RocketMQ版实例。
4、待消费组中的消息消费完之后,将消费客户端的元数据连接地址改为分布式消息服务RocketMQ版实例的元数据连接地址,重启消费业务,使得消费者从分布式消息服务RocketMQ版实例中消费消息。
5、如果有多个RocketMQ实例需要迁移到同一个分布式消息服务RocketMQ版实例中,请依次进行迁移。
RocketMQ业务迁移详情:点击此处前往
分布式消息中间件的应用场景
分布式消息中间件是在分布式系统中,支持各个模块/组件之间通信的中间件(软件),这个中间件本身也是一个分布式系统。分布式消息中间件应用场景有业务解耦、系统流控和事件驱动等。
业务解耦:系统中的各个服务之间不需要有对方的存在,只需要发布消息即可——总会有合适的“人”来处理这个消息的。
系统流控:如果上游服务的吞吐能力高于下游服务,上游洪峰可能会冲垮下游,此时消息中间件可以缓冲洪峰、堆积消息,在峰值过去后,再由下游服务慢慢消费堆积的消息。
事件驱动:系统中各个服务之间可以通过消息传递的形式驱动业务,以流式的模型处理。
分布式消息中间件教程视频
分布式消息服务DMS
分布式消息服务DMS
分布式消息服务DMS
分布式消息中间件精选推荐
1对1咨询专属顾问
华为云咨询电话:950808或4000-955-988 转1
华为云咨询电话:950808或4000-955-988 转1