System Properties
Before adjusting system properties in BifroMQ, it's necessary to have a thorough understanding of its internal mechanisms, as inappropriate modifications can lead to unexpected behavior. Additionally, these system properties are closely
linked with BifroMQ's internal implementation and may not be compatible across different versions. System properties can be set via JVM startup parameters, allowing for flexible customization of BifroMQ's behavior.
For example, setting -Dmqtt_utf8_sanity_check=false
disables the check for MQTT protocol-defined UTF8 string formats.
Below is a table listing the system properties supported by the current version:
Property Key | Default Value | Description |
---|---|---|
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 successfully.This parameter specifies the timeout duration for DNS resolution when constructing a cluster using the "clusterConfig.clusterDomain". 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. The cluster_domain_resolve_timeout_seconds parameter controls the maximum amount of time allowed for this DNS resolution to complete successfully. |
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. |
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_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. |
session_register_num | 1000 | Number of concurrent session registers. |
data_plane_tolerable_latency_ms | 1000L | Tolerable latency in milliseconds for the data plane. |
data_plane_burst_latency_ms | 5000L | Burst latency in milliseconds for the data plane. |
control_plane_tolerable_latency_ms | 2000L | Tolerable latency in milliseconds for the control plane. |
control_plane_burst_latency_ms | 5000L | Burst latency in milliseconds for the control plane. |
dist_server_dist_worker_call_queues | CPU cores | Number of dist worker call queues. |
dist_worker_fanout_parallelism | Max(2, CPU cores) | Parallelism level for fanout 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. |
dist_worker_match_parallelism | Max(2, CPU cores / 2) | Parallelism level for match operations. |
dist_worker_fanout_split_threshold | 100000 | Threshold for splitting fanout operations when fanout split hinter enabled. |
dist_worker_split_max_cpu_usage | 0.8 | Maximum CPU usage threshold for splitting 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_split_io_nanos_limit | 30_000L | Nanoseconds limit for I/O operations during split when fanout split hinter enabled. |
dist_worker_split_max_io_density | 100 | Maximum I/O density for split operations when fanout split hinter enabled. |
dist_worker_range_voter_count | 3 | Number of voters for range decisions. |
dist_worker_recovery_timeout_millis | 10000L | Timeout in milliseconds for worker recovery when recovery balancer enabled. |
inbox_deliverers | 100 | Number of inbox deliverers. |
inbox_fetch_queues_per_range | Max(1, CPU cores / 4) | Number of fetch queues per range. |
inbox_check_queues_per_range | 1 | Number of check queues per range. |
inbox_store_load_estimation_window_seconds | 5L | Time window in seconds for load estimation in inbox store. |
inbox_store_range_split_limit | Max(1, CPU cores / 4) | Range split will stop when local inbox store hits the limit. |
inbox_store_range_split_max_cpu_usage | 0.8 | Maximum CPU usage threshold for range split in inbox store. |
inbox_store_range_split_io_nanos_limit | 30_000 | Nanoseconds limit for I/O operations during range split in inbox store. |
inbox_store_range_split_max_io_density | 100 | Maximum I/O density for range split operations in inbox store. |
inbox_store_range_voter_count | 1 | Number of voters for range decisions in inbox store. |
inbox_store_recovery_timeout_millis | 10000L | Timeout in milliseconds for inbox store recovery. |
mqtt_deliverers_per_server | CPU cores | Number of MQTT deliverers per server. |
retain_store_range_split_limit | Max(1, CPU cores / 4) | Range split will stop when local retain store hits the limit. |
retain_store_range_split_max_cpu_usage | 0.8 | Maximum CPU usage threshold for range split in retain store. |
retain_store_range_split_io_nanos_limit | 30_000L | Nanoseconds limit for I/O operations during range split in retain store. |
retain_store_range_split_max_io_density | 100 | Maximum I/O density for range split operations in retain store. |
retain_store_range_voter_count | 3 | Number of voters for range decisions in retain store. |
retain_store_load_est_window_seconds | 5L | Time window in seconds for load estimation in retain store. |
retain_store_recovery_timeout_millis | 10000L | Timeout in milliseconds for retain store recovery. |