同步运行可能会中途停止,原因可能是 worker 重启、另一个系统宕机或某条记录被拒绝。在 worker 停止或短暂故障之后,Tajo 会自行接续同步。它不会重发过去七天内已写入的记录。本页说明 Tajo 会做什么、你在同步页面上看到什么,以及少数需要你来处理的情况。
快速检查 在 Connections 下的 Syncs and mappings 中打开同步,查看 Run history 中最新的一次运行。失败的运行会说明发生了什么以及下一步该做什么。
Tajo 自行处理的事情
Cursor。 运行从同步保存的 cursor 开始,按批次读取源数据。只有当一个批次中的每条记录都已送达,cursor 才会在该批次结束时前移。如果运行失败,会保留它最后一次完整到达的位置。下一次运行从那里开始,因此被中断的批次会被重新读取,而不是被跳过。
投递台账。 每条记录在写入之前都会获得一个投递键。该键是同步、源、页面 cursor、记录在页面中的位置以及记录本身的哈希值,因此不包含个人数据。在调用目标之前,先占用该键。写入成功后,该键被标记为已完成,并保留七天。该键与发起请求的是哪次运行无关,所以重试或之后的计划运行会为同一条记录得到相同的键。在这七天内,会直接使用已保存的结果,不会再次调用目标。这就是重放的批次不会写入两次的原因。
同一时间只有一次运行。 每个同步都有一个租约,由正在进行的运行在其整个生命周期内持有。租约有自己的令牌,有效期为 15 分钟,运行工作期间每 5 分钟续期一次。失去租约的运行会在下一次写入或检查点之前停止,以避免重复写入。worker 停止后,它的租约不再续期,并会在 15 分钟内过期。
自动重试。 队列中的运行失败后最多有五次尝试。Tajo 在第二次尝试前等待 60 秒,之后依次等待 120、240 和 480 秒。你自己发起的重试或测试运行只执行一次。与正在进行的运行发生冲突的运行不会被重试,已发布版本或连接不再有效的运行也不会被重试。
卡住的运行。 对于 Tajo 按计划运行的同步,如果某次运行已开始超过一小时且不再持有租约,它会被关闭,并有一个新的运行进入队列。被关闭的运行会显示 “The run stopped reporting progress and was closed.”(该运行已停止报告进度并被关闭)。因此,停止的运行的租约最多持续 15 分钟,计划同步中卡住的运行会在一小时后被替换。了解数据同步 列出了哪些同步按计划运行。
多次失败后暂停。 如果自上次修改同步以来最近五次已结束的运行全部失败,Tajo 会暂停该同步。它的页面会显示 “Paused automatically by the failure circuit breaker” 以及最后一个错误。只要有一次运行成功,计数就会清零。没有任何机制会自动重新启动已暂停的同步:在你修复原因并重新发布之前,它会一直保持暂停。
每小时检查。 每小时的第 13 分钟,Tajo 会针对每个有活跃同步、但过去 24 小时内没有成功运行的工作区,向自己的团队发出告警。这也包括完全没有记录任何运行的工作区。告警只发送一次,只有在某次运行成功之后才会再次发送。如果一个工作区中最早的活跃同步是在不到 24 小时前启用或修改的,暂时不会检查它。这个告警发给 Tajo,而不是发给你,也不会改变你的同步。
你会看到什么
从 Syncs and mappings 打开同步。Run history 列出每次运行,包括已写入记录数与已读取记录数、失败数、持续时间和开始时间。状态为 Queued、Running、Succeeded、Partial(部分记录失败)或 Failed。
- 正在运行、但 2 分钟内没有报告进度的运行会显示 “Waiting for a fresh progress update”(正在等待新的进度更新)。
- 失败的运行会显示一句说明发生了什么、一句说明下一步该做什么、失败名称以及运行 id。
- Syncs 页面上的 View DLQ 列出所有同步中失败和部分失败的运行,每个都带有 Retry 按钮。
该怎么做
- 查看最新一次失败的运行。 其中”该做什么”那一行就是下一步。下表列出了你最可能遇到的失败。
- 如果显示 “Nothing”(无需操作),请等待。 下一次计划运行会自行恢复。
- 如果提示重新运行同步, 请在 View DLQ 中找到失败的运行,按下 Retry。重试会从保存的 cursor 开始,所以已写入的批次不会再次写入。重试成功后,失败的运行会从列表中移除。
- 如果同步已被暂停, 请修复横幅中指出的原因,然后通过 Publish sync 或 Request publish approval 重新发布同步。
- 如果同样的失败再次出现, 请把失败运行下方显示的运行 id 发给我们。
每个失败名称都对应一句说明发生了什么、一句说明下一步该做什么,以及由谁修复:你或 Tajo。
| 失败名称 | 发生了什么 | 该做什么 | 由谁修复 |
|---|---|---|---|
lease_conflict | 该同步的另一次运行已在进行中。 | 无需操作。进行中的运行会完成;下一次计划运行会正常开始。 | Tajo |
lease_lost | 运行中途失去了运行名额,为避免重复写入而停止。 | 重新运行同步。 | Tajo |
lease_unavailable | 同步无法预留运行名额。 | 重新运行同步。如果以同样方式失败,请把运行 id 发给我们。 | Tajo |
stale_job_swept | 该运行已停止报告进度并被关闭。 | 重新运行同步。 | Tajo |
provider_rate_limited | 另一个系统要求我们放慢速度。 | 无需操作。等待下一次计划运行。 | Tajo |
provider_unavailable | 另一个系统不可用或未能及时响应。 | 无需操作。等待下一次计划运行。如果一整天都以同样方式失败,请把运行 id 发给我们。 | Tajo |
connection_missing | 同步使用的某个工具在此工作区中未连接;运行会指出是哪个工具。 | 连接该工具,然后重新运行同步。 | 你 |
connection_unauthorized | 另一个系统拒绝了我们的访问。 | 重新连接该连接以获得新的授权,然后重新运行同步。 | 你 |
destination_rejected | 目标拒绝了本次运行中的所有记录。 | 对照目标的必填字段和格式检查字段映射,然后重新运行同步。 | 你 |
node_failed | 同步的某个步骤在读取、转换或写入记录时失败。 | 打开该运行,查看哪个步骤失败以及原因,修复后重新运行同步。 | 你 |
attestation_rule_not_active | 此同步已暂停。 | 恢复同步以运行它。 | 你 |
attestation_publication_not_attested | 此版本的同步尚未发布。 | 发布同步。对同步的更改在发布之前不会运行。 | 你 |
unclassified_exception | 同步因我们尚未归类的原因而失败。 | 重新运行同步。如果以同样方式失败,请把运行 id 发给我们。 | Tajo |
可能出现的问题
- Retry 返回 “This sync rule is already running.” 只要该同步有任何运行显示为 Queued 或 Running,你发起的重试或测试运行就会被拒绝,包括 worker 已停止的运行。对于 Tajo 按计划运行的同步,该运行在开始超过一小时后会被关闭并替换。对于其他同步,请把运行 id 发给我们。
- 同步失败超过七天。 七天之后,台账会忘记已完成的写入。此后重放的批次可能会再次写入记录,因此请检查目标中是否有重复联系人。
- 一个同步没有动静,另一个却正常。 每小时检查监控的是工作区,而不是每个同步。同一工作区中一个正常的同步会掩盖一个没有动静的同步,所以请查看每个同步的 Run history。
- 你想要不同的限制。 五次失败后暂停和 24 小时检查是为整个 Tajo 部署设置的,不能按同步单独设置。