Skip To Content

Kafka 磁盘存储

ArcGIS GeoEvent Server 使用 Apache Kafka 管理从输入到 GeoEvent 服务以及从 GeoEvent 服务到输出的所有事件流量。 Kafka 为将要发布的事件提供了一组主题(消息队列),用户可以订阅这些事件消息。 Kafka 主题队列在磁盘上进行管理,可永久存储并在系统故障后恢复消息队列。

GeoEvent Server Kafka 主题基础知识

每个 GeoEvent Server 输入和输出都具有自己的 Kafka 主题。

每个输入和输出都具有

每个 Kafka 主题划分为几个分区。 分区将事件分为三个独立的消息队列以实现平行性。 默认情况下,每个 Kafka 主题配置为创建三个主题分区。 主题的订阅者将启动多个并行运行的事件用户以提高性能。

主题中的主题分区

每个 Kafka 主题分区将复制两次,以实现弹性并提高并行度。 复本分配到磁盘上的三个不同文件夹。

主题中的主题分区复本

另请注意,Kafka 会为用户偏移量主题创建和管理大量分区。 大量的分区使得系统能够通过平行性获得良好的性能。

常规磁盘大小建议

对于新安装的 GeoEvent Server,ArcGIS GeoEvent Gateway 服务至少需要 1 GB 的磁盘空间。 在处理任何事件之前,添加的每个输入或输出都需要至少 720 MB 的额外磁盘空间。 请注意,所有大小均为最小估计值,可能会随着 GeoEvent Server 中配置元素的增加而增大。

GeoEvent Server Kafka 设置

您可以通过编辑 Kafka 属性文件来修改 GeoEvent Server Kafka 实例的行为。 修改此属性文件的主要原因是更改文件在磁盘上的位置。 但是,在极少数情况下,可能需要对其他属性进行更新。

注:

在编辑下方属性文件之前,必须根据操作系统停止 GeoEvent Server 服务或 Linux 后台程序。 保存并关闭文件后,启动 GeoEvent Server 服务,服务将使用已更新的属性。

Kafka 属性文件

您可以在以下任一目录中找到包含 GeoEvent ServerKafka 设置 (kafka.properties) 的属性文件,具体取决于您的操作系统:

  • Windows(默认)- C:\Program Files\ArcGIS\server\geoevent\gateway\etc\kafka.properties
  • Linux(默认)- /home/arcgis/server/GeoEvent/gateway/etc/kafka.properties

该文件中的默认设置将设置为在磁盘使用量增加的情况下优化性能。

主题存储

GeoEvent Server 中的 Kafka 主题存储在以下任一目录中,具体取决于您的操作系统:

  • Windows(默认)- C:\ProgramData\ESRI\GeoEvent-Gateway\kafka\
  • Linux(默认)- /home/arcgis/.esri/GeoEvent-Gateway/config.[machine name]/kafka/(例如,/home/arcgis/.esri/GeoEvent-Gateway/config.gesdev01/kafka/

kafka\ 文件夹中,有三个存储分区复本的日志文件夹:log\log1\log2\

要更改 Kafka 主题的存储位置,请根据您的操作系统更新以下属性:

  • Windows 默认属性:
    • gateway.data.dir=C://ProgramData//Esri//GeoEvent-Gateway//
    • log.dirs=kafka/logs,kafka/logs1,kafka/logs2

Linux 默认属性:

  • gateway.data.dir=/home/arcgis/.esri/GeoEvent-Gateway/config.[machine name](例如,/home/arcgis/.esri/GeoEvent-Gateway/config.gesdev01
  • log.dirs=kafka/logs,kafka/logs1,kafka/logs2

主题分区

GeoEvent Server 中,默认的主题分区数量为三。 在检查存储主题的日志文件夹时,您会发现三个具有相同名称,末尾带有不同索引(-1、-2 和 -3)的文件夹。 在每个分区文件夹中,Kafka 将保留此时主题分区中所有数据的日志。 要更改主题分区的数量,请修改以下属性:

num.partitions=3

主题复制

GeoEvent Server 中,主题分区复本的默认数为二。 在检查存储主题的每个日志文件夹时,您会发现两个具有相同名称,末尾带有不同索引(-1、-2 或 -3)的文件夹。 所有 log\log1\log2\ 文件夹都用于存储两个分区文件夹的一个复本(文件夹以随机方式获取两个分区)。 要更改主题分区复本数,请修改以下属性:

replication-factor=2

主题分区文件大小

默认情况下,在创建新的日志文件之前,磁盘上每个 Kafka 主题分区日志文件的最小大小为 20MB,最大大小为 100MB。 一个分区复本在任何时候都可以拥有多个日志文件。 每个输入/输出的计划大小不小于 720 MB [ (100 MB + 20 MB) x 3 个分区 x 2 个复本 = 720 MB ]。 在高速事件流这类极端情况下,每个主题分区复本文件夹可以增长到最大日志文件大小的 3 到 4 倍(即每个分区复本不超过 300MB 到 400MB)。 对于具有三个分区的单个主题,在任意给定时间磁盘总空间可以增长到 1800MB 到 2400MB。 将最大大小乘以您配置的输入和输出数量,这就是在 GeoEvent Server 中需要为 Kafka 提供的估计占用空间。 以下属性可控制滚动到新文件之前日志文件的最大大小(默认值为 100MB):

log.segment.bytes=104857600

如果您具有高速度数据,则最终可能会生成多个 100 MB 的日志文件,否则,可能只有一个。 对于速度较低的事件数据,为此属性设置的尺寸越小越好。 对于速度较高的事件数据,则越大也好。 如果设置的尺寸过小,则 Kafka 将连续滚动多个文件。 如果设置的尺寸过大,Kafka 则很难将日志文件滚动为新的日志文件,且旧事件在队列中的保留时长将超出预期时间。

影响 Kafka 主题分区占用磁盘空间量的另一个设置是保留字节。 此属性指示 Kafka 始终保持最少数量的数据。 默认情况下,此属性的值为 100 MB。 所以,如果 Kafka 确定其可以且应该删除旧数据,剩余数据的大小永远不会低于 120 MB(100 MB 用于旧日志文件,20 MB 用于新日志文件)。 与上述段字节属性一样,如果您使用的数据速度较低,则可以适当降低该属性值。 当使用速度较高的数据时,应使用默认值 100 MB。 以下属性控制删除旧数据之前应保留在日志文件中的最小数据量(默认值为 100 MB):

log.retention.bytes=104857600

主题分区文件管理

由于订阅者使用分区队列中的事件,因此当事件被标记为所有订阅者已使用时,事件将过期。 可通过以下属性设置 Kafka 保存旧消息的时长以及 Kafka 删除旧消息的频率:

  • log.retention.hours=1
  • log.retention.check.interval.ms=30000

默认保留策略为 1 小时。 任何超过 1 小时且当前未存储活动数据的数据文件都会被删除。 如果该文件仍正用于存储数据(可能是低容量或低速度数据的情况),则不会被删除。 默认情况下,Kafka 每 30 秒检查一次旧数据文件。

主题分区文件管理属性

Kafka 属性文件中也提供了以下属性,这些属性用于控制分区文件的滚动速率。 降低此属性值时,可能会优化磁盘空间利用率,但如果值过低,则还会影响性能。 增加此属性值时,将增加磁盘空间的使用。

  • log.roll.ms=1800000
  • log.roll.jitter.ms=180000

第一个属性指示 Kafka 每 30 分钟滚动一个数据文件并将其替换为新文件。 Kafka 将每 30 分钟创建一个新的数据文件,无论旧数据文件的大小如何。 对于低速数据流,如果数据文件不是被经常填满,则此设置可以避免保留较旧数据。 第二个属性确定 Kafka 如何持续滚动数据文件。 建议值为 3 分钟,这意味着 Kafka 每 3 分钟检查一次是否滚动数据文件。