17.12. 融合集成

Kafka数据存储可以与合流Kafka主题和合流架构注册表集成。模式注册表是版本化Avro模式的集中存储,每个模式都与特定的Kafka主题相关联。融合的Kafka数据存储将Avro模式转换为 SimpleFeatureTypes 并将记录反序列化为 SimpleFeatures

要使用融合主题,请在项下的数据存储参数映射中设置模式注册表的URL kafka.schema.registry.url 。在Geoserver中,不要选择常规的Kafka商店,而是选择“Confluent Kafka(GeoMesa)”商店。

请注意,Confluent需要融合的客户端JAR,而不是与GeoMesa捆绑在一起。如果GeoMesa Kafka二进制分布已经 installed ,然后是脚本 bin/install-confluent-dependencies.sh 可以用来下载它们。

17.12.1. 支持的Avro架构字段

支持以下AVRO架构字段类型: STRINGBOOLEANINTDOUBLELONGFLOATBYTES ,以及 ENUM 。这个 UNION 类型仅适用于的联合 NULL 和另一种受支持的类型,例如 "type": ["null","string"]

17.12.2. 支撑点 SimpleFeature

对可能是 SimpleFeature ,但不是标准Avro模式的一部分,例如 GeometryDate ,Confluent Kafka Data Store支持解释模式字段上的几个键-值元数据属性,如下所述。所有属性值都不区分大小写。

以下未列出且不是标准Avro属性的字段上的任何其他属性都将作为SFT属性用户数据包括在内。架构上的任何其他属性都将作为SFT用户数据包括在内。

17.12.2.1. geomesa.geom.format

指示该字段应解释为 Geometry 在给定的格式中。必须随身携带钥匙 geomesa.geom.type

价值

架构字段类型

描述

wkt

STRING

对象的熟知文本表示形式 Geometry

wkb

BYTES

已知的二进制表示形式 Geometry

17.12.2.2. geomesa.geom.type

指示该字段应解释为 Geometry 给定类型的。必须随身携带钥匙 geomesa.geom.format

价值

描述

Geometry

A Geometry

Point

A Point

LineString

A LineString

Polygon

A Polygon

MultiPoint

A MultiPoint

MultiLineString

A MultiLineString

MultiPolygon

A MultiPolygon

GeometryCollection

A GeometryCollection

17.12.2.3. geomesa.geom.default

指示该字段代表默认 Geometry 为此 SimpleFeatureType 。如果钥匙 geomesa.geom.formatgeomesa.geom.type 不在同一架构字段中,则此属性将被忽略。对于给定的架构,可能只有其中一个属性。

价值

描述

true

默认设置 Geometry

false

不是默认设置 Geometry

17.12.2.4. geomesa.date.format

指示该字段应解释为 Date 在给定的格式中。

价值

架构字段类型

描述

epoch-millis

LONG

从unix时代开始的毫秒数

iso-date

STRING

通用ISO日期格式

iso-datetime

STRING

通用ISO日期时间格式

17.12.2.5. geomesa.visibility.field

指定此字段的值应用作此要素的可见性 SimpleFeatureType 。对于给定的架构,可能只有其中一个属性。

价值

架构字段类型

描述

true

STRING

使用此字段的值作为要素可见性

false

STRING

请勿将此字段用作要素可见性

17.12.2.6. geomesa.exclude.field

指定是否应将此字段从 SimpleFeatureType 。所有没有此属性的字段都将包括在内。

价值

描述

true

从SFT中排除此字段

false

不要将此字段从SFT中排除

17.12.3. GeoMesa Avro模式示例

{
  "namespace": "org.locationtech",
  "type": "record",
  "name": "GeoMesaAvroSchema",
  "geomesa.index.dtg": "date",
  "fields": [
    {
      "name": "id",
      "type": "string",
      "index": "true",
      "cardinality": "high"
    },
    {
      "name": "position",
      "type": "string",
      "geomesa.geom.format": "wkt",
      "geomesa.geom.type": "point",
      "geomesa.geom.default": "true",
      "srid": "4326"
    },
    {
      "name": "timestamp",
      "type": ["null","long"],
      "geomesa.date.format": "epoch-millis"
    },
    {
      "name": "date",
      "type": "string",
      "geomesa.date.format": "iso-datetime"
    },
    {
      "name": "visibility",
      "type": "string",
      "geomesa.visibility.field": "true",
      "geomesa.exclude.field": "true"
    }
  ]
}

17.12.4. 架构覆盖配置

用于生成 SimpleFeatureType 可以有选择地通过在键上添加数据存储配置参数来覆盖每个主题 kafka.schema.overrides 。该值必须是具有顶级密钥的Typesafe配置字符串 schemas 这是一个包含从主题名称到模式定义的映射的对象。如果存在架构的覆盖,则将使用它而不是架构注册表。如果您的现有模式没有GeoMesa特性,则替代可能会很有用。

17.12.4.1. 架构覆盖示例配置

{
  "schemas": {
    "topic1": {
      "type": "record",
      "name": "schema1",
      "fields": [
        {
          "name": "id",
          "type": "string",
          "cardinality": "high"
        },
        {
          "name": "position",
          "type": "string",
          "geomesa.geom.format": "wkt",
          "geomesa.geom.type": "point",
          "geomesa.geom.default": "true"
        },
        {
          "name": "speed",
          "type": "double"
        }
      ]
    },
    "topic2": {
      "type": "record",
      "name": "schema2",
      "fields": [
        {
          "name": "shape",
          "type": "bytes",
          "geomesa.geom.format": "wkb",
          "geomesa.geom.type": "geometry"
        },
        {
          "name": "date",
          "type": ["null","long"],
          "geomesa.date.format": "epoch-millis"
        }
      ]
    }
  }
}