转换限制
编辑转换限制编辑
以下限制和已知问题适用于 Elastic 转换功能的 8.14.2 版本。这些限制分为以下几类
- 配置限制 适用于转换的配置过程。
- 操作限制 影响正在运行的转换的行为。
- Kibana 中的限制 仅适用于通过用户界面管理的转换。
配置限制编辑
最新转换中会省略以下划线开头的字段名称编辑
如果您使用 latest
类型的转换,并且源索引的字段名称以下划线 (_) 字符开头,则它们将被视为内部字段。目标索引中的文档中会省略这些字段。
如果远程集群配置正确,则转换支持跨集群搜索编辑
如果您使用 跨集群搜索,则远程集群必须支持您在转换中使用的搜索和聚合。转换会验证其配置;如果您使用跨集群搜索并且验证失败,请确保远程集群支持您使用的查询和聚合。
在转换中使用脚本编辑
只要聚合支持脚本,转换就支持在任何情况下使用脚本。但是,在转换中使用脚本时,您可能需要考虑某些因素
- 当脚本创建输出字段时,转换无法推断输出字段的索引映射。在这种情况下,您可能希望在创建转换之前自己创建目标索引的映射。
- 脚本化字段可能会增加转换的运行时间。
- 当您对
group_by
中定义的所有分组使用脚本时,转换无法优化查询,当您以这种方式使用脚本时,您将收到一条警告消息。
转换中 Painless 脚本的弃用警告编辑
如果转换包含使用已弃用语法的 Painless 脚本,则在预览或启动转换时会显示弃用警告。但是,无法批量检查所有转换中的弃用警告,因为运行所需的查询可能是一个资源密集的过程。因此,升级助手不提供由于已弃用的 Painless 语法而导致的任何弃用警告。
转换在索引字段上表现更好编辑
转换按用户定义的时间字段对数据进行排序,该字段是经常访问的。如果时间字段是 运行时字段,则在查询时计算字段值的性能影响可能会显着降低转换速度。使用转换时,请使用索引字段作为时间字段。
连续转换调度限制编辑
连续转换会定期检查源数据的更改。调度程序的功能目前仅限于一个基本的周期性计时器,该计时器可以在 frequency
范围内从 1 秒到 1 小时。默认值为 1 分钟。这旨在频繁运行。为该计时器选择 frequency
时,请考虑您的摄取速率以及转换搜索/索引操作对集群中其他用户的影响。另请注意,重试以 frequency
间隔发生。
操作限制编辑
聚合响应可能与目标索引映射不兼容编辑
首次启动枢轴转换时,它将推断目标索引所需的映射。此过程基于源索引的字段类型和使用的聚合。如果字段是从 scripted_metrics
或 bucket_scripts
派生的,则将使用 动态映射。在某些情况下,推断的映射可能与实际数据不兼容。例如,可能会发生数字溢出,或者动态映射的字段可能同时包含数字和字符串。如果您认为这可能已经发生,请检查 Elasticsearch 日志。
您可以使用 预览转换 API 查看推断的映射。请参阅 API 响应中的 generated_dest_index
对象。
如果需要,您可以通过使用 创建索引 API 创建自定义目标索引来在启动转换之前定义自定义映射。由于推断的映射不能被索引模板覆盖,因此请使用创建索引 API 来定义自定义映射。索引模板仅适用于使用动态映射的脚本派生的字段。
批处理转换可能无法考虑已更改的文档编辑
批处理转换使用 复合聚合,该聚合允许对所有存储桶进行高效分页。复合聚合尚不支持搜索上下文,因此如果在批处理数据帧进行过程中更改了源数据(删除、更新、添加),则结果可能不包括这些更改。
连续转换一致性不考虑已删除或已更新的文档编辑
虽然转换过程允许在摄取新数据时不断重新计算转换,但它也有一些限制。
仅当已更改实体的时间字段也已更新并且属于检查更改操作的范围内时,才会识别它们。原则上,这已针对新数据在摄取时获得时间戳的用例进行了设计,并且适用于此用例。
如果删除了属于源索引模式范围内的索引(例如,在删除基于时间的历史索引时),则在连续检查点处理中执行的复合聚合将在不同的源数据上进行搜索,并且仅存在于已删除索引中的实体不会从数据帧目标索引中删除。
根据您的用例,您可能希望在删除后完全重新创建转换。或者,如果您的用例可以容忍历史存档,则您可能希望在聚合中包含最大摄取时间戳。这将允许您在查看目标索引时排除最近未更新的结果。
删除转换不会删除目标索引或 Kibana 索引模式编辑
使用 DELETE _transform/index
删除转换时,既不会删除目标索引,也不会删除 Kibana 索引模式(如果已创建)。必须单独删除这些对象。
处理聚合页面大小的动态调整编辑
在转换的开发过程中,控制优先于性能。在设计考虑因素中,转换最好花更长时间在后台安静地完成,而不是快速完成并优先占用资源消耗。
复合聚合非常适用于高基数数据,支持对结果进行分页。如果在执行复合聚合搜索时发生 断路器 内存异常,我们将减少请求的存储桶数量并重试。此断路器是根据集群内的所有活动(而不仅仅是来自转换的活动)计算得出的,因此它可能只是一个临时的资源可用性问题。
对于批处理转换,请求的存储桶数量只会向下调整。值的降低可能会导致转换检查点完成的持续时间更长。对于连续转换,请求的存储桶数量会在每个检查点开始时重置为其默认值,并且 Elasticsearch 日志中可能会重复出现断路器异常。
转换会分批检索数据,这意味着它会一次计算多个存储桶。默认情况下,每次搜索/索引操作有 500 个存储桶。可以使用 max_page_search_size
更改默认值,最小值为 10。如果在将请求的存储桶数量减少到最小值后仍然出现故障,则转换将设置为失败状态。
处理多个术语的动态调整编辑
对于每个检查点,都会识别自上次执行检查以来已更改的实体。此更改后的实体列表作为 术语查询 一次一页地提供给转换复合聚合。然后,将更新应用于每页实体的目标索引。
页面 size
由 max_page_search_size
定义,该值也用于定义复合聚合搜索返回的存储桶数量。默认值为 500,最小值为 10。
索引设置 index.max_terms_count
定义了术语查询中可以使用的最大术语数。默认值为 65536。如果 max_page_search_size
超过 index.max_terms_count
,转换将失败。
对 max_page_search_size
使用较小的值可能会导致转换检查点完成的时间更长。
处理失败的转换编辑
失败的转换将保留为持久任务,应进行适当处理,方法是将其删除或解决失败的根本原因并重新启动。
使用 API 删除失败的转换时,请先使用 _stop?force=true
停止它,然后再将其删除。
如果文档尚不可搜索,则连续转换可能会给出错误的结果编辑
索引文档后,在可以搜索到该文档之前会有很短的延迟。
连续转换会定期检查自上次检查以来的时间与 now
减去 sync.time.delay
之间已更改的实体。此时间窗口移动时不会重叠。如果最近索引的文档的时间戳落在此时间窗口内,但该文档尚不可搜索,则不会更新此实体。
如果使用表示数据提取时间的 sync.time.field
并且使用零秒或非常小的 sync.time.delay
,则更有可能出现此问题。
支持日期纳秒数据类型编辑
如果您的数据使用 日期纳秒数据类型,则聚合仍以毫秒分辨率进行。此限制也会影响转换中的聚合。
不支持将数据流作为目标索引编辑
转换会更新目标索引中的数据,这需要写入目标索引。数据流 被设计为仅追加,这意味着您不能直接向数据流发送更新或删除请求。因此,不支持将数据流作为转换的目标索引。
将 ILM 作为目标索引可能会导致文档重复编辑
不建议将 ILM 用作转换目标索引。转换会更新当前目标中的文档,并且无法删除 ILM 以前使用的索引中的文档。如果您将转换与 ILM 结合使用,则在滚动更新时可能会导致文档重复。
如果您使用 ILM 来获取基于时间的索引,请考虑改用 日期索引名称。如果您的转换包含基于 date_histogram
的 group_by
,则该处理器可以在没有重复文档的情况下工作。
Kibana 中的限制编辑
转换在所有 Kibana 空间中都可见编辑
空间 使您能够在 Kibana 中组织源索引和目标索引以及其他已保存的对象,并且只查看属于您的空间的对象。但是,转换是一项长时间运行的任务,在集群级别进行管理,因此范围不限于某些空间。可以在 堆栈管理 > Kibana 下为数据视图实现空间感知,这允许对转换目标索引进行权限控制。
Kibana 中最多列出 1,000 个转换编辑
Kibana 中的转换管理页面最多列出 1000 个转换。
Kibana 可能不支持所有转换配置选项编辑
转换 API 中可能提供了一些 Kibana 不支持的配置选项。有关配置选项的完整列表,请参阅文档。