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 |
|
写入长期存储的功能计数 |
org.locationtech.geomesa.lambda.stream.kafka.DataStorePersistence |
|
所有功能均写入长期存储 |
org.locationtech.geomesa.lambda.stream.kafka.KafkaStore |
|
所有写给卡夫卡的特写 |
org.locationtech.geomesa.lambda.stream.kafka.KafkaCacheLoader |
|
所有特写均摘自卡夫卡 |
org.locationtech.geomesa.lambda.stream.kafka.KafkaFeatureCache |
|
内存中缓存的大小 |
org.locationtech.geomesa.lambda.stream.kafka.KafkaFeatureCache |
|
在内存缓存中添加/删除的所有功能 |