Openflow Connector for Salesforce Bulk API 故障排除

备注

此连接器受 Snowflake 连接器条款 的约束。

本主题介绍如何对 Openflow Connector for Salesforce Bulk API 进行故障排除。

监控

要跟踪从 Salesforce 同步到 Snowflake 的数据量,请查询事件表。以下示例查询检索过去 30 分钟的相关日志:

SELECT
  timestamp,
  Deployment_ID,
  Runtime_Key,
  parsed_log:level as log_level,
  parsed_log:loggerName as logger,
  parsed_log:formattedMessage as message,
  parsed_log
FROM (
  SELECT
    timestamp,
    resource_attributes:"openflow.dataplane.id" as Deployment_ID,
    resource_attributes:"k8s.namespace.name" as Runtime_Key,
    TRY_PARSE_JSON(value) as parsed_log
  FROM OPENFLOW.TELEMETRY.EVENTS
  WHERE true
    AND timestamp > dateadd('minutes', -30, sysdate())
    AND record_type = 'LOG'
    AND resource_attributes:"k8s.namespace.name" like 'runtime-%'
  ORDER BY timestamp DESC
)
WHERE true
  AND logger = 'org.apache.nifi.processors.standard.LogMessage'
  AND message LIKE '%SALESFORCE_BULK_API%';

故障排除

使用以下信息排查与连接器有关的问题。

身份验证与 OAuth 错误

该连接器使用 OAuth 2.0 JWT Bearer Flow 与 Salesforce 进行身份验证。身份验证误通常发生在初始设置阶段,在启动连接器前,可以使用控制器服务上的 验证功能 进行诊断。

invalid_grant 错误

invalid_grant 错误表示 Salesforce 拒绝了 OAuth 令牌请求。常见原因包括:

  • OAuth 流类型错误。 Salesforce 中的外部客户端应用程序未勾选 Enable JWT Bearer Flow 复选框。该连接器需要特定的流程。不支持其他 OAuth 流程(如授权码流程)。请参阅 在 Salesforce 中创建外部客户端应用程序

  • 私钥与证书不匹配。 连接器中配置的私钥(Connected App Key 参数)与上传到 Salesforce 外部客户端应用的公钥证书不一致。

  • 使用者密钥错误。OAuth2 Client ID 参数与上传证书的外部客户端应用程序的 Consumer Key 不匹配。

  • 凭据跨多个应用程序混用。 如果您创建了多个外部客户端应用程序或尝试了不同配置,客户端 ID、证书和私钥可能属于不同的应用程序。这三者必须全部来自同一个外部客户端应用程序。

  • 已弃用的连接应用程序。 Salesforce 已弃用连接应用程序,转而使用外部客户端应用程序。如果您使用的是连接应用程序,Snowflake 建议改为新建外部客户端应用程序。

  • 令牌端点 URL 错误。 OAuth2 Token Endpoint URL 参数必须指向正确的 Salesforce 实例。例如:https://myCompany.my.salesforce.com/services/oauth2/token

  • 受众错误。 在生产环境中,OAuth2 Audience 参数必须设为 https://login.salesforce.com;在沙盒或测试环境中,必须设为 https://test.salesforce.com

权限错误

如果 JWT 令牌已成功生成但用户仍缺乏权限,则会显示权限或授权错误。这意味着 JWT Bearer Flow 运行正常,但 Salesforce 用户(OAuth2 主体)未获得使用该外部客户端应用程序的授权。

要解决此问题,请执行以下步骤:

  1. 在 Salesforce 中,进入外部客户端应用程序的 Policies 选项卡。

  2. 验证 Permitted Users 是否已设置为 Admin approved users are pre-authorized

  3. 验证在 App Policies 部分中分配的配置文件或权限集是否包含连接器 OAuth2 Subject 参数中指定的该用户。

有关更多详细信息,请参阅 批准用户的客户端应用程序

检查连接器状态

您可以检查连接器状态,以确保数据按预期复制。连接器会维护当前和过去操作的状态,以确保不会遗漏任何 Salesforce 更改,并在失败时重试批量作业查询。

要查看状态,请执行以下操作:

  1. 右键点击画布并选择 Controller services

  2. 找到名为 Salesforce Bulk Jobs State 的控制器服务。

  3. Salesforce Bulk Jobs State 菜单中,点击 View state

状态是一组键/值对,其中键是 Salesforce 对象类型。例如,Account 对象的状态可能如下例所示:

{"previousLast":"2025-09-30T09:41:23.484406926Z","currentLast":"2025-09-30T09:41:23.484406926Z","status":"COMPLETED"}

status 可以是以下项之一:

  • IN_PROGRESS

  • COMPLETED

  • FAILED

  • ABORTED

如果状态为 IN_PROGRESS,则表明仍在为该对象类型处理 FlowFile。

小心

请勿手动删除流文件。这可能会导致作业无限期保持在 IN_PROGRESS 状态,因为无法手动更新状态。

如果发生这种情况,您必须为该对象类型执行完整的重新加载操作。

强制完整加载给定对象类型

要强制连接器对一种或多种对象类型执行完整刷新,请执行以下操作:

  1. 停止流中的所有处理器。

  2. 确保未在处理传输中的 FlowFiles。

  3. 右键点击画布并选择 Disable all controller services

  4. 转到 Controller services 并打开名为 Salesforce Bulk Jobs State 的控制器服务的状态。

  5. 执行以下某项操作:

    • 选择 Clear state 以清除整个状态。这将强制完整加载连接器提取的 所有 已配置对象类型。

    • 选择特定对象类型旁边的垃圾桶图标,仅清除特定对象类型的状态。这将强制在下次连接器执行时完整加载该特定对象类型。

  6. 在画布中,右键单击,选择 Enable all controller services,然后启动所有处理器。

如果对象类型仍处于 IN_PROGRESS 状态

如果给定对象类型的状态卡在 IN_PROGRESS,并且该对象类型没有传输中的 FlowFiles,FlowFile 在可以更新状态之前,可能已被手动删除。

在这种情况下,您必须对该对象类型执行完整加载,以确保连接器捕获所有事件。

如果状态卡在 IN_PROGRESS 但没有手动删除 FlowFiles,请联系 Snowflake 支持部门