ArcGIS GeoEvent Server 利用 Apache Kafka 管理从输入到 GeoEvent 服务以及从 GeoEvent 服务到输出的所有事件流量。Kafka 为将要发布的事件提供了一组主题(消息队列),用户可以订阅这些事件消息。Kafka 主题队列在磁盘上进行管理,可永久存储并在系统故障时恢复消息队列。
GeoEvent Server Kafka 主题基础知识
每个 GeoEvent Server 输入和输出都具有自己的 Kafka 主题。
每个 Kafka 主题被分成几个分区。分区将事件分为三个独立的消息队列以实现平行性。默认情况下,每个 Kafka 主题都配置为创建三个主题分区。主题的订阅者将启动多个并行运行的事件用户以提高性能。
请注意,Kafka 为用户偏移量主题创建和管理大量分区。大量的分区使得系统能够通过平行性获得良好的性能。
常规磁盘大小建议
对于新安装的 GeoEvent Server,ArcGIS GeoEvent Gateway 服务至少需要 1GB 的磁盘空间。在处理任何事件之前,添加的每个输入或输出都需要至少 360 MB 的额外磁盘空间。请注意,所有大小均为最小估计值,可能会随着 GeoEvent Server 中配置元素的增加而增大。
GeoEvent Server Kafka 设置
您可以通过编辑 Kafka 属性文件来修改 GeoEvent Server Kafka 实例的行为。修改此属性文件的主要原因是更改文件在磁盘上的位置。但是,在极少数情况下,可能需要对其他属性进行更新。
Kafka 属性文件
您可以在以下任一目录中找到包含针对 GeoEvent Server Kafka 设置 (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\logs\
- Linux(默认) - /home/arcgis/.esri/GeoEvent-Gateway/config.[machine name]/kafka/logs(例如 /home/arcgis/.esri/GeoEvent-Gateway/config.gesdev01/kafka/logs)
要更改 Kafka 主题的存储位置,请根据您的操作系统更新以下属性。
Windows 默认属性:
- gateway.data.dir=C://ProgramData//Esri//GeoEvent-Gateway//
- log.dirs=kafka/logs
Linux 默认属性:
- gateway.data.dir=/home/arcgis/.esri/GeoEvent-Gateway/config.[machine name](例如 /home/arcgis/.esri/GeoEvent-Gateway/config.gesdev01)
- log.dirs=kafka/logs
主题分区
在 GeoEvent Server 中,主题分区的默认数量为 3。因此,在检查存储主题的文件夹时,您会发现三个具有相同名称,末尾带有不同索引(-1、-2 和 -3)的文件夹。在每个分区文件夹中,Kafka 将保留此时主题分区中所有数据的日志。要更改主题分区的数量,请修改以下属性。
- num.partitions=3
主题分区文件大小
默认情况下,在创建新的日志文件之前,磁盘上每个 Kafka 主题分区日志的最小大小为 20MB,最大大小为 100MB。一个分区在任何时候都可以拥有多个日志文件。在高速事件流的极端情况下,每个主题分区文件夹可以增长到最大日志文件大小的 3 到 4 倍(即 300MB 到 400MB)。对于具有三个分区的单个主题,在任意给定时间磁盘总空间可以增长到 900MB 到 1200MB。将最大大小乘以您配置的输入和输出数量,这就是 GeoEvent Server 中 Kafka 可用的磁盘大小。以下属性可用于控制滚动到新文件之前日志文件的最大大小(默认值为 100MB)。
- log.segment.bytes=104857600
如果您具有高速度数据,则最终可能会生成多个 100MB 的日志文件,如果不具有高速度数据,则可能仅生成一个 100MB 的日志文件。对于速度较低的事件数据,可设置较小的属性尺寸。对于速度较高的事件数据,应设置较大的属性尺寸。如果设置的尺寸过小,则 Kafka 将持续滚动文件。如果设置的尺寸过大,Kafka 则很难将日志文件滚动为新的日志文件,且旧事件在队列中的保留时长将超出预期时间。
影响 Kafka 主题分区占用磁盘空间量的另一个设置是保留字节。此属性指示 Kafka 始终保持最少数量的数据。默认情况下该属性的值为 100MB。所以,即使 Kafka 决定其可以且应该删除旧数据,剩余数据的大小也永远不会低于 100MB。与上述段字节属性一样,如果您使用的数据速度较低,则可以适当降低该属性值。当使用速度较高的数据时,应使用默认值 100MB。
- 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 分钟检查一次,以确认是否需要滚动数据文件。