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