Apache Iggy 配置参数详解

Apache Iggy 0.9.0 配置文件 config.toml 与 IGGY_ 环境变量全参数详解,覆盖监听端口、内存池、日志、加密、集群 VSR、分片、分区与消息总线,附带生产配置模板,已逐项对照仓库配置实测核对。

Apache IggyApache Iggy参数调优Apache消息队列配置详解2026/10/11

Apache Iggy 配置参数详解

目标:系统讲解 Apache Iggy 0.9.0 服务端配置——core/server/config.toml 的完整参数段(监听、内存池、日志、加密、集群 VSR、分片、分区、消息总线)以及对应的 IGGY_ 环境变量覆盖方式,并给出生产配置模板。所有默认值均对照仓库 server-0.9.0 的 core/server/config.toml 实测核对。

一、环境信息

  • 组件:Apache Iggy 0.9.0(iggy-server)
  • 默认配置文件:仓库源码 core/server/config.toml(相对工作目录解析)
  • 覆盖方式:环境变量 IGGY_<嵌套键>(下划线分隔),或 IGGY_CONFIG_PATH 指向自定义 TOML
  • 数据目录:local_data(IGGY_PATH 覆盖)
  • 监听端口:TCP 8090、QUIC 8080、WebSocket 8092、HTTP 3000

二、前置条件

  • 具备 iggy-server 可执行文件(安装见《Ubuntu 22.04 安装 Apache Iggy 0.9.0 指南》篇)。
  • 具备任意文本编辑器编辑 TOML。
  • 了解 TOML 语法([h2] 段、key = value)。

三、参数查看与修改方式

  1. 默认配置来源:iggy-server 启动时从当前工作目录解析 core/server/config.toml。仓库源码自带完整示例(含每项注释)。
cd /opt/iggy
sed -n '1,80p' core/server/config.toml

实际首屏回显(示意):

# Root directory for server data. Environment override: IGGY_PATH.
path = "local_data"

[consumer_group]
rebalancing_timeout = "30s"

[data_maintenance.messages]
cleaner_enabled = true
interval = "1 m"

[http]
enabled = true
address = "127.0.0.1:3000"
# 其余段落从略,完整示例见仓库源码 core/server/config.toml
  1. 指定自定义配置:
IGGY_CONFIG_PATH=/etc/iggy/config.toml iggy-server
  1. 环境变量覆盖:任何键都可用 IGGY_ 前缀 + 下划线嵌套覆盖,优先级高于配置文件。示例见 iggy-server --help:
IGGY_PATH=/data/iggy                          # 数据目录
IGGY_TCP_ADDRESS=127.0.0.1:8090               # TCP 监听
IGGY_HTTP_ADDRESS=0.0.0.0:3000                # HTTP 监听
IGGY_NODE_ADVERTISED_ADDRESS=localhost         # 客户端拨号地址
IGGY_LOGGING_LEVEL=debug                       # 日志级别
IGGY_ROOT_USERNAME=root                        # root 用户名
IGGY_ROOT_PASSWORD=q1w2e3r4                    # root 密码
  1. 命令行参数:iggy-server -h 仅提供少量启动开关(--fresh 清空数据、--with-default-root-credentials、--replica-id N 选集群节点);配置主体都在 TOML/环境变量。

四、参数总览(config.toml 全段)

段职责主要键
顶层数据目录path
[consumer_group]消费组再平衡rebalancing_timeout
[data_maintenance.messages]段清理cleaner_enabled,interval
[heartbeat]心跳enabled,interval
[http]HTTP/RESTenabled,address,max_request_size,web_ui
[http.cors]CORSenabled,allowed_methods,allowed_origins
[http.jwt]JWTalgorithm,issuer,audience,access_token_expiry
[http.metrics]Prometheusenabled,endpoint
[http.tls]HTTPSenabled,cert_file,key_file
[tcp]TCP 二进制enabled,address
[quic]QUICenabled,address
[websocket]WebSocketenabled,address
[tcp.tls]/[quic.certificate]/[websocket.tls]各传输 TLSenabled,cert_file,key_file
[personal_access_token]PATenabled
[telemetry]遥测enabled,service_name
[runtime]运行时path
[logging]日志level,file_enabled,max_file_size 等
[encryption]加密enabled,key
[memory_pool]内存池enabled,size,bucket_capacity
[sharding]分片cpu_allocation,pin_cores 等
[cluster]集群/VSRenabled,name,超时项,[[cluster.nodes]]
[metadata]元数据共识prepare_queue_depth,journal_slots,clients_table_max
[partition]分区共识wal_bytes_max,prepare_queue_depth 等
[message_bus]消息总线max_batch,max_message_size 等

五、核心参数分类详解

5.1 监听与传输段([tcp] [http] [quic] [websocket])

参数默认值说明
tcp.enabled / tcp.addresstrue / 127.0.0.1:8090TCP 二进制协议监听
http.enabled / http.addresstrue / 127.0.0.1:3000HTTP REST;web_ui=true 时 /ui 提供 Web 控制台
http.web_uifalse是否启用内置 Web UI(需 iggy-web feature 编译)
http.max_request_size2 MBHTTP 请求体上限,安全限制
quic.enabled / quic.addresstrue / 127.0.0.1:8080QUIC 监听
websocket.enabled / websocket.addresstrue / 127.0.0.1:8092WebSocket 监听
http.cors.allowed_origins["*"]允许跨域来源
http.jwt.algorithm / issuerHS256 / iggy.apache.orgJWT 签名算法与签发者
http.jwt.access_token_expiry1h访问令牌有效期
http.metrics.endpoint/metricsPrometheus 指标端点
node.advertised_address派生自绑定地址客户端拨号地址,绑定通配时必填

实测补充:IGGY_NODE_ADVERTISED_ADDRESS=localhost 在 Compose/通配绑定场景必须设置,默认监听本机 loopback 对外不可达。

5.2 内存池段([memory_pool])

内存池为消息缓冲复用,Iggy 是 Rust 服务无 JVM 堆,此段直接控制原生内存:

参数默认值说明
memory_pool.enabledtrue是否启用内存池
memory_pool.size4 GiB池总预算,需为 4096 倍数,最小 512 MiB;超出部分用池外内存
memory_pool.bucket_capacity8192每桶最大缓冲数(共 28 桶,4 KiB~512 MiB),需为 2 的幂,最小 128

环境变量:IGGY_MEMORY_POOL_SIZE、IGGY_MEMORY_POOL_BUCKET_CAPACITY。生产按内存调整,例如低内存服务器可 IGGY_MEMORY_POOL_SIZE=512MiB。

5.3 日志段([logging])

参数默认值说明
logging.pathlogs日志相对 path 的子目录
logging.levelinfo日志级别;RUST_LOG 优先级更高
logging.file_enabledtrue是否落盘到 local_data/logs
logging.max_file_size500 MB单日志文件轮转阈值
logging.max_total_size4 GB全部归档日志上限,超出删最旧
logging.rotation_check_interval1 h轮转检查间隔
logging.retention7 days日志保留时长

环境变量:IGGY_LOGGING_LEVEL(如 debug)。诊断设 debug、生产默认 info。

5.4 加密段([encryption])

参数默认值说明
encryption.enabledfalse是否对消息载荷与用户头做 AES-256-GCM 加密(元数据与结构头不加密)
encryption.key空32 字节 base64 密钥,enabled=true 时必填

5.5 集群与 VSR 段([cluster],多节点高可用)

默认单机 enabled=false;为高可用将 enabled=true 并给出本节点 --replica-id:

参数默认值说明
cluster.enabledfalse是否集群模式
cluster.nameiggy-cluster集群名,等宽,变更需空数据目录(永久落盘身份)
cluster.heartbeat_timeout5s主节点存活窗口,至少 2s 且 ≥4×commit_broadcast_interval
cluster.commit_broadcast_interval500ms主节点向备份广播提交点周期
cluster.prepare_retransmit_interval250ms备份未确认时主节点重传 prepare 周期
cluster.view_change_retransmit_interval500ms视图切换期间重传周期
cluster.view_change_status_timeout5s视图切换卡死的兜底,≥4×重传间隔
cluster.request_start_view_retransmit_interval1s恢复节点请求 StartView 周期
cluster.view_probe_attempts_max5恢复节点重探次数上限(1~100)
cluster.repair_retry_interval1s日志修复窗口重请求周期
cluster.repair_gap_debounce_interval1s备份落后触发修复的窗口
cluster.repair_chunk_max128每轮修复服务的 chunk 数,须 < peer_queue_capacity
cluster.superblock_wedged_fatal_timeout2m超级块不可写导致 fail-stop 的超时,0 禁用,非零须 ≥30s
[[cluster.nodes]]示例两节点name/ip/replica_id/ports{tcp,quic,http,websocket,tcp_replica}

示例(仓库 config.toml 内置):

[cluster]
enabled = true
name = "iggy-cluster"

[[cluster.nodes]]
name = "iggy-node-1"
ip = "127.0.0.1"
replica_id = 0
ports = { tcp = 8090, quic = 8080, http = 3000, websocket = 8092, tcp_replica = 9090 }

[[cluster.nodes]]
name = "iggy-node-2"
ip = "127.0.0.1"
replica_id = 1
ports = { tcp = 8091, quic = 8081, http = 3001, websocket = 8093, tcp_replica = 9091 }

⚠️ 注意:集群模式下每个启用的传输在 ports 须显式声明端口;节点用 iggy-server --replica-id <N> 选定自身配置。ip 是副本级地址(字面 IP),客户端拨号地址用 advertised_address。

[cluster.auth] / [cluster.tls]:副本间认证(PSK+BLAKE3)与 TLS(enabled、shared_secret、证书);[cluster.coordinator] 控制分片 0 的协调者放置。

5.6 分片段([sharding])

参数默认值说明
sharding.cpu_allocationnuma:autoCPU 分配:all、数值、区间、NUMA 配置
sharding.pin_corestrue是否把分片线程钉到专属核心
sharding.inbox_capacity65536每分片共享收件箱容量
sharding.reply_inbox_capacity1024回复通道容量
sharding.poll_completion_capacity1024单分片磁盘轮询容量
sharding.shutdown_drain_timeout10 s关闭时 drains 预算
sharding.shutdown_join_timeout30 s分片线程 join 硬超时
sharding.shutdown_poll_interval50 ms关闭轮询节奏
sharding.reconcile_periodic_interval1 s分区对账节拍

5.7 元数据共识段([metadata],分片 0 的 VSR 副本)

参数默认值说明
metadata.prepare_queue_depth32元数据在途操作深度,上限 127(受视图切换位图限制)
metadata.journal_slots1024元数据 WAL 内存索引槽位数,须 ≥4×max(64,depth)
metadata.clients_table_max8192同时持有会话状态的客户端槽位数(2~65536)

5.8 分区段([partition],每分区共识与存储)

参数默认值说明
partition.wal_bytes_max256 MiB分区 WAL 字节预算(4 KiB 倍数,128 MiB+8 KiB ~ 4 GiB)
partition.wal_group_commit_delay_micros0持久化前组提交等待(0~10000 微秒)
partition.validate_checksumtrue读段时校验校验和
partition.prepare_queue_depth32分区在途 produce/offset 深度(1~127)
partition.dedup_clients_max4096每分区组追踪去重请求水位的客户端数(1~65536)
partition.consumer_offsets_max4096消费者 offset 槽位
partition.offset_reservation_lease65536offset 预留租约
partition.evicted_ring_capacity65536逐出环形缓冲容量
partition.evicted_ring_bytes_max67.11 MiB逐出环形缓冲字节上限

💡 说明:partition 是逐分区的共识管线,调大 prepare_queue_depth 会按分区数倍增钉住内存,生产须克制。

5.9 消息总线段([message_bus])

参数默认值说明
message_bus.max_batch256合并进单次 writev 的最大条目,上限 IOV_MAX/2=512
message_bus.max_message_size64 MiB单帧消息上限,冻结 256 MiB 兜底;超 64 MiB 会破坏 Go 客户端
message_bus.peer_queue_capacity4096副本对等 mpsc 队列容量
message_bus.client_queue_capacity256每 SDK 连接出入队容量
message_bus.reconnect_period1 s对更大 peer_id 的重连周期
message_bus.close_peer_timeout2 s对等关闭排空超时
message_bus.close_grace2 sstream.shutdown/ws.close 宽限
message_bus.handshake_grace10 s单连接握手阶段超时(防 slowloris)

六、Topic 级选项(iggy options topic,创建时可配)

以下选项不在 config.toml,而是创建 topic 时通过 CLI --set key=value 或 HTTP options 字段设置;服务端 options 子命令输出如下(0.9.0 实测):

键Kind默认值说明
compression_algorithmstringnone压缩算法(none/gzip),仅记录不实际压缩
message_expiryuint6418446744073709551615消息过期(微秒或 "7 days")
max_topic_sizeuint6418446744073709551615全 topic 密封段大小上限(跨分区均摊)
segment_sizeuint641073741824段大小(1 MiB~1 GiB,512 倍数)
durabilitystringreplicated消息完成策略:replicated/persisted
consumer_offset_durabilitystringreplicatedoffset 完成策略:replicated/persisted
messages_required_to_saveuint321024消息条数刷盘触发
size_of_messages_required_to_saveuint641048576字节数刷盘触发
preallocate_segmentsboolfalse段打开时是否预分配磁盘

CLI 查看方式:

iggy options topic

实际回最后一次(节选关键行,表格完整列见 iggy options topic 全量输出)。

七、生产配置模板

适用场景:16 GB 内存、NVMe SSD、单机(cluster.enabled=false)、OLTP 消息流(低延迟读写混合),端口对外 0.0.0.0。

/etc/iggy/config.toml:

path = "/var/lib/iggy"

[tcp]
address = "0.0.0.0:8090"

[http]
address = "0.0.0.0:3000"
web_ui = true
cors = { allowed_origins = ["*"], allowed_methods = ["GET", "POST", "PUT", "DELETE"] }

[http.jwt]
encoding_secret = "a3Zlcm5hdGVkLWlnZ3ktJTQyLXNlY3JldC0yMDI2LS1zZWNyZXQtZW5jb2RlLTE="
decoding_secret = "a3Zlcm5hdGVkLWlnZ3ktJTQyLXNlY3JldC0yMDI2LS1zZWNyZXQtZGVjb2RlLTE="

[quic]
enabled = false

[websocket]
enabled = false

[memory_pool]
enabled = true
size = "2 GiB"
bucket_capacity = 4096

[logging]
level = "info"
max_file_size = "500 MB"
max_total_size = "4 GB"
retention = "7 days"

[partition]
prepare_queue_depth = 32
dedup_clients_max = 4096

[message_bus]
max_batch = 256
max_message_size = "64 MiB"

💡 说明:内存 16 GB 场景把内存池压到 2 GiB,其余留给消息缓冲与系统;NVMe 场景可保持 max_batch=256 以增大 writev 批量;QUIC/WebSocket 按需关闭以少开端口。JWT 的 encoding_secret/decoding_secret 用于重启后令牌仍有效(否则每次重启重生成随机密钥)。

内存/磁盘选型对照:

场景内存池建议
8 GB 入门512 MiB~1 GiB低并发,bucket_capacity=2048
16 GB OLTP(本文档)2 GiB中并发,JDK 无堆,partition.prepare_queue_depth=32
64 GB 高吞吐8~16 GiB高并发,prepare_queue_depth 视分区数权衡

八、常见问题

Q1:配置变更后如何生效?

配置文件/环境变量在启动时读取,需重启 iggy-server(systemd:systemctl restart iggy)。

Q2:改了 cluster.name 后无法启动?

cluster.name 经哈希写入首个启动数据的集群 ID;改后会因恢复的 ID 与配置不符而拒绝启动。需用空数据目录启动(改名即换新目录)。

Q3:为什么 IGGY_HTTP_ADDRESS=0.0.0.0:3000 后客户端仍连不上?

通配绑定需同时声明客户端拨号地址 IGGY_NODE_ADVERTISED_ADDRESS=<主机名或IP>(node.advertised_address),否则集群元数据/重定向拿不到可路由地址。

Q4:JWT 重启后失效?

未配 http.jwt.encoding_secret/decoding_secret 时每次启动随机生成,旧 token 失效。生产务必配置固定密钥。

Q5:如何提高写入吞吐?

调大 message_bus.max_batch(≤512)、memory_pool.size,并把存储放 NVMe;Iggy 无 JVM 堆,核心是内存池与磁盘 IO 并行度([sharding] CPU 分配)。

九、参考链接