This is an automated email from the ASF dual-hosted git repository. popduke pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/bifromq-sites.git
commit 2178ea665a2e9639abe3f67facf36f4b918928b3 Author: Yonny Hao <[email protected]> AuthorDate: Tue Dec 2 14:11:57 2025 +0800 update configmanual/sysprops/settings pages --- .../admin_guide/configuration/bifromq_sys_props.md | 56 ++--- .../configuration/config_file_manual.md | 275 ++++++++++++++------- docs/get_started/quick_install.md | 3 +- docs/plugin/setting_provider/1_tenantsetting.md | 72 +++--- 4 files changed, 255 insertions(+), 151 deletions(-) diff --git a/docs/admin_guide/configuration/bifromq_sys_props.md b/docs/admin_guide/configuration/bifromq_sys_props.md index e7cddef9..275ebb80 100644 --- a/docs/admin_guide/configuration/bifromq_sys_props.md +++ b/docs/admin_guide/configuration/bifromq_sys_props.md @@ -9,31 +9,31 @@ For example, setting `-Dmqtt_utf8_sanity_check=false` disables the check for MQT Below is a table listing the system properties supported by the current version: -| Property Key | Default Value | Description [...] -| --------------------------------------------- | --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [...] -| `client_redirect_check_interval_seconds` | 600 | The client redirection check interval in seconds [...] -| `cluster_domain_resolve_timeout_seconds` | 120 | This parameter specifies the timeout duration for DNS resolution when constructing a cluster using the "clusterConfig.clusterDomainName". The process involves resolving the cluster domain to discover seed nodes that can join the cluster. A successful resolution is marked by obtaining a non-empty set of IP addresses. This parameter controls the maximum amount of time allowed for this DNS resolution to complete succe [...] -| `control_plane_burst_latency_ms` | 5000L | The max latency in milliseconds tolerated for the control plane burst. [...] -| `data_plane_burst_latency_ms` | 5000L | The max latency in milliseconds tolerated for the data plane burst. [...] -| `dist_server_dist_worker_call_queues` | CPU cores | Number of dist worker call queues. [...] -| `dist_worker_inline_fanout_threshold` | 1000 | The threshold of the fanout to be executed in calling thread [...] -| `dist_worker_fanout_parallelism` | Max(2, CPU cores) | Parallelism level for fanout operations. [...] -| `dist_worker_fanout_split_threshold` | 100000 | Threshold for splitting fanout operations when fanout split hinter enabled. [...] -| `dist_worker_load_estimation_window_seconds` | 5L | Time window in seconds for load estimation when fanout split hinter enabled. [...] -| `dist_worker_match_parallelism` | Max(2, CPU cores / 2) | Parallelism level for match operations. [...] -| `dist_worker_max_cached_subs_per_tenant` | 200_000L | Maximum cached subscriptions per tenant. [...] -| `dist_worker_topic_match_expiry_seconds` | 5 | Expiry time in seconds for topic matches. [...] -| `inbox_check_queues_per_range` | 1 | Number of check queues per range. [...] -| `inbox_deliverers` | 100 | Number of inbox deliverers. [...] -| `inbox_fetch_queues_per_range` | Max(1, CPU cores / 4) | Number of fetch queues per range. [...] -| `inbox_store_load_estimation_window_seconds` | 5L | Time window in seconds for load estimation in inbox store. [...] -| `ingress_slowdown_direct_memory_usage` | 0.95 | Threshold for slowing down the acceptance of ingress traffic based on direct memory usage. When the direct memory usage exceeds this threshold, the system will begin to slow down incoming traffic to manage resource consumption effectively. [...] -| `ingress_slowdown_heap_memory_usage` | 0.9 | Threshold for slowing down the acceptance of ingress traffic based on heap memory usage. When the heap memory usage exceeds this threshold, the system will initiate measures to slow down incoming traffic to prevent memory overload. [...] -| `mqtt_utf8_sanity_check` | false | Enables/disables UTF8 sanity checks according to MQTT-1.5.3. [...] -| `max_mqtt3_client_id_length` | 65535 | Maximum client ID length for MQTT 3 clients. [...] -| `max_mqtt5_client_id_length` | 65535 | Maximum client ID length for MQTT 5 clients. [...] -| `max_slowdown_timeout_seconds` | 5 | Maximum duration (in seconds) that the slowdown mechanism is allowed to operate before further backpressure protection measures are taken. This ensures that if the slowdown is not sufficient to manage resource usage, additional steps will be implemented to protect the system. [...] -| `mqtt_deliverers_per_server` | CPU cores | Number of MQTT deliverers per server. [...] -| `persistent_session_detach_timeout_second` | 7200 | The timeout seconds to consider persistent session is probably detached from mqtt client. [...] -| `retain_store_load_estimation_window_seconds` | 5L | Time window in seconds for load estimation in retain store. [...] -| `session_register_num` | 1000 | Number of concurrent session registers. [...] +| Property Key | Default Value | Description | +| ------------------------------------------ | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `client_redirect_check_interval_seconds` | 600 | The client redirection check interval in seconds. | +| `cluster_domain_resolve_timeout_seconds` | 120L | Timeout for resolving the cluster domain to discover seed nodes. | +| `control_plane_burst_latency_ms` | 5000L | The max latency in milliseconds tolerated for the control plane burst. | +| `data_plane_burst_latency_ms` | 5000L | The max latency in milliseconds tolerated for the data plane burst. | +| `dist_server_dist_worker_call_queues` | CPU cores | Number of dist worker call queues. | +| `dist_worker_inline_fanout_threshold` | 1000 | The threshold of the fanout to be executed in the calling thread. | +| `dist_worker_fanout_parallelism` | Max(2, CPU cores / 8) | Parallelism level for fanout operations. | +| `dist_worker_cache_fanout_check_seconds` | 5 | Interval seconds for checking cached routes against fanout related settings. | +| `dist_worker_match_parallelism` | Max(2, CPU cores / 2) | Parallelism level for match operations. | +| `dist_worker_max_cached_subs_per_tenant` | 200_000L | Maximum cached subscriptions per tenant. | +| `dist_worker_topic_match_expiry_seconds` | 60 | Expiry time in seconds for topic matches. | +| `inbox_check_queues_per_range` | 1 | Number of check queues per range. | +| `inbox_deliverers` | 100 | Number of inbox deliverers. | +| `inbox_fetch_queues_per_range` | Max(1, CPU cores / 4) | Number of fetch queues per range. | +| `inbox_meta_cache_expiry_second` | 300 | Timeout in seconds before cached inbox metadata expires. | +| `ingress_slowdown_direct_memory_usage` | 0.8 | Threshold for slowing down ingress traffic based on direct memory usage. | +| `ingress_slowdown_heap_memory_usage` | 0.9 | Threshold for slowing down ingress traffic based on heap memory usage. | +| `mqtt_utf8_sanity_check` | false | Enables/disables UTF8 sanity checks according to MQTT-1.5.3. | +| `max_mqtt3_client_id_length` | 65535 | Maximum client ID length for MQTT 3 clients. | +| `max_mqtt5_client_id_length` | 65535 | Maximum client ID length for MQTT 5 clients. | +| `max_slowdown_timeout_seconds` | 5 | Maximum duration (in seconds) that the slowdown mechanism is allowed to operate before further backpressure protection measures are taken. | +| `mqtt_deliverers_per_server` | CPU cores | Number of MQTT deliverers per server. | +| `persistent_session_detach_timeout_second` | 7200 | The timeout seconds to consider persistent session is probably detached from mqtt client. | +| `session_register_num` | 10 | Number of concurrent session registers. | +| `maxActiveDedupChannels` | 1024 | Maximum active deduplication channels per session. | +| `maxActiveDedupTopicsPerChannel` | 10 | Maximum active deduplication topics per channel. | diff --git a/docs/admin_guide/configuration/config_file_manual.md b/docs/admin_guide/configuration/config_file_manual.md index 602e6377..83cf3311 100644 --- a/docs/admin_guide/configuration/config_file_manual.md +++ b/docs/admin_guide/configuration/config_file_manual.md @@ -10,80 +10,170 @@ The complete configuration file is defined by a set of configuration objects, wi ## StandaloneConfig -| Configuration Name | Value Type | Default Value | Description | -| -------------------------------------------------------------------- | ---------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `authProviderFQN` | String | null | Fully qualified class name of the custom Auth Provider implementation. If not configured, authentication and authorization will not be performed. | -| `clientBalancerFQN` | String | null | Fully qualified class name of the custom Client Balancer implementation. If not configured, no active redirection happens. | -| `resourceThrottlerFQN` | String | null | Fully qualified class name of the custom Resource Throttler implementation. If not configured, resource limiting will not be performed. | -| `settingProviderFQN` | String | null | Fully qualified class name of the custom Setting Provider implementation. If not configured, default initial values defined in Settings will be used. | -| `clusterConfig.env` | String | "Test" | Cluster environment name. Cluster nodes with different environment names are isolated from each other. Cannot be null or an empty string. | -| `clusterConfig.host` | String | | Communication address of the node as a cluster node. If not configured, the actual value is determined by the following rules: If the value of `mqttServerConfig.tcpListener.host` is not "0.0.0.0", use that value; otherwise, if `rpcServerConfig.host` is configured, use that value; otherwise, use the SiteLocal address resolved from NetworkInterface. | -| `clusterConfig.port` | Integer | 0 | Communication port number of the node as a cluster node. `0` means automatically selecting an unused port number. It is recommended to configure a specific port number for nodes with the `bootstrap role` to simplify the configuration process. | -| `clusterConfig.seedEndpoints` | String | null | Addresses of seed nodes to join the cluster, in the form of `ip:port` addresses separated by `,`. It is recommended that nodes other than the `bootstrap role` configure the bootstrap node address to simplify the configuration process. | -| `clusterConfig.clusterDomainName` | String | null | Cluster domain name. Specifying the domain name here can further simplify the configuration process for cluster nodes when the cluster nodes are registered to a fixed domain name. BifroMQ will resolve this domain name to obtain the address of the cluster contact nodes. | -| `mqttServerConfig.connTimeoutSec` | Integer | 20 | The tolerable timeout duration from establishing a TCP connection to completing the MQTT connection operation. If this limit is exceeded, the server will proactively disconnect. | -| `mqttServerConfig.maxConnPerSec` | Integer | 2000 | The maximum rate of MQTT connection operations accepted per second. Connections exceeding this limit will be limited by the token bucket and subsequently disconnected. | -| `mqttServerConfig.maxDisconnPerSec` | Integer | 1000 | The maximum rate of disconnecting connections per second when the node is gracefully shutting down. | -| `mqttServerConfig.maxMsgByteSize` | Integer | 262144 | This parameter is an initial setting for establishing a connection and effectively limits the size of the MQTT Connect Packet. If a Connect Packet, including the Will Message, exceeds this size, the connection will be rejected. | -| `mqttServerConfig.maxConnBandwidth` | Integer | 524288 | The maximum bandwidth allowed for a single connection, calculated separately for inbound and outbound traffic. | -| `mqttServerConfig.defaultKeepAliveSec` | Integer | 300 | The default keep-alive duration for connections. When clients do not actively set this, this value is used. | -| `mqttServerConfig.bossELGThreads` | Integer | 1 | The number of threads for accepting TCP connection requests. | -| `mqttServerConfig.workerELGThreads` | Integer | max(processor cores/2, 2) | The number of worker threads for processing MQTT protocol signaling. | -| `mqttServerConfig.tcpListener.enable` | Boolean | true | Whether to enable MQTT over TCP connection method. | -| `mqttServerConfig.tcpListener.host` | String | "0.0.0.0" | Communication address for MQTT over TCP connection method. | -| `mqttServerConfig.tcpListener.port` | Integer | 1883 | Communication port for MQTT over TCP connection method. | -| `mqttServerConfig.tlsListener.enable` | Boolean | false | Whether to enable MQTT over TLS connection method. | -| `mqttServerConfig.tlsListener.host` | String | "0.0.0.0" | Communication address for MQTT over TLS connection method. | -| `mqttServerConfig.tlsListener.port` | Integer | 1884 | Communication port for MQTT over TLS connection method. | -| `mqttServerConfig.tlsListener.sslConfig` | ServerSSLContextConfig | null | SSL configuration for MQTT over TLS connection method. Refer to the settings of the ServerSSLContextConfig object. | -| `mqttServerConfig.wsListener.enable` | Boolean | true | Whether to enable MQTT over WebSocket connection method. | -| `mqttServerConfig.wsListener.host` | String | "0.0.0.0" | Communication address for MQTT over WebSocket connection method. | -| `mqttServerConfig.wsListener.port` | Integer | 8080 | Communication port for MQTT over WebSocket connection method. | -| `mqttServerConfig.wsListener.wsPath` | String | "/mqtt" | Access path for MQTT over WebSocket connection method. | -| `mqttServerConfig.wssListener.enable` | Boolean | false | Whether to enable MQTT over WebSocket Secure connection method. | -| `mqttServerConfig.wssListener.host` | String | "0.0.0.0" | Communication address for MQTT over WebSocket Secure connection method. | -| `mqttServerConfig.wssListener.port` | Integer | 8443 | Communication port for MQTT over WebSocket Secure connection method. | -| `mqttServerConfig.wssListener.wsPath` | String | "/mqtt" | Access path for MQTT over WebSocket Secure connection method. | -| `mqttServerConfig.wssListener.sslConfig` | ServerSSLContextConfig | null | SSL configuration for MQTT over WebSocket Secure connection method. Refer to the settings of the ServerSSLContextConfig object. | -| `rpcClientConfig.workerThreads` , `baseKVClientConfig.workerThreads` | Integer | processor cores | The number of worker threads when communicating between nodes as a client via RPC. | -| `rpcClientConfig.enableSSL`,`baseKVClientConfig.enableSSL` | SSLContextConfig | false | Enable SSL at client side. | -| `rpcClientConfig.sslConfig`,`baseKVClientConfig.sslConfig` | SSLContextConfig | null | SSL configuration when Secure RPC is enabled. Refer to the settings of the SSLContextConfig object. | -| `rpcServerConfig.host`,`baseKVServerConfig.host` | String | | See the rule description for ClusterConfig.host. | -| `rpcServerConfig.port`,`baseKVServerConfig.port` | Integer | 0 | See the rule description for ClusterConfig.port. | -| `rpcServerConfig.workerThreads`,`baseKVServerConfig.workerThreads` | Integer | 2 | The number of worker threads when communicating between nodes as a server via RPC. | -| `rpcServerConfig.enableSSL`,`baseKVServerConfig.enableSSL` | ServerSSLContextConfig | false | Enable SSL at server side | -| `rpcServerConfig.sslConfig`,`baseKVServerConfig.sslConfig` | ServerSSLContextConfig | null | SSL configuration when Secure RPC is enabled. Refer to the settings of the ServerSSLContextConfig object. | -| `stateStoreConfig.queryThreads` | Integer | min(available cores/2, 2) | The number of threads for the built-in state storage service to execute query type requests. | -| `stateStoreConfig.tickerThreads` | Integer | min(available cores/20, 1) | The number of threads for the built-in state storage service to perform periodic tick operations. | -| `stateStoreConfig.bgWorkerThreads` | Integer | min(available cores/4, 1) | The number of threads for the built-in state storage service to perform background operations. | -| `stateStoreConfig.distWorkerConfig.queryPipelinePerStore` | Integer | 1000 | The number of queryPipelines for the Dist Worker state storage service. | -| `stateStoreConfig.distWorkerConfig.compactWALThreshold` | Integer | 2500 | The maximum number of logs before a compaction operation is performed in the Dist Worker state storage service. | -| `stateStoreConfig.distWorkerConfig.dataEngineConfig` | StorageEngineConfig | | Data storage engine configuration for the Dist Worker state storage service. Refer to the settings of the StorageEngineConfig object. | -| `stateStoreConfig.distWorkerConfig.walEngineConfig` | StorageEngineConfig | | WAL storage engine configuration for the Dist Worker state storage service. Refer to the settings of the StorageEngineConfig object. | -| `stateStoreConfig.distWorkerConfig.balanceConfig` | BalancerOptions | | Balancer configuration for the Dist Worker state storage service. Refer to the settings of the BalancerOptions object. | -| `inboxStoreConfig.queryPipelinePerStore` | Integer | 100 | The number of queryPipelines for the Inbox Store state storage service. | -| `inboxStoreConfig.compactWALThreshold` | Integer | 2500 | The maximum number of logs before a compaction operation is performed in the Inbox Store state storage service. | -| `inboxStoreConfig.gcIntervalSeconds` | Integer | 600 | The interval (in seconds) for recycling expired Session data in the Inbox Store. | -| `inboxStoreConfig.dataEngineConfig` | StorageEngineConfig | | Data storage engine configuration for the Inbox Store state storage service. Refer to the settings of the StorageEngineConfig object. | -| `inboxStoreConfig.walEngineConfig` | StorageEngineConfig | | WAL storage engine configuration for the Inbox Store state storage service. Refer to the settings of the StorageEngineConfig object. | -| `inboxStoreConfig.balanceConfig` | BalancerOptions | | Balancer configuration for the Inbox Store state storage service. Refer to the settings of the BalancerOptions object. | -| `retainStoreConfig.queryPipelinePerStore` | Integer | 100 | The number of queryPipelines for the Retain Store state storage service. | -| `retainStoreConfig.compactWALThreshold` | Integer | 2500 | The maximum number of logs before a compaction operation is performed in the Retain Store state storage service. | -| `retainStoreConfig.gcIntervalSeconds` | Integer | 600 | The interval (in seconds) for recycling expired data in the Retain Store. | -| `retainStoreConfig.dataEngineConfig` | StorageEngineConfig | | Data storage engine configuration for the Retain Store state storage service. Refer to the settings of the StorageEngineConfig object. | -| `retainStoreConfig.walEngineConfig` | StorageEngineConfig | | WAL storage engine configuration for the Retain Store state storage service. Refer to the settings of the StorageEngineConfig object. | -| `retainStoreConfig.balanceConfig` | BalancerOptions | | Balancer configuration for the Retain Store state storage service. Refer to the settings of the BalancerOptions object. | -| `apiServerConfig.enable` | Boolean | true | Whether to enable HTTP API access. | -| `apiServerConfig.host` | String | null | Access address for the HTTP API. If not configured, the same rule as ClusterConfig.host is used to determine the address. | -| `apiServerConfig.httpPort` | Integer | 8091 | Access port for the HTTP API. | -| `apiServerConfig.apiBossThreads` | Integer | 1 | The number of threads for handling HTTP API TCP connection requests. | -| `apiServerConfig.apiWorkerThreads` | Integer | 2 | The number of worker threads for processing HTTP API requests. | -| `apiServerConfig.httpsListenerConfig.enable` | Boolean | false | Whether to enable HTTPS API access. | -| `apiServerConfig.httpsListenerConfig.host` | String | null | Access address for the HTTPS API. If not configured, the same rule as ClusterConfig.host is used to determine the address. | -| `apiServerConfig.httpsListenerConfig.port` | Integer | 8090 | Access port for the HTTPS API. | -| `apiServerConfig.httpsListenerConfig.sslConfig` | ServerSSLContextConfig | null | SSL configuration for the HTTPS API. Refer to the settings of the ServerSSLContextConfig object. | - -## SSLContextConfig && ServerSSLContextConfig +| Configuration Name | Value Type | Default Value | Description | +| ---------------------------- | ---------- | ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| `authProviderFQN` | String | null | Fully qualified class name of the custom Auth Provider implementation. If not configured, authentication and authorization will not be performed. | +| `clientBalancerFQN` | String | null | Fully qualified class name of the custom Client Balancer implementation. If not configured, no active redirection happens. | +| `resourceThrottlerFQN` | String | null | Fully qualified class name of the custom Resource Throttler implementation. If not configured, resource limiting will not be performed. | +| `settingProviderFQN` | String | null | Fully qualified class name of the custom Setting Provider implementation. If not configured, default initial values defined in Settings will be used. | +| `bgTaskThreads` | Integer | max(available processor cores/4, 1) | Threads reserved for the starter's background task executor. | +| `clusterConfig.*` | Object | See [ClusterConfig](#clusterconfig-clusterconfig) | Cluster join and addressing options. | +| `rpcConfig.*` | Object | See [RPCConfig](#rpcconfig-rpcconfig) | RPC client/server options. | +| `mqttServiceConfig.*` | Object | See [MQTTServiceConfig](#mqttserviceconfig-mqttserviceconfig) | MQTT service settings. | +| `distServiceConfig.*` | Object | See [DistServiceConfig](#distserviceconfig-distserviceconfig) | Dist service settings. | +| `inboxServiceConfig.*` | Object | See [InboxServiceConfig](#inboxserviceconfig-inboxserviceconfig) | Inbox service settings. | +| `retainServiceConfig.*` | Object | See [RetainServiceConfig](#retainserviceconfig-retainserviceconfig) | Retain service settings. | +| `sessionDictServiceConfig.*` | Object | See [SessionDictServiceConfig](#sessiondictserviceconfig-sessiondictserviceconfig) | Session dictionary service settings. | +| `apiServerConfig.*` | Object | See [APIServerConfig](#apiserverconfig-apiserverconfig) | API server settings. | + +### ClusterConfig (`clusterConfig.*`) + +| Configuration Name | Value Type | Default Value | Description | +| --------------------------------- | ---------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `clusterConfig.env` | String | "" | Cluster environment name. Cluster nodes with different environment names are isolated from each other. Cannot be null or empty. | +| `clusterConfig.host` | String | null | Communication address of the node as a cluster node. Resolution order: if `mqttServiceConfig.server.tcpListener.host` is not "0.0.0.0", use it; else if `rpcConfig.host` is set, use it; else use the SiteLocal address of the host. | +| `clusterConfig.port` | Integer | 0 | Communication port number of the node as a cluster node. `0` selects a free port. For bootstrap nodes, configure a fixed port. | +| `clusterConfig.seedEndpoints` | String | null | Seed node addresses to join the cluster, formatted as `ip:port` and separated by commas. Non-bootstrap nodes should point to a bootstrap node. | +| `clusterConfig.clusterDomainName` | String | null | Cluster domain name. If set, BifroMQ resolves the domain to find cluster contact nodes, simplifying fixed-domain deployments. | + +### RPCConfig (`rpcConfig.*`) + +| Configuration Name | Value Type | Default Value | Description | +| ---------------------------------- | ----------------------------------------------------------------------- | ----------------------------------- | --------------------------------------------------------------------------------------------------- | +| `rpcConfig.host` | String | null | Host used for intra-cluster RPC. If null, follows the same host resolution rule as `clusterConfig`. | +| `rpcConfig.port` | Integer | 0 | RPC server port. `0` lets the system pick a free port. | +| `rpcConfig.enableSSL` | Boolean | false | Whether to enable TLS for RPC. | +| `rpcConfig.clientEventLoopThreads` | Integer | max(4, available processor cores/8) | Netty client event-loop threads for RPC clients. | +| `rpcConfig.serverEventLoopThreads` | Integer | max(4, available processor cores/8) | Netty server event-loop threads for RPC servers. | +| `rpcConfig.clientSSLConfig` | See [SSLContextConfig](#sslcontextconfig--serversslcontextconfig) | null | TLS settings for RPC clients (used when `enableSSL` is true). | +| `rpcConfig.serverSSLConfig` | See [ServerSSLContextConfig](#sslcontextconfig--serversslcontextconfig) | null | TLS settings for RPC servers (used when `enableSSL` is true). | + +### MQTTServiceConfig (`mqttServiceConfig.*`) + +| Configuration Name | Value Type | Default Value | Description | +| ----------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------- | -------------------------------------------------------------------------------------- | +| `mqttServiceConfig.client.workerThreads` | Integer | 0 | Worker threads for MQTT internal clients (0 = use caller thread). | +| `mqttServiceConfig.server.enable` | Boolean | true | Whether to enable the MQTT server. | +| `mqttServiceConfig.server.connTimeoutSec` | Integer | 20 | Timeout from TCP connect to MQTT CONNECT completion; exceeded connections are closed. | +| `mqttServiceConfig.server.maxConnPerSec` | Integer | 2000 | Max MQTT connect operations per second; excess connections are throttled/disconnected. | +| `mqttServiceConfig.server.maxDisconnPerSec` | Integer | 1000 | Max disconnect operations per second during graceful shutdown. | +| `mqttServiceConfig.server.maxMsgByteSize` | Integer | 262144 | Max MQTT CONNECT packet size (including Will); larger packets are rejected. | +| `mqttServiceConfig.server.maxConnBandwidth` | Integer | 524288 | Max per-connection bandwidth (inbound/outbound), in bytes per second. | +| `mqttServiceConfig.server.bossELGThreads` | Integer | 1 | Netty boss threads for accepting MQTT TCP connections. | +| `mqttServiceConfig.server.workerELGThreads` | Integer | max(available processor cores/2, 2) | Netty worker threads for MQTT protocol processing. | +| `mqttServiceConfig.server.userPropsCustomizerFactoryConfig` | `Map<String, Struct>` | {} | Customizer factory settings for MQTT 5 user properties. | +| `mqttServiceConfig.server.tcpListener.enable` | Boolean | true | Enable MQTT over TCP. | +| `mqttServiceConfig.server.tcpListener.host` | String | "0.0.0.0" | Listen address for MQTT over TCP. | +| `mqttServiceConfig.server.tcpListener.port` | Integer | 1883 | Listen port for MQTT over TCP. | +| `mqttServiceConfig.server.tlsListener.enable` | Boolean | false | Enable MQTT over TLS. | +| `mqttServiceConfig.server.tlsListener.host` | String | null | Listen address for MQTT over TLS (defaults to resolved host when null). | +| `mqttServiceConfig.server.tlsListener.port` | Integer | 1884 | Listen port for MQTT over TLS. | +| `mqttServiceConfig.server.tlsListener.sslConfig` | See [ServerSSLContextConfig](#sslcontextconfig--serversslcontextconfig) | null | TLS settings for MQTT over TLS. | +| `mqttServiceConfig.server.wsListener.enable` | Boolean | true | Enable MQTT over WebSocket. | +| `mqttServiceConfig.server.wsListener.host` | String | null | Listen address for MQTT over WebSocket (defaults to resolved host when null). | +| `mqttServiceConfig.server.wsListener.port` | Integer | 8080 | Listen port for MQTT over WebSocket. | +| `mqttServiceConfig.server.wsListener.wsPath` | String | "/mqtt" | WebSocket path for MQTT over WebSocket. | +| `mqttServiceConfig.server.wssListener.enable` | Boolean | false | Enable MQTT over WebSocket Secure. | +| `mqttServiceConfig.server.wssListener.host` | String | null | Listen address for MQTT over WebSocket Secure (defaults to resolved host when null). | +| `mqttServiceConfig.server.wssListener.port` | Integer | 8443 | Listen port for MQTT over WebSocket Secure. | +| `mqttServiceConfig.server.wssListener.wsPath` | String | "/mqtt" | WebSocket path for MQTT over WebSocket Secure. | +| `mqttServiceConfig.server.wssListener.sslConfig` | See [ServerSSLContextConfig](#sslcontextconfig--serversslcontextconfig) | null | TLS settings for MQTT over WebSocket Secure. | + +### DistServiceConfig (`distServiceConfig.*`) + +| Configuration Name | Value Type | Default Value | Description | +| ------------------------------------------------------ | ----------------------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------- | +| `distServiceConfig.client.workerThreads` | Integer | 0 | Worker threads for Dist client. | +| `distServiceConfig.server.enable` | Boolean | true | Whether to enable Dist server. | +| `distServiceConfig.server.workerThreads` | Integer | max(2, available processor cores/4) | Dist server worker threads (0 = run on caller thread). | +| `distServiceConfig.server.attributes` | `Map<String,String>` | {} | Custom attributes attached to Dist server nodes. | +| `distServiceConfig.server.defaultGroups` | `Set<String>` | [] | Default groups served by this Dist server. | +| `distServiceConfig.workerClient.workerThreads` | Integer | max(2, available processor cores/4) | Worker client threads for Dist worker communication. | +| `distServiceConfig.workerClient.queryPipelinePerStore` | Integer | 1000 | Query pipelines per Dist store. | +| `distServiceConfig.worker.enable` | Boolean | true | Whether to enable Dist worker. | +| `distServiceConfig.worker.workerThreads` | Integer | 0 | Dist worker threads (0 = use caller thread). | +| `distServiceConfig.worker.tickerThreads` | Integer | max(1, available processor cores/20) | Background ticker threads. | +| `distServiceConfig.worker.maxWALFetchSize` | Integer | 10MB | Max WAL fetch size in bytes. | +| `distServiceConfig.worker.compactWALThreshold` | Integer | 256MB | WAL compaction threshold in bytes. | +| `distServiceConfig.worker.minGCIntervalSeconds` | Integer | 30 | Minimum GC interval in seconds. | +| `distServiceConfig.worker.maxGCIntervalSeconds` | Integer | 86400 | Maximum GC interval in seconds. | +| `distServiceConfig.worker.dataEngineConfig` | See [StorageEngineConfig](#storageengineconfig) | rocksdb with default settings for data engine | Data store engine settings for Dist worker. | +| `distServiceConfig.worker.walEngineConfig` | See [StorageEngineConfig](#storageengineconfig) | rocksdb with default settings for wal engine | WAL store engine settings for Dist worker. | +| `distServiceConfig.worker.balanceConfig` | See [BalancerOptions](#balanceroptions) | Default balancers for dist worker | Balancer settings for Dist worker. | +| `distServiceConfig.worker.splitHinterConfig` | See [SplitHinterOptions](#splithinteroptions) | Default split hinters for dist worker | Split hinter settings for Dist worker. See [SplitHinterOptions](#splithinteroptions). | +| `distServiceConfig.worker.attributes` | `Map<String,String>` | \{\} | Custom attributes attached to Dist worker. | + +### InboxServiceConfig (`inboxServiceConfig.*`) + +| Configuration Name | Value Type | Default Value | Description | +| ------------------------------------------------------ | ----------------------------------------------- | --------------------------------------------- | ------------------------------------------------------------------------------------- | +| `inboxServiceConfig.client.workerThreads` | Integer | 0 | Worker threads for Inbox client. | +| `inboxServiceConfig.server.enable` | Boolean | true | Whether to enable Inbox server. | +| `inboxServiceConfig.server.workerThreads` | Integer | max(2, available processor cores/4) | Inbox server worker threads. | +| `inboxServiceConfig.server.attributes` | `Map<String,String>` | {} | Custom attributes attached to Inbox server. | +| `inboxServiceConfig.server.defaultGroups` | `Set<String>` | [] | Default groups served by this Inbox server. | +| `inboxServiceConfig.storeClient.workerThreads` | Integer | max(2, available processor cores/4) | Inbox store client worker threads. | +| `inboxServiceConfig.storeClient.queryPipelinePerStore` | Integer | 1000 | Query pipelines per Inbox store. | +| `inboxServiceConfig.store.enable` | Boolean | true | Whether to enable Inbox store. | +| `inboxServiceConfig.store.workerThreads` | Integer | 0 | Inbox store worker threads. | +| `inboxServiceConfig.store.tickerThreads` | Integer | max(1, available processor cores/20) | Inbox store ticker threads. | +| `inboxServiceConfig.store.maxWALFetchSize` | Integer | -1 | Max WAL fetch size in bytes (-1 means no limit). | +| `inboxServiceConfig.store.compactWALThreshold` | Integer | 256MB | WAL compaction threshold in bytes. | +| `inboxServiceConfig.store.expireRateLimit` | Integer | 1000 | Max expired Session cleanup rate per second. | +| `inboxServiceConfig.store.minGCIntervalSeconds` | Integer | 30 | Minimum GC interval in seconds. | +| `inboxServiceConfig.store.maxGCIntervalSeconds` | Integer | 86400 | Maximum GC interval in seconds. | +| `inboxServiceConfig.store.dataEngineConfig` | See [StorageEngineConfig](#storageengineconfig) | rocksdb with default settings for data engine | Data store engine settings for Inbox store. | +| `inboxServiceConfig.store.walEngineConfig` | See [StorageEngineConfig](#storageengineconfig) | rocksdb with default settings for wal engine | WAL store engine settings for Inbox store. | +| `inboxServiceConfig.store.balanceConfig` | See [BalancerOptions](#balanceroptions) | Default balancers for inbox store | Balancer settings for Inbox store. | +| `inboxServiceConfig.store.splitHinterConfig` | See [SplitHinterOptions](#splithinteroptions) | Default split hinter for inbox store | Split hinter settings for Inbox store. See [SplitHinterOptions](#splithinteroptions). | +| `inboxServiceConfig.store.attributes` | `Map<String,String>` | \{\} | Custom attributes attached to Inbox store. | + +### RetainServiceConfig (`retainServiceConfig.*`) + +| Configuration Name | Value Type | Default Value | Description | +| ------------------------------------------------------- | ----------------------------------------------- | --------------------------------------------- | -------------------------------------------------------------------------------------- | +| `retainServiceConfig.client.workerThreads` | Integer | 0 | Worker threads for Retain client. | +| `retainServiceConfig.server.enable` | Boolean | true | Whether to enable Retain server. | +| `retainServiceConfig.server.workerThreads` | Integer | max(2, available processor cores/4) | Retain server worker threads. | +| `retainServiceConfig.server.attributes` | `Map<String,String>` | {} | Custom attributes attached to Retain server. | +| `retainServiceConfig.server.defaultGroups` | `Set<String>` | [] | Default groups served by this Retain server. | +| `retainServiceConfig.storeClient.workerThreads` | Integer | max(2, available processor cores/4) | Retain store client worker threads. | +| `retainServiceConfig.storeClient.queryPipelinePerStore` | Integer | 1000 | Query pipelines per Retain store. | +| `retainServiceConfig.store.enable` | Boolean | true | Whether to enable Retain store. | +| `retainServiceConfig.store.workerThreads` | Integer | 0 | Retain store worker threads. | +| `retainServiceConfig.store.tickerThreads` | Integer | max(1, available processor cores/20) | Retain store ticker threads. | +| `retainServiceConfig.store.maxWALFetchSize` | Integer | 50MB | Max WAL fetch size in bytes. | +| `retainServiceConfig.store.compactWALThreshold` | Integer | 256MB | WAL compaction threshold in bytes. | +| `retainServiceConfig.store.gcIntervalSeconds` | Integer | 600 | GC interval in seconds. | +| `retainServiceConfig.store.dataEngineConfig` | See [StorageEngineConfig](#storageengineconfig) | rocksdb with default settings for data engine | Data store engine settings for Retain store. | +| `retainServiceConfig.store.walEngineConfig` | See [StorageEngineConfig](#storageengineconfig) | rocksdb with default settings for wal engine | WAL store engine settings for Retain store. | +| `retainServiceConfig.store.balanceConfig` | See [BalancerOptions](#balanceroptions) | Default balancers for retain store | Balancer settings for Retain store. | +| `retainServiceConfig.store.splitHinterConfig` | See [SplitHinterOptions](#splithinteroptions) | Default split hinter for retain store | Split hinter settings for Retain store. See [SplitHinterOptions](#splithinteroptions). | +| `retainServiceConfig.store.attributes` | `Map<String,String>` | \{\} | Custom attributes attached to Retain store. | + +### SessionDictServiceConfig (`sessionDictServiceConfig.*`) + +| Configuration Name | Value Type | Default Value | Description | +| ----------------------------------------------- | -------------------- | ------------- | ---------------------------------------------------------- | +| `sessionDictServiceConfig.client.workerThreads` | Integer | 0 | Worker threads for SessionDict client. | +| `sessionDictServiceConfig.server.enable` | Boolean | true | Whether to enable SessionDict server. | +| `sessionDictServiceConfig.server.workerThreads` | Integer | 0 | SessionDict server worker threads (0 = use caller thread). | +| `sessionDictServiceConfig.server.attributes` | `Map<String,String>` | \{\} | Custom attributes attached to SessionDict server. | +| `sessionDictServiceConfig.server.defaultGroups` | `Set<String>` | [] | Default groups served by this SessionDict server. | + +### APIServerConfig (`apiServerConfig.*`) + +| Configuration Name | Value Type | Default Value | Description | +| ---------------------------------- | ----------------------------------------------------------------------- | ------------- | ------------------------------------------------------------------- | +| `apiServerConfig.enable` | Boolean | true | Whether to enable HTTP API access. | +| `apiServerConfig.host` | String | null | API listen address; if null, follows the same host resolution rule. | +| `apiServerConfig.httpPort` | Integer | 8091 | HTTP API port. | +| `apiServerConfig.maxContentLength` | Integer | 262144 | Max request body size in bytes. | +| `apiServerConfig.workerThreads` | Integer | 2 | Worker threads handling HTTP API requests. | +| `apiServerConfig.enableSSL` | Boolean | false | Whether to enable HTTPS for the API. | +| `apiServerConfig.sslConfig` | See [ServerSSLContextConfig](#sslcontextconfig--serversslcontextconfig) | null | TLS settings for the API server when HTTPS is enabled. | + +## SSLContextConfig & ServerSSLContextConfig SSLContextConfig is used to configure the SSL connection parameters for the client, while ServerSSLContextConfig is used to configure the SSL connection parameters for the server. @@ -98,25 +188,32 @@ If you leave SSLContextConfig or ServerSSLContextConfig set to null while the co ## StorageEngineConfig -StorageEngineConfig is used to set the configuration parameters for the data engine and WAL engine of the built-in state service. +StorageEngineConfig is used to set the configuration parameters for the data engine and WAL engine of the built-in stateful service. The shape of `props` depends on the engine type; defaults are applied per service in code. -| Configuration Name | Value Type | Description | -| ------------------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `type` | String | Specifies the type of data engine used in the built-in storage service. Options include: rocksdb: Provides persistence functionality, allowing state to be recovered after a restart; memory: No persistence, data will be lost after a restart. | -| `dataPathRoot` | String | Effective when type is set to rocksdb. Specifies the directory to store data files. If configured as an absolute path, it will be directly loaded; if configured as a relative path, it will try to load from the directory specified by the `DATA_DIR` and `user.dir` system parameters. | -| `compactMinTombstoneKeys` | Integer | Effective when type is set to rocksdb. The number of Tombstone keys that trigger a compaction operation. | -| `compactTombstonePercent` | Double | Effective when type is set to rocksdb. When the number of deleted keys in a specific Range exceeds compactMinTombstoneKeys, and the proportion of deleted keys to the total exceeds compactTombstonePercent, a compaction operation will be performed on this range. | -| `asyncWALFlush` | Boolean | Applicable only to the WAL engine, whether to enable asynchronous FlushWAL data to disk. | -| `fsyncWAL` | Boolean | Applicable only to the WAL engine. Whether to perform an fsync operation after writing to the WAL. If this flag is true, writing speed will be slower. If this flag is false, and the machine crashes, some recent writes may be lost. | +| Configuration Name | Value Type | Default Value | Description | +| ------------------ | --------------------- | ------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `type` | String | `rocksdb` | Storage engine type. `rocksdb` enables persistence; `memory` keeps state in memory only (lost on restart). | +| `props` (rocksdb) | `Map<String, Object>` | Service-specific defaults | Additional selectively exposed RocksDB options. Tune only if you understand RocksDB well. | +| `props` (memory) | `Map<String, Object>` | \{\} | No options for `memory` currently, normally for testing purpose | ## BalancerOptions -BalancerOptions is used to set the configuration parameters for the Balancer of the built-in state service. +BalancerOptions is used to set the configuration parameters for the Balancer of the built-in stateful service. + +| Configuration Name | Value Type | Default Value | Description | +| ---------------------- | --------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `bootstrapDelayInMS` | Long | 15000 | Delay before the balancer starts; helps avoid rebalancing during initial bootstrap. | +| `zombieProbeDelayInMS` | Long | 15000 | Interval for probing zombie (stale) replicas. | +| `retryDelayInMS` | Long | 5000 | Delay between rebalance retries. | +| `balancers` | `Map<String, Struct>` | Service-specific defaults (see code) | Map of balancer implementation FQNs to their config. Multiple balancers can be enabled; defaults are set in each service (Dist/Inbox/Retain) per code. | + +## SplitHinterOptions + +SplitHinterOptions configures how ranges are split for built-in stateful services. -| Configuration Name | Value Type | Default Value | Description | -| ---------------------- | -------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `scheduleIntervalInMs` | Long | 5000 | The interval at which the Balancer attempts to balance the load. | -| `balancers` | List of String | | The fully qualified names of the balancer implementations that are enabled. Different balancer implementations can be set for different built-in storage services. | +| Configuration Name | Value Type | Default Value | Description | +| ------------------ | --------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------- | +| `hinters` | `Map<String, Struct>` | Service-specific defaults (see code) | A map of split hinter implementation FQNs to their config. Multiple hinters can be enabled. | -Note: Adjusting the parameters related to StorageEngineConfig and BalancerOptions requires an in-depth understanding of the storage engine implementation of BifroMQ. Improper configuration may lead to abnormal behavior of the state storage +Note: Adjusting the parameters related to StorageEngineConfig, BalancerOptions, and SplitHinterOptions requires an in-depth understanding of the storage engine implementation of BifroMQ. Improper configuration may lead to abnormal behavior of the state storage service. diff --git a/docs/get_started/quick_install.md b/docs/get_started/quick_install.md index 8e86ac68..9bcb8812 100644 --- a/docs/get_started/quick_install.md +++ b/docs/get_started/quick_install.md @@ -8,7 +8,7 @@ title: "Quick Install & Verify" For a rapid setup, Docker is recommended: ```bash -docker run -d --name bifromq -p 1883:1883 bifromq/bifromq:latest +docker run -d --name bifromq -p 1883:1883 apache/bifromq:4.0.0-incubating ``` For further installation alternatives and comprehensive details, refer to [Installation](../installation/intro.md). @@ -23,7 +23,6 @@ Below are the steps to quickly verify the basic MQTT functionality of BifroMQ us  3. Fill in the required fields: - - **Name**: Any descriptive name of your choice. - **ClientID**: Can be set manually or generated randomly. Must consist of "a–z", "0–9", "\_", "-", ≤128 bytes, UTF8 encoded, and unique. - **Host**: The connection address, including protocol prefix: diff --git a/docs/plugin/setting_provider/1_tenantsetting.md b/docs/plugin/setting_provider/1_tenantsetting.md index c4bdbaaa..7b998e62 100644 --- a/docs/plugin/setting_provider/1_tenantsetting.md +++ b/docs/plugin/setting_provider/1_tenantsetting.md @@ -20,35 +20,43 @@ deployments. ## Supported Settings -| Name | Type | Initial Value | Description | -|----------------------------------|---------|---------------|-----------------------------------------------------------------| -| `MQTT3Enabled` | Boolean | true | Enables or disables MQTT version 3.1 support. | -| `MQTT4Enabled` | Boolean | true | Enables or disables MQTT version 3.1.1 support. | -| `MQTT5Enabled` | Boolean | true | Enables or disables MQTT version 5.0 support. | -| `DebugModeEnabled` | Boolean | false | Enables or disables debug mode. | -| `ForceTransient` | Boolean | false | Forces transient mode for connections. | -| `ByPassPermCheckError` | Boolean | true | Bypasses permission check errors. | -| `PayloadFormatValidationEnabled` | Boolean | true | Enables or disables payload format validation. | -| `RetainEnabled` | Boolean | true | Enables or disables message retain feature. | -| `WildcardSubscriptionEnabled` | Boolean | true | Enables or disables wildcard subscriptions. | -| `SubscriptionIdentifierEnabled` | Boolean | true | Enables or disables subscription identifiers. | -| `SharedSubscriptionEnabled` | Boolean | true | Enables or disables shared subscriptions. | -| `MaximumQoS` | Integer | 2 | Sets the maximum QoS level. Valid values: 0, 1, 2. | -| `MaxTopicLevelLength` | Integer | 40 | Maximum length of each topic level. | -| `MaxTopicLevels` | Integer | 16 | Maximum number of topic levels. | -| `MaxTopicLength` | Integer | 255 | Maximum total length of a topic. | -| `MaxTopicAlias` | Integer | 10 | Maximum number of topic aliases. | -| `MaxSharedGroupMembers` | Integer | 200 | Maximum members in a shared subscription group. | -| `MaxTopicFiltersPerInbox` | Integer | 100 | Maximum topic filters per inbox. | -| `MsgPubPerSec` | Integer | 200 | Maximum number of messages published per second per connection. | -| `ReceivingMaximum` | Integer | 200 | Maximum number of receiving messages per second per connection. | -| `InBoundBandWidth` | Long | 512 * 1024L | Maximum inbound bandwidth in bytes per connection. | -| `OutBoundBandWidth` | Long | 512 * 1024L | Maximum outbound bandwidth in bytes per connection. | -| `MaxUserPayloadBytes` | Integer | 256 * 1024 | Maximum user payload size in bytes. | -| `MaxResendTimes` | Integer | 3 | Maximum times a message can be resent when qos is 1 or 2. | -| `ResendTimeoutSeconds` | Integer | 10 | Timeout in seconds before a message is considered for resend. | -| `MaxTopicFiltersPerSub` | Integer | 10 | Maximum topic filters per subscription. | -| `MaxSessionExpirySeconds` | Integer | 24 * 60 * 60 | Maximum session expiry time in seconds. | -| `SessionInboxSize` | Integer | 1000 | Maximum size of session inbox. | -| `QoS0DropOldest` | Boolean | false | Whether to drop the oldest QoS 0 messages first. | -| `RetainMessageMatchLimit` | Integer | 10 | Limit for retained message matches. | \ No newline at end of file +| Name | Type | Initial Value | Description | +|-----------------------------------|---------|---------------------|-----------------------------------------------------------------------------------------------------| +| `MQTT3Enabled` | Boolean | true | Enables or disables MQTT v3.1 support. | +| `MQTT4Enabled` | Boolean | true | Enables or disables MQTT v3.1.1 support. | +| `MQTT5Enabled` | Boolean | true | Enables or disables MQTT v5.0 support. | +| `NoLWTWhenServerShuttingDown` | Boolean | true | Suppresses Last Will delivery when the server is shutting down. | +| `DebugModeEnabled` | Boolean | false | Enables or disables debug mode. | +| `ForceTransient` | Boolean | false | Forces transient mode for connections. | +| `ByPassPermCheckError` | Boolean | true | Bypasses permission check errors. | +| `PayloadFormatValidationEnabled` | Boolean | true | Enables or disables payload format validation. | +| `RetainEnabled` | Boolean | true | Enables or disables message retain feature. | +| `WildcardSubscriptionEnabled` | Boolean | true | Enables or disables wildcard subscriptions. | +| `SubscriptionIdentifierEnabled` | Boolean | true | Enables or disables subscription identifiers. | +| `SharedSubscriptionEnabled` | Boolean | true | Enables or disables shared subscriptions. | +| `MaximumQoS` | Integer | 2 | Maximum QoS level. Valid values: 0, 1, 2. | +| `MaxTopicLevelLength` | Integer | 40 | Maximum length of each topic level (> 0). | +| `MaxTopicLevels` | Integer | 16 | Maximum number of topic levels (> 0). | +| `MaxTopicLength` | Integer | 255 | Maximum total topic length (< 65536). | +| `MaxTopicAlias` | Integer | 10 | Maximum number of topic aliases (< 65536). | +| `MaxSharedGroupMembers` | Integer | 200 | Maximum members in a shared subscription group (> 0). | +| `MaxTopicFiltersPerInbox` | Integer | 100 | Maximum topic filters per inbox (> 0). | +| `MsgPubPerSec` | Integer | 200 | Maximum publishes per second per connection (> 0, ≤ 1000). | +| `ReceivingMaximum` | Integer | 200 | Maximum in-flight QoS 1/2 messages per connection (> 0, ≤ 65535). | +| `InBoundBandWidth` | Long | 512 * 1024L | Maximum inbound bandwidth per connection in bytes (≥ 0). | +| `OutBoundBandWidth` | Long | 512 * 1024L | Maximum outbound bandwidth per connection in bytes (≥ 0). | +| `MaxLastWillBytes` | Integer | 128 | Maximum Last Will payload size in bytes (> 0, ≤ 250 * 1024 * 1024). | +| `MaxUserPayloadBytes` | Integer | 256 * 1024 | Maximum user payload size in bytes (> 0, ≤ 256 * 1024 * 1024). | +| `MinSendPerSec` | Integer | 8 | Minimum allowed publishes per second per connection (> 0). | +| `MaxResendTimes` | Integer | 3 | Maximum resend attempts for QoS 1/2 messages (≥ 0). | +| `ResendTimeoutSeconds` | Integer | 10 | Timeout in seconds before a message is considered for resend (> 0). | +| `MaxTopicFiltersPerSub` | Integer | 10 | Maximum topic filters per subscription (> 0, ≤ 100). | +| `MaxGroupFanout` | Integer | 100 | Maximum fanout for group deliveries (> 0). | +| `MaxPersistentFanout` | Integer | Integer.MAX_VALUE | Maximum persistent fanout concurrency (> 0). | +| `MaxPersistentFanoutBytes` | Long | Long.MAX_VALUE | Maximum bytes allowed for persistent fanout (> 0). | +| `MaxSessionExpirySeconds` | Integer | 24 * 60 * 60 | Maximum session expiry time in seconds (> 0, ≤ 0xFFFFFFFF). | +| `MinSessionExpirySeconds` | Integer | 60 | Minimum session expiry time in seconds (> 0, ≤ MaxSessionExpirySeconds). | +| `MinKeepAliveSeconds` | Integer | 60 | Minimum keep alive in seconds (> 0, < 65535). | +| `SessionInboxSize` | Integer | 1000 | Maximum size of session inbox (> 0, ≤ 65535). | +| `QoS0DropOldest` | Boolean | false | Whether to drop the oldest QoS 0 messages first. | +| `RetainMessageMatchLimit` | Integer | 10 | Limit for retained message matches (≥ 0). |
