文档中心>消息队列 CKafka 版

迁移说明

最近更新时间:2020-06-29 16:24:54

我的收藏

操作场景

如果您需要在 CKafka 的不同实例之间迁移数据,可参照以下详细步骤进行迁移,图文解析请参考 迁移数据到 CKafka

操作步骤

1. 创建实例

新建一个新版 CKafka 实例(详情请参考 创建实例)。

2. 创建 Topic

创建与旧版 CKafka 名字相同的 Topic(详情请参考 创建 Topic)。

3. 切换生产者

切换生产者到新的 CKafka,这样旧版的 CKafka 将不再有新的消息数据。
旧版的 CKafka 存量数据消费者将继续消费,直到消费完毕。
旧版的 CKafka 无存量消息时,客户需要切换消费者的 bootstrap.servers 为新实例的地址进行消费。由于新的实例 offset 会重新从零开始,所以切换消费分组时需要根据具体业务情况进行以下操作。

3.1 开源 Kafka 工具

切换消费分组时,您可能会用到开源 Kafka 工具。n获取 Topic 指定时间的 offset 工具:
说明
该工具会根据文件修改时间获取 offset,精度会差些,但是可以适配老版本(Kafka 0.9及之前版本)的生产。
./kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list xxx --topic xxx --time xxxn其中 time 为 UNIX 毫秒时间,-1代表拉取最新版本的 offset,-2代表拉取最老版本的 offset。
重置消费分组 offset 工具(Kafka 0.11及之前版本包含该工具)n ./kafka-consumer-groups.sh --new-consumer --bootstrap-server xxx --reset-offsets --to-datetime xxx(例如'2019-03-05T00:00:00.000')--group xxx --topic xxx -excuten 使用该工具时,若采用指定时间去重置的方式需要注意,生产者必须是 Kafka 0.10及以上版本,否则由于老版本的生产,未有任何时间戳导致时间不对,重置的位置也就不对。
重置 Kafka 0.10及之前版本生产的没有时间戳的 offsetn您需要组合获取 Topic 指定时间和重置消费分组两个 offset 工具。
1. 拉取 offset。n ./kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list xxx --topic xxx --time xxxn其中 time 为 UNIX 毫秒时间,-1代表拉取最新版本 offset,-2代表拉取最老版本的 offset。
2. 用工具通过文件的方式指定每个 partition 的 offset 进行重置。n ./kafka-consumer-groups.sh --new-consumer --bootstrap-server xxx --reset-offsets --from-file xxx --group xxx -excuten其中 file 是以行为单位 csv 格式的 topic、partition、offset。

3.2 切换前已同步老版实例数据到新实例

消费分组方式由 broker 管理 offset:
如果容忍切换消费时丢失少量的数据,则在迁移消费者时,设置配置 auto.offset.reset 为 latest(该值是默认值,如果之前的程序并未设置过该值,则可以不用做任何更改)。
如果不容忍丢失,则需要记录大概切换生产者的时间,然后通过 [开源 Kafka 的工具安装](#开源 Kafka 工具) 中的步骤进行相关设置。
客户自己保存 offset:n由于新的实例对应的 partition 的 offset 会变,所以需要获取对应的 offset 信息,可以根据生产切换的大概时间通过5.1的工具拉取到 offset,更新自己保存的 offset,重启消费者即可。

3.3 切换前未同步老版实例数据到新实例

消费分组方式由 broker 管理 offset:
如果容忍切换消费时丢失少量的数据,则在迁移消费者时更改 broker 地址配置后,直接重启即可。
如果不容忍丢失,则设置配置auto.offset.reset为earliest然后启动消费者即可。
客户自己保存 offset:
直接更改保存的 offset 为从0开始,然后重启即可。
如果长时间没启动新实例的消费者,实例设置的保存时间过短,可能老的数据会被删除导致 offset 并不是从0开始,这时候可以用工具安照 开源 Kafka 工具 的方法拉取最新的 offset 信息,然后用这个 offset 更新自己保存的 offset 重启消费者即可。
说明
您也可以通过生产者直接双写(也就是同时写新版和旧版),但是这样切换的时候会有重复消费数据的可能。
我们将根据客户的规模评估相应的优惠度。
推荐客户使用 Python Topic 复制脚本,迁移实例到新版本集群会比较方便(解压脚本后,提供 Readme 说明)。
文档中提到的开源脚本 下载地址>>