21.7. 高级主题

21.7.1. 并行性

Lambda存储有两种类型的并行性--用于长期持久化的并发编写器数量,以及每个数据存储的Kafka消费者数量。

编写器的数量由具有有效 lambda.expiry 参数;但写操作的并行度受Kafka主题中的分区数量限制(按主题和分区跨实例同步写操作)。这个 lambda.kafka.partitions 参数可以用来控制分区的数量,但请注意,一旦创建了主题,您将需要使用Kafka脚本(即 kafka-topics.sh )修改分区。

用于将功能加载到内存缓存中的使用者数量由 lambda.kafka.consumers 参数。这是每个访问的简单要素类型的每个数据存储实例的使用者数量。请注意,不建议拥有比主题分区更多的使用者,这会导致一些使用者空闲。

21.7.2. 安装提示

Lambda数据存储的典型用例是通过分析流过程提供数据。分析器将更新摘要 SimpleFeature S具有包含分析结果的派生属性。例如,当聚合GPS航迹时,可能会有一个针对当前估计航向的动态更新字段。

典型的流分析将在多个并发线程中运行,例如使用 Apache Storm 。Lambda存储基于 lambda.kafka.partitions 参数。通常,您应该从设置为正在使用的编写器线程数开始,并根据需要向上或向下调整。

任何仅用于读取的数据存储实例(例如Geoserver)通常应通过设置 expiry 参数设置为 Inf 。请注意,必须至少有一个数据存储实例具有有效 expiry ,否则功能将永远不会从内存中移除并保存到长期存储。

21.7.3. 手动持久性

您可以准确地控制何时写入功能,而不是允许自动将功能持久存储到长期存储中。为此,请将 lambda.persist 参数设置为 false 在所有数据存储实例上。使用在Lambda数据存储中写入和移除要素 SimpleFeatureWriter S照常在内存缓存中添加和删除它们。使用 lambda.persist 禁用后,这不会影响长期存储。请注意,数据存储仍将使内存中的功能过期-这是清理内部状态所必需的。请确保 lambda.expiry 参数设置得足够高,以便它不会删除您仍希望在内存中可用的功能。

要将要素写入长期存储,请实例化委托数据存储的实例 (AccumuloDataStore )使用与Lambda存储相同的连接参数。然后,Lambda存储将可以查询写入委托存储的任何功能,并将其与内存中的缓存合并。

21.7.4. 监控状态

可以通过在以下类上启用日志记录来监视Lambda数据存储的状态:

班级

水平

信息

org.locationtech.geomesa.lambda.stream.kafka.DataStorePersistence

debug

写入长期存储的功能计数

org.locationtech.geomesa.lambda.stream.kafka.DataStorePersistence

trace

所有功能均写入长期存储

org.locationtech.geomesa.lambda.stream.kafka.KafkaStore

trace

所有写给卡夫卡的特写

org.locationtech.geomesa.lambda.stream.kafka.KafkaCacheLoader

trace

所有特写均摘自卡夫卡

org.locationtech.geomesa.lambda.stream.kafka.KafkaFeatureCache

debug

内存中缓存的大小

org.locationtech.geomesa.lambda.stream.kafka.KafkaFeatureCache

trace

在内存缓存中添加/删除的所有功能