17.7. 卡夫卡索引配置

GeoMesa提供了各种可用于定制和优化给定安装的配置选项。由于Kafka数据存储维护功能的内存缓存,因此这些选项中的大多数都可以在消费者数据存储上配置并立即生效。

17.7.1. 初始加载(重播)

默认情况下,Kafka消费者数据存储将从主题的末尾开始消费。这意味着它将只看到在启动后写入的新更新。或者,使用者可以从主题的前面部分开始,方法是设置 kafka.consumer.read-back 持续一段时间,例如 1 hour ,在数据存储参数中。这允许消费者重放旧消息并建立基准状态。若要读取整个消息队列,请使用 Inf

请注意,在此初始加载期间,要素存储不会返回任何查询结果,直到它赶上HEAD状态。

另请参阅 卡夫卡话题压缩 有关管理卡夫卡话题的规模和历史的详细信息。

17.7.2. 功能到期

通常,Kafka消费者数据存储将保留由生产者数据存储写入的任何特征,直到生产者使用修改特征编写器明确删除它们。或者,消费者数据存储可能会在特定超时后使功能过期,方法是指定 kafka.cache.expiry 数据存储参数。当生产者向现有功能写入更新时,消费者将重置到期超时。一旦超时没有任何更新,该功能将从消费者缓存中移除,并且在查询时不再返回。

对于高级用例, kafka.cache.expiry.dynamic 数据存储参数可用于使基于匹配过滤器谓词的要素失效。该值应该是TypeSafe配置文档,其中键是CQL过滤器字符串,值是过期持续时间字符串(例如, { "type = 'boat'": "100ms" } )。筛选器将按照声明的顺序进行评估。任何与其中一个过滤器不匹配的要素都将使用默认 kafka.cache.expiry 值(如果提供)。

如果过期时间设置为零,则不会对要素进行索引或搜索。但是,它们仍将传递给任何 feature listeners 已配置的。

17.7.3. 功能事件时间

默认情况下,过期和更新由Kafka消息时间决定。功能更新将替换任何以前的功能消息,并且功能将根据读取时间过期。或者,这些值中的一个或两个可以基于特征属性。

若要启用事件时间,请使用 kafka.cache.event-time 数据存储参数。该表达式将基于每个功能进行求值,并且必须求值为日期或表示自Java纪元以来的毫秒的数字。该值将与 kafka.cache.expiry 值以设置该功能的到期时间。

若要同时启用事件时间排序,请将 kafka.cache.event-time.ordering 数据存储参数到 true 。启用时,如果读取的功能更新的事件时间早于当前功能,则该消息将被丢弃。这对于处理不规律的更新流很有用。

17.7.4. 空间索引分辨率

Kafka消费者数据存储使用内存中的空间索引进行查询。空间索引将世界分解成一个粗略的网格,然后在运行空间查询时只检查相关的网格单元。网格大小可以通过设置 kafka.index.resolution.x 和/或 kafka.index.resolution.y 数据存储参数。默认情况下,栅格为360 x 180个单元格。提高网格分辨率可以减少查询时必须考虑的误报特征的数量,并可以减少同时更新、删除和查询之间的争用。然而,它也需要更多的内存。

17.7.5. 空间索引分层

对于具有范围(即非点)的几何图形,Kafka消费者数据存储使用分级内存空间索引进行查询。几何图形根据其信封大小存储在层中。层的数量和大小(以度为单位)可以通过设置 kafka.index.tiers 数据存储参数。默认情况下,根据大小创建四个层 1x14x432x32360x180 。通常,您希望层与要索引的几何图形的大小相对应。大于任何可用层的几何图形将不可索引;因此,标准的做法是包含一个涵盖整个世界的“包罗万象”的层。

层可由逗号分隔的数字对指定,其中每一对用 : 。例如,默认层将指定为 1:1,4:4,32:32,360:180

17.7.6. CQEngine索引

默认情况下,Kafka消费者数据存储仅创建空间索引。任何其他查询(例如,日期查询)都必须遍历索引中的所有要素。一般来说,功能的数量是合理的,这仍然是一个快速的操作。

对于更高级的用例,可以创建额外的内存中索引结构来满足非空间查询。这可以通过设置 kafka.index.cqengine 数据存储参数。该值应为逗号分隔的列表 name:type ,在哪里 name 是属性名称,并且 type 是CQEngine索引类型。看见 内存中索引 以获取更多信息。请注意,使用CQEngine时,如果没有显式配置,则不会索引默认几何图形(例如 geom:geometry 在参数值中)。此外,CQEngine可能需要比标准索引更多的处理。

作为示例,请考虑以下模式 name:String,age:Int,dtg:Date,*geom:Point:srid=4326 。要为每个属性创建索引,可以设置 kafka.index.cqenginename:radix,age:default,dtg:navigable,geom:geometry 。看见 内存中索引 有关索引类型的说明,请参阅。

17.7.7. 懒惰的反序列化

默认情况下,Kafka消费者数据存储将使用延迟(按需)反序列化功能属性。对于渲染贴图(通常只需要几何属性)或写入繁重的工作流,这可以避免反序列化和实例化可能永远无法读取的属性的开销。如果写入不频繁,或者所有功能和属性都被一致地读取,则可以通过设置 kafka.serialization.lazy 数据存储参数到 false 。懒惰反序列化导致的运行时(查询)代价非常小,因为每个属性在返回之前都必须检查反序列化。