连接器已知问题

编辑

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

编辑

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 版本的部署升级可能会导致同步作业失败

    由于一个错误,从运行早于 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:任何值,只要它的 type 正确即可(list 类型值应另存为逗号分隔的字符串)

      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
    • 网络驱动器

各个连接器的已知问题

编辑

各个连接器可能存在其他已知问题。请参阅每个连接器的参考文档以了解连接器特定的已知问题。