连接器已知问题

编辑

企业搜索服务:自托管连接器

编辑

8.10.0 版本起,自托管连接器不再需要在您的 Elastic 部署中运行企业搜索服务。但是,如果您要从低于 8.9 版本升级连接器,则需要运行一次企业搜索才能将连接器迁移到新格式。

关于此迁移的一些注意事项

  • 这涉及更新存储连接器配置和同步历史记录的系统索引。
  • 这是一个就地操作,这意味着不会创建临时或备份索引。
  • 因此,在升级之前对 Elasticsearch 集群进行快照非常重要——以防万一索引迁移失败(这种情况不太可能发生)。

如果您在此迁移过程中遇到问题,请联系支持人员。

要运行自托管连接器,您的自部署连接器服务版本必须与您的 Elasticsearch 版本匹配。例如,如果您运行的是 Elasticsearch 8.10.1,则您的连接器服务应为 8.10.1.x 版本。Elastic 不支持运行版本不匹配的部署(升级期间除外)。

连接器服务

编辑

连接器服务存在以下已知问题

  • 同步大型数据库表时出现 OOM 错误

    初始同步后的同步在同步大型数据库表时可能会导致内存不足 (OOM) 错误。这是因为数据库连接器会在内存中加载和存储 ID。对于拥有数百万条记录的表,如果连接器服务的 RAM 不足,这可能会导致内存耗尽。

    要缓解此问题,您可以

    • 增加 RAM 分配:

      • Elastic Cloud:将企业搜索实例升级到更大的尺寸。请注意,对于在 Elastic Cloud 上运行的 Elastic 托管连接器,连接器服务运行在企业搜索节点上。它最多只能访问节点 RAM 分配的 40%。
      • 自托管:增加运行连接器服务的机器/容器的 RAM 分配。

        RAM 大小指南

        下表显示了将 ID 加载到内存中的估计 RAM 用量。

        ID 数量

        内存使用量(MB)(2 倍缓冲区)

        1,000,000

        ≈ 45.78 MB

        10,000,000

        ≈ 457.76 MB

        50,000,000

        ≈ 2288.82 MB(≈ 2.29 GB)

        100,000,000

        ≈ 4577.64 MB(≈ 4.58 GB)

    • 优化 同步规则

      • 查看和优化同步规则,以在同步之前过滤和减少从源检索的数据。
    • 使用自托管连接器 代替托管连接器

      • 由于自托管连接器在您的基础架构上运行,因此它们不受企业搜索节点相同的 RAM 限制。
  • 从低于 8.9.0 版本的部署升级可能会导致同步作业失败

    由于一个 bug,从低于 8.9.0 版本的部署升级后,job_type 字段映射将丢失。同步作业不会显示在 Kibana UI(作业历史记录)中,并且连接器服务将无法启动新的同步作业。这仅在您之前安排过同步作业时才会发生。

    要解决此问题,您可以使用以下命令手动添加丢失的字段并触发同步作业

    resp = client.indices.put_mapping(
        index=".elastic-connectors-sync-jobs-v1",
        properties={
            "job_type": {
                "type": "keyword"
            }
        },
    )
    print(resp)
    const response = await client.indices.putMapping({
      index: ".elastic-connectors-sync-jobs-v1",
      properties: {
        job_type: {
          type: "keyword",
        },
      },
    });
    console.log(response);
    PUT .elastic-connectors-sync-jobs-v1/_mapping
    {
      "properties": {
        "job_type": {
          "type": "keyword"
        }
      }
    }
  • 当连接器尝试从数据源获取超过 2,147,483,647(2^31-1)个文档时,连接器服务将无法同步。

    解决方法是使用多个搜索索引手动分区要同步的数据。

  • 从 8.6 或更早版本升级时,自定义调度可能会中断。

    如果您遇到错误 'custom_schedule_triggered': undefined method 'each' for nil:NilClass (NoMethodError),则表示自定义调度功能迁移失败。您可以使用以下手动解决方法

    resp = client.update(
        index=".elastic-connectors",
        id="connector-id",
        doc={
            "custom_scheduling": {}
        },
    )
    print(resp)
    const response = await client.update({
      index: ".elastic-connectors",
      id: "connector-id",
      doc: {
        custom_scheduling: {},
      },
    });
    console.log(response);
    POST /.elastic-connectors/_update/connector-id
    {
      "doc": {
        "custom_scheduling": {}
      }
    }

    此错误可能出现在并非问题原因的连接器或爬虫上。如果错误仍然存在,请尝试对 .elastic-connectors 索引中的每个文档运行上述命令。

  • 从 8.7 或更早版本升级的连接器可能会缺少配置字段

    在 8.8 之前创建的连接器有时可能会缺少配置字段。这是 MySQL 连接器的已知问题,但也可能影响其他连接器。

    如果自托管连接器引发错误 Connector for <connector_id> has missing configuration fields: <field_a>, <field_b>...,您可以通过 Dev Tools 手动添加缺少的配置字段来解决此错误。只需要以下两个字段属性,其余属性将由自托管连接器自动填充

    • typestrintboollist 之一
    • value:任何值,只要它是正确的 typelist 类型值应保存为逗号分隔的字符串)

      resp = client.update(
          index=".elastic-connectors",
          id="connector_id",
          doc={
              "configuration": {
                  "field_a": {
                      "type": "str",
                      "value": ""
                  },
                  "field_b": {
                      "type": "bool",
                      "value": False
                  },
                  "field_c": {
                      "type": "int",
                      "value": 1
                  },
                  "field_d": {
                      "type": "list",
                      "value": "a,b"
                  }
              }
          },
      )
      print(resp)
      const response = await client.update({
        index: ".elastic-connectors",
        id: "connector_id",
        doc: {
          configuration: {
            field_a: {
              type: "str",
              value: "",
            },
            field_b: {
              type: "bool",
              value: false,
            },
            field_c: {
              type: "int",
              value: 1,
            },
            field_d: {
              type: "list",
              value: "a,b",
            },
          },
        },
      });
      console.log(response);
      POST /.elastic-connectors/_update/connector_id
      {
        "doc" : {
          "configuration": {
            "field_a": {
              "type": "str",
              "value": ""
            },
            "field_b": {
              "type": "bool",
              "value": false
            },
            "field_c": {
              "type": "int",
              "value": 1
            },
            "field_d": {
              "type": "list",
              "value": "a,b"
            }
          }
        }
      }
  • 从 8.7.1 升级的 Python 连接器将以千兆字节 (GB) 而不是兆字节 (MB) 报告文档卷。

    结果,真实的文档卷将被低报 1024 倍。

  • 以下 Elastic 托管连接器在 Elastic Cloud 8.9.0 中将无法正确运行。它们仍然可用作自托管连接器。

    • Azure Blob 存储
    • Confluence Cloud 和 Server
    • Jira Cloud 和 Server
    • 网络驱动器

单个连接器的已知问题

编辑

各个连接器可能还有其他已知问题。请参阅 每个连接器的参考文档,了解特定于连接器的已知问题。