实战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查看。

curl -s -u username:password -XGET http://ip:port/api/overview

3、回显信息中“messages_ready”和“messages_unacknowledged”都为0时,说明消费完成。

实施步骤(方案二:先迁移数据,然后同时切换生产和消费)

1、在线下实例和线上实例都开启shovel插件,线上实例开启的方法请参见开启shovel插件。然后,在线下实例的RabbitMQ WebUI页面中配置shovel插件信息:Source为线下实例信息,Destination为线上实例信息,并在Source和Destination中设置需要同步的队列。

2、调用API查看。

curl -s -u username:password -XGET http://ip:port/api/overview

3、回显信息中“messages_ready”和“messages_unacknowledged”都为0时,说明迁移完成。

RabbitMQ业务迁移详情:点击此处前往

实战3|分布式消息中间件RocketMQ业务迁移

RocketMQ业务迁移是指将其他厂商或者自建的RocketMQ迁移到华为云分布式消息服务RocketMQ版。

前提条件

1、配置网络环境

分布式消息服务RocketMQ版实例分内网地址以及公网地址两种网络连接方式。如果使用公网地址,则消息生产与消费客户端需要有公网访问权限,并配置如下安全组。

2、购买分布式消息服务RocketMQ版实例,具体请参考购买RocketMQ实例

实施步骤

1、迁移元数据至分布式消息服务RocketMQ版实例。

获取其他厂商或自建RocketMQ实例的元数据。

进入RocketMQ实例的安装目录,执行以下命令,查询集群名称。

sh ./bin/mqadmin clusterList -n {nameserver地址及端口号}

执行以下命令,导出元数据。

sh ./bin/mqadmin exportMetadata -n {nameserver地址及端口号} -c {RocketMQ集群名称} -f {导出的元数据文件的存放路径}

在控制台迁移元数据。

-登录分布式消息服务RocketMQ版控制台。

-单击RocketMQ实例的名称,进入实例详情页面。

-在左侧导航栏,选择“元数据迁移”,进入迁移任务列表页面。

-单击“创建迁移任务”,弹出“创建迁移任务”对话框。单击“确定”。

-迁移完成后,在迁移任务列表页面查看“任务状态”。

-当“任务状态”为“迁移完成”,表示所有元数据都已成功迁移。

-当“任务状态”为“迁移失败”,表示元数据中部分或全部元数据迁移失败。单击迁移任务名称,进入迁移任务详情页,在“迁移结果”中查看迁移失败的Topic/消费组名称,以及失败原因。

2、迁移生产消息至分布式消息服务RocketMQ版实例。

将生产客户端的元数据连接地址改为分布式消息服务RocketMQ版实例的元数据连接地址,重启生产业务,使得生产者将新的消息发送到分布式消息服务RocketMQ版实例中。

3、迁移消费消息至分布式消息服务RocketMQ版实例。

4、待消费组中的消息消费完之后,将消费客户端的元数据连接地址改为分布式消息服务RocketMQ版实例的元数据连接地址,重启消费业务,使得消费者从分布式消息服务RocketMQ版实例中消费消息。

5、如果有多个RocketMQ实例需要迁移到同一个分布式消息服务RocketMQ版实例中,请依次进行迁移。

RocketMQ业务迁移详情:点击此处前往

分布式消息中间件的应用场景

分布式消息中间件是在分布式系统中,支持各个模块/组件之间通信的中间件(软件),这个中间件本身也是一个分布式系统。分布式消息中间件应用场景有业务解耦、系统流控和事件驱动等。

业务解耦:系统中的各个服务之间不需要有对方的存在,只需要发布消息即可——总会有合适的“人”来处理这个消息的。

系统流控:如果上游服务的吞吐能力高于下游服务,上游洪峰可能会冲垮下游,此时消息中间件可以缓冲洪峰、堆积消息,在峰值过去后,再由下游服务慢慢消费堆积的消息。

事件驱动:系统中各个服务之间可以通过消息传递的形式驱动业务,以流式的模型处理。

分布式消息中间件教程视频

分布式消息服务DMS

04:57

分布式消息服务DMS

分布式消息服务DMS

04:46

分布式消息服务DMS

分布式消息服务DMS

03:08

分布式消息服务DMS

1对1咨询专属顾问

1对1免费咨询华为云专属顾问,为您量身定制产品推荐方案
立即咨询

华为云咨询电话:950808或4000-955-988 转1

华为云咨询电话:950808或4000-955-988 转1

华为云专业的服务团队,致力于为您提供专业的售前购买咨询服务,及完善的售后技术服务,助您云上无忧