连接器已知问题
编辑连接器已知问题
编辑企业搜索服务:自托管连接器
编辑自 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 手动添加缺少的配置字段来解决此错误。只需要以下两个字段属性,其余属性将由自托管连接器自动填充-
type
:str
、int
、bool
或list
之一 -
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
- 网络驱动器
单个连接器的已知问题
编辑各个连接器可能还有其他已知问题。请参阅 每个连接器的参考文档,了解特定于连接器的已知问题。