

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用混合迁移解决方案：Apache Cassandra 到 Amazon Keyspaces
<a name="migrating-hybrid"></a>

以下迁移解决方案可以被视为在线和离线迁移的混合体。使用这种混合迁移方法，可以近乎实时地将数据写入目标数据库，而无需提供写后读一致性。这意味着新写入的数据不会立即可用，会出现延迟。如果您需要写后读一致性，请参阅[在线迁移到 Amazon Keyspaces：策略和最佳实践](migrating-online.md)。

要实现近乎实时地从 Apache Cassandra 迁移到 Amazon Keyspaces，您可以在两种可用方法之间进行选择。
+ **CQLReplicator**—（推荐） CQLReplicator 是 [Github](https://github.com/aws-samples/cql-replicator) 上提供的开源实用程序，可帮助您近乎实时地将数据从 Apache Cassandra 迁移到 Amazon Keyspaces。

  要确定要传播到目标数据库的写入和更新，请 CQLReplicator扫描 Apache Cassandra 令牌范围，然后使用AWS Glue任务删除重复的事件，并将写入和更新直接应用于 Amazon Keyspaces。
+ **更改数据捕获（CDC）**- 如果您熟悉 Cassandra CDC，那么 Apache Cassandra 内置的 CDC 特征允许通过将提交日志复制到单独的 CDC 目录来捕获更改，这是实现混合迁移的另一种选择。

  为此，您可以将数据更改复制到 Amazon Keyspaces，让 CDC 成为数据迁移场景的替代方案。

如果您不需要连续写入后读取，则可以根据您的偏好和对工具的熟悉程度使用 CQLReplicator 或 CDC 管道将数据从 Apache Cassandra 迁移到 Amazon Keyspaces，并在每种解决方案中使用。AWS 服务使用这些方法近乎实时地迁移数据可以被视为一种混合迁移方法，其提供了在线迁移的替代方案。

此策略被视为一种混合方法，因为除了本主题中概述的选项外，您还必须执行在线迁移进度中的某些步骤，例如[在线迁移](migrating-online.md)主题中讨论的历史数据复制和应用程序迁移策略。

以下各节更详细地说明了混合迁移选项。

**Topics**
+ [使用迁移数据 CQLReplicator](migration-hybrid-cql-rep.md)
+ [使用更改数据捕获（CDC）迁移数据](migration-hybrid-cdc.md)

# 使用迁移数据 CQLReplicator
<a name="migration-hybrid-cql-rep"></a>

使用 [CQLReplicator](https://github.com/aws-samples/cql-replicator)，您可以使用 CQL 查询智能扫描 Cassandra 令牌环，近乎实时地从 Apache Cassandra 读取数据。 CQLReplicator 不使用 Cassandra CDC，而是实施缓存策略来减少完整扫描的性能损失。

要减少对目标的写入次数，请 CQLReplicator 自动删除重复的复制事件。使用 CQLReplicator，您可以调整从源数据库到目标数据库的更改复制，从而实现从 Apache Cassandra 到 Amazon Keyspaces 的近乎实时的数据迁移。

下图显示了使用的 CQLReplicator 作业的典型架构AWS Glue。

1. **要允许访问在私有 VPC 中运行的 Apache Cassandra，请将AWS Glue连接类型配置为网络。**

1. 要删除重复项并启用 CQLReplicator 任务的密钥缓存，请配置亚马逊简单存储服务 (Amazon S3) Service。

1.  CQLReplicator 任务流经过验证的源数据库将直接更改为 Amazon Keyspaces。

![\[CQLReplicator 用于将数据从 Apache Cassandra 迁移到 Amazon Keyspaces。\]](http://docs.aws.amazon.com/zh_cn/keyspaces/latest/devguide/images/migration/hybrid-migration-CQLRep.png)


有关使用迁移过程的更多信息 CQLReplicator，请参阅AWS数据库博客 “使用将 Cassandra 工作负载[迁移到 Amazon Keyspaces” 上的以下文章以及 CQLReplicatorAWS使用将 Apache Cassandra 工作负载迁移到 Amazon Keyspac](https://aws.amazon.com/blogs/database/migrate-cassandra-workloads-to-amazon-keyspaces-using-cqlreplicator/) [es 的规范性指南](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/migrate-apache-cassandra-workloads-to-amazon-keyspaces-using-aws-glue.html)。AWS Glue

# 使用更改数据捕获（CDC）迁移数据
<a name="migration-hybrid-cdc"></a>

如果您已经熟悉如何使用 [Debezium](https://debezium.io/) 配置更改数据捕获 (CDC) 管道，则可以使用此选项将数据迁移到 Amazon Keyspaces，以此作为替代使用。 CQLReplicatorDebezium 是 CDC 的开源分布式平台，旨在监控数据库并可靠地捕获行级更改。

[Debezium Connector for Apache Cassandra](https://debezium.io/documentation/reference/stable/connectors/cassandra.html) 将更改上传到 Amazon Managed Streaming for Apache Kafka（Amazon MSK），以便下游使用者可以使用和处理这些更改，而下游使用者反过来又可以将数据写入 Amazon Keyspaces。有关更多信息，请参阅 [Guidance for continuous data migration from Apache Cassandra to Amazon Keyspaces](https://aws.amazon.com/solutions/guidance/continuous-data-migration-from-apache-cassandra-to-amazon-keyspaces/)。

要解决任何潜在的数据一致性问题，您可以使用 Amazon MSK 实施一个流程，使用者在该流程中将 Cassandra 中的键或分区与 Amazon Keyspaces 中的键或分区进行比较。

要成功实施此解决方案，我们建议考虑以下几点。
+ 如何解析 CDC 提交日志，例如，如何删除重复的事件。
+ 如何维护 CDC 目录，例如，如何删除旧日志。
+ 如何处理 Apache Cassandra 中的部分故障，例如，如果三个副本中只有一个副本的写入操作成功。
+ 如何处理资源分配，例如增加实例的大小，以满足节点上的 CDC 进程对额外的 CPU、内存、磁盘和 IO 的要求。

这种模式将来自 Cassandra 的更改视为“暗示”，即密钥相比之前的状态可能发生了变化。要确定是否有更改要传播到目标数据库，您必须首先使用 `LOCAL_QUORUM` 操作从源 Cassandra 集群读取最新记录，然后将其写入 Amazon Keyspaces。

如果是范围删除或范围更新，则可能需要对整个分区进行比较，以确定哪些写入或更新事件需要写入到目标数据库。

如果写入并非幂等性的，则在写入 Amazon Keyspaces 之前，您还需要将写入内容与目标数据库中已有的内容进行比较。

下图显示了使用 Debezium 和 Amazon MSK 的 CDC 管道的典型架构。

![\[使用更改数据捕获管道将数据从 Apache Cassandra 迁移到 Amazon Keyspaces。\]](http://docs.aws.amazon.com/zh_cn/keyspaces/latest/devguide/images/migration/hybrid-migration-CDC.png)
