View a markdown version of this page

KCL 的单表格式 - Amazon Kinesis Data Streams

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

KCL 的单表格式

从 KCL 3.5 开始,您可以使用单表格式将所有 DynamoDB 元数据合并到一个租用表中默认情况下,KCL 3.x 为每个应用程序创建三个 DynamoDB 表:租用表、工作器指标表和协调器状态表。单表格式将这三个表缩减为一个,这有助于您避免 DynamoDB 账户级别的表限制。

单表格式的工作原理

KCL 采用单表格式,将工作人员指标和协调器状态条目与租约条目一起存储在租用表中。每个项目都包含一个entityType用于区分不同记录类型的属性。

工作人员指标和协调器状态项使用与租用表相同的主键结构,但包含不同的entityType值。此属性允许 KCL 在表格扫描期间识别每个项目的用途。

KCL 的每个组件都会根据该entityType属性筛选出其业务逻辑所需的条目。例如,租赁分配管理器 (LAM) 筛选租赁和员工指标条目以执行租赁分配。

配置单表格式

如何启用单表格式取决于您当前的 KCL 版本:

  • 如果您使用的是 KCL 2.x:按照更新的迁移指南升级到 KCL 3.5。默认情况下,从 2.x 到 3.5 的新迁移使用单表格式。

  • 如果您使用的是 KCL 3.0—3.4:必须执行两阶段部署才能迁移到单表格式。请参阅以下配置和迁移步骤。

对于现有的 KCL 3.x 客户,请在中设置migrateAllEntitiesToLeaseTable配置选项。CoordinatorConfig此选项控制 KCL 是否将所有元数据实体类型存储在租赁表中。

迁移的配置值 AllEntitiesToLeaseTable
默认 效果
false

KCL 使用单独的表来显示工作人员指标和协调器状态。应用程序代码支持单表格式,但不激活它。

true

KCL 开始将工作人员指标和协调器状态数据写入租用表。在TableMigrationStatus到达DEPLOYED后在第 2 阶段部署上设置此值,这样就不会出现任何回归了。

从 KCL 3.x 迁移到单表格式需要两个阶段的部署:

  1. 第 1 阶段:部署更新后的 KCL 3.5 代码,将其migrateAllEntitiesToLeaseTable设置为false(默认)。这将安装支持单表格式但不会激活迁移的新代码。

  2. 第 2 阶段:在所有工作人员运行新代码并完成访问后DEPLOYED,并且您已确认没有回归问题,请在 migrateAllEntitiesToLeaseTable set 为 to 的情况下再次部署true以开始迁移。TableMigrationStatus

移民州

TableMigrationStateMachine管理从多表格式到单表格式的过渡。KCL 在协调器状态表中调用的单独协调器状态条目TableMigration3.5中跟踪当前迁移状态。有关状态、过渡和描述的完整列表,请参阅 KCL 单表迁移状态

单表格式迁移状态
说明 过渡条件
INIT

初始状态。所有工作人员都在工作人员指标统计数据中发出最低支持代码。工作人员继续将工作人员指标发送到传统表中,并从旧表和租赁表中读取工作人员指标和协调器状态。从功能上讲,INIT 和 DEPLOYED 之间没有区别。

所有工作人员都会在烘焙时间内稳定地发出最低支持代码。该应用程序已准备好进入第 2 阶段部署。

DEPLOYED

所有工作人员均已使用新代码部署(第 1 阶段已完成)。该应用程序支持单一表格格式,但尚未将其激活。

第 2 阶段部署从migrateAllEntitiesToLeaseTable设置为开始true

PENDING

所有工作人员都在运行新代码。KCL 将数据从工作人员指标和协调器状态表迁移到租用表中。

迁移完成后,将过去 24 小时的默认烘焙时间。

COMPLETE

迁移已完成。KCL 将租用表专门用于所有读取和写入。不再使用旧的工作人员指标和协调器状态表。

终端状态。不会发生进一步的过渡。

有关每种状态、过渡条件和完整状态机行为的详细信息,请参见 KCL 单表迁移状态机

注意

在 “待处理” 和 “完成” 状态之间的默认烘焙时间为 24 小时,但您最多可以将其配置为一周。在此期间,KCL 使用租用表进行所有读取和写入,但不删除旧表。确认迁移成功后,必须手动删除旧的工作器指标和协调器状态表。KCL 不会自动删除这些表。

迁移指标

使用 KCL,您可以使用 CloudWatch 指标监控单表迁移的进度和运行状况。使用这些指标来确认工作人员是否采用了新代码,并在迁移过程中跟踪迁移情况。您还可以在迁移期间检测 DynamoDB 读取、写入或删除错误。下表按发出指标的 KCL 操作(指标维度)以及每个指标的发布时间对指标进行分组。

无论迁移是否在进行中,当选的领导工作人员都会持续发布以下指标:

领导者随时发布的指标

操作

指标

单位

说明

TableMigration

StatusOrdinal

当前 DynamoDB 迁移状态的序数:0= 未知,= 初始1化,= 已部署,2= 待处理,3= 完成。4

WorkerMetrics

FleetMinSupportCode

车队中所有拥有租赁的工人的最低支持代码。

只有在迁移进行时,当选的领导工作人员才会发布以下指标:

领导者在迁移期间发布的指标

操作

指标

单位

说明

TableMigration

Phase1Worker

计数

支持使用单个 DynamoDB 表进行操作但尚未迁移到使用单一表的工作人员数量。

TableMigration

Phase2Worker

计数

已迁移到写入单个表的工作人员人数。在表迁移完成之前,这些工作人员可能仍会从多个表中读取。

TableMigration

PrePhase1Worker

计数

在 3.5 之前的版本上无法支持对单个 DynamoDB 表进行操作的工作器数量。

TableMigration

WriteFault

计数

1在 DynamoDB 写入失败时,成功时0

TableMigration

DeleteFault

计数

1在 DynamoDB 删除失败时,成功时0

TableMigration

CompletionFault

计数

1当交易写入COMPLETE状态失败时,0即成功。

TableMigrationAsyncMove

Success

计数

1成功移动 CoordinatorState 条目时,失败0时。

TableMigrationAsyncMove

Time

毫秒

异步移动操作的持续时间。

TableMigrationAsyncMove

BatchCount

计数

成功移动的批次数。

迁移进行时,所有工作人员都会发出以下指标:

所有工作人员在迁移期间发布的指标

操作

指标

单位

说明

TableMigration

ReadFault

计数

1如果无法TableMigrationState从 DynamoDB 读取,则成功时0

TableMigration

Time

毫秒

状态机运行的持续时间。

TableMigrationInitialize

Success

计数

1成功初始化时,0失败时。

TableMigrationInitialize

Time

毫秒

初始化操作的持续时间。

使用这些指标来决定何时推进迁移。当StatusOrdinal始终如一2(已部署)时0,所有工作人员都支持单表格式,您可以进入表迁移部署的第 2 阶段。PrePhase1WorkerStatusOrdinal到达4(完成)后,您可以安全地删除旧表。

回滚注意事项

回滚支持取决于当前:TableMigrationStatus

  • 在第 1 阶段TableMigrationStatus已设置DEPLOYED或尚未设置):您可以安全地回滚到以前的版本。新代码在向后兼容模式下运行,没有向租赁表中的非租赁条目写入任何数据。

  • 在第 2 阶段TableMigrationStatusDEPLOYEDPENDING)期间:您可以回滚到第 1 阶段。工作人员恢复使用旧表(多表格式)来衡量工作人员指标和协调器状态。迁移已撤消。

  • 完成状态后:不支持回滚。KCL 仅使用所有实体的租赁表。即使代码回滚到第 1 阶段,工作人员仍会继续使用所有实体的租赁表,配置将被忽略。

警告

迁移达到 COMPLETE 状态后,应用程序只能在单表模式下运行。migrateAllEntitiesToLeaseTable配置被忽略,KCL 不会恢复为使用单独的表。确保移至 COMPLETE 之前的烘焙时间足够了,因为在此之后,即使是代码回滚也不会切换回多个表。

最佳实践

采用单一表格格式时,请遵循以下最佳实践:

  • 在第 1 阶段部署后,验证协调器状态条目是否TableMigration3.5达到DEPLOYED状态。在进入第 2 阶段之前,请确保没有回归。

  • 监视处于TableMigration3.5协调器状态条目,跟踪已部署、待处理和完成状态的进度。TableMigrationStatus状态作为单独的条目存储在协调器状态表中(不在租用表中),直到迁移完成。

  • 确保移至 COMPLETE 之前的烘焙时间足够了,因为在此之后,即使是代码回滚也不会切换回多个表。该应用程序仅在单表模式下运行。

  • 迁移完成后,手动删除旧的工作器指标和协调器状态表。KCL 不会自动删除这些表,它只会停止使用它们。

  • 如果您已配置CoordinatorConfig.coordinatorStateTableConfigLeaseManagementConfig.workerUtilizationAwareAssignmentConfig.workerMetricsTableConfig,则可以在迁移完成后删除这些配置。这些配置在 KCL 3.5 及更高版本中已弃用。