emqx.conf配置

EMQX 客服发表于:2022年03月24日 16:29:01更新于:2022年03月24日 17:59:56

node.name

## Value: <name>@<host>
##
## Default: emqx@127.0.0.1
node.name = emqx@127.0.0.1

说明:节点名。格式为 <name>@<host>。其中 <host> 可以是 IP 地址,也可以是 FQDN。

提示:FQDN(全限定域名):同时带有主机名和域名的名称;例如:主机名server,域名是emqx.com,那么FQDN就是server.emqx.com。

node.cookie

## Value: String
## 
## Default:emqxsecretcookie
node.cookie = emqxsecretcookie

说明:分布式 Erlang 集群使用的 cookie 值。

注:cookie是一个字符串,用于辨别用户身份,只有cookie相同的两个节点才能建立连接

node.data_dir

## Value: Folder
##
## Default:./data
node.data_dir = data

说明:节点的 data 目录,用于存放 Mnesia 数据文件等。

node.heartbeat

## Value: on|off
##
## Default:off
## node.heartbeat = on

说明:

系统调优参数,此配置将覆盖 vm.args 文件里的 -heart 参数。

启用或关闭 Erlang 运行时检测机制,并在运行时终止时自动重启。需小心使用,以免手动关闭 emqx 时被监控进程重新启动。

注:如果节点对心跳ping没有响应,启用此选项可能会导致节点重新启动。

注:当由systemd(或systemd等其他监管工具)管理时,heart可能只会导致EMQ X停止,但重启与否将取决于systemd的重启策略。

注:在docker中运行时,一旦心脏进程杀死EMQ X,容器就会死亡,但重启与否取决于容器监控策略,例如k8s重启策略。

node.async_threads

## Value: 0-1024
##
## vm.args: +A Number
## node.async_threads = 4

说明:

系统调优参数,此配置将覆盖 vm.args 文件里的 +A 参数。

设置 Erlang 运行时异步线程池中的线程数量。

node.process_limit

## Value: Number [1024-134217727]
##
## vm.args: +P Number
## node.process_limit = 2097152

说明:

系统调优参数,此配置将覆盖 vm.args 文件里的 +P 参数。

设置 Erlang 允许的最大进程数,这将影响 emqx 节点能处理的连接数。

node.max_ports

## Value: Number [1024-134217727]
##
## vm.args: +Q Number
## node.max_ports = 1048576

说明:

系统调优参数,此配置将覆盖 vm.args 文件里的 +Q 参数。

设置 Erlang 允许的最大 Ports 数量。

node.dist_buffer_size

## Value: Number [1KB-2GB]
##
## vm.args: +zdbbl size
## node.dist_buffer_size = 8MB

说明:

系统调优参数,此配置将覆盖 vm.args 文件里的 +zdbbl 参数。

设置 Erlang 分布式通信使用的最大缓存大小。

node.max_ets_tables

## Value: Number
##
## vm.args: +e Number
## node.max_ets_tables = 262144

说明:

系统调优参数,此配置将覆盖 vm.args 文件里的 +e 参数。

设置 Erlang 运行时允许的最大 ETS 表数量。请注意,mnesia和SSL将创建临时ETS表。

node.global_gc_interval

## Value: Duration
##
## Examples:
##  - 2h:  2 hours
##  - 30m: 30 minutes
##  - 20s: 20 seconds
##
## Defaut: 15 minutes
node.global_gc_interval = 15m

说明:

系统调优参数,设置 Erlang 运行多久强制进行一次全局垃圾回收。

node.fullsweep_after

## Value: Number [0-65535]
##
## vm.args: -env ERL_FULLSWEEP_AFTER Number
## node.fullsweep_after = 1000

说明:

系统调优参数,此配置将覆盖 vm.args 文件里的 -env ERL_FULLSWEEP_AFTER 参数。

设置 Erlang 运行时多少次 generational GC 之后才进行一次 fullsweep GC。

node.crash_dump

## Value: Log file
node.crash_dump = log/crash.dump

说明:

设置 Erlang crash_dump 文件的存储路径和文件名。

node.ssl_dist_optfile

## Value: File
##
## vm.args: -ssl_dist_optfile <File>
## node.ssl_dist_optfile = etc/ssl_dist.conf

说明:

此配置将覆盖 vm.args 文件里的 -ssl_dist_optfile 参数。

如使用 SSL 方式建立 emqx 集群,需指定 SSL 分布式协议的配置文件。需要与 cluster.proto_dist = inet_tls 一起使用。

node.dist_net_ticktime

## Value: Number
##
## vm.args: -kernel net_ticktime Number
## node.dist_net_ticktime = 120

说明:

系统调优参数,此配置将覆盖 vm.args 文件里的 -kernel net_ticktime 参数。

当一个节点持续无响应多久之后,认为其已经宕机并断开连接。详情请参见

node.dist_listen_min

## Value: Port [1024-65535]
node.dist_listen_max = 6369

说明:

node.dist_listen_max 一起设定一个 TCP 端口段,此端口段用于分配给分布式 Erlang,作为分布式通道的监听端口。注意如果在节点之间设置了防火墙,需要将此端口段放进防火墙的端口白名单里。

node.dist_listen_max

## Value: Port [1024-65535]
node.dist_listen_max = 6369

说明:

node.dist_listen_min 一起设定一个 TCP 端口段,此端口段用于分配给分布式 Erlang,作为分布式通道的监听端口。注意如果在节点之间设置了防火墙,需要将此端口段放进防火墙的端口白名单里。

allow_anonymous

## Value: true | false
allow_anonymous = true

说明:

是否允许匿名用户登录系统。

注:生产环境建议关闭此选项。

acl_nomatch

## Value: allow | deny
acl_nomatch = allow

说明:

ACL 未命中时,允许或者拒绝 发布/订阅 操作。

acl_file

## Value: File Name
acl_file = etc/acl.conf

说明:

默认 ACL 文件的路径。

enable_acl_cache

## Value: on | off
enable_acl_cache = on

说明:

是否启用ACL缓存

acl_cache_max_size

## Value: Integer greater than 0
## Default: 32
acl_cache_max_size = 32

说明:

ACL规则最大缓存条数

acl_cache_ttl

## Value: Duration
## Default: 1 minute
acl_cache_ttl = 1m

说明:ACL规则最大缓存时间

acl_deny_action

## Value: ignore | disconnect
## Default: ignore
acl_deny_action = ignore

说明:

ACL 检查失败后,执行的操作。

  • ignore:不做任何操作。

  • disconnect:断开连接。

flapping_detect_policy

## Value: Integer,Duration,Duration
flapping_detect_policy = 30, 1m, 5m

说明:

指定 Flapping 检查策略。

格式:<threshold>,<duration>,<banned>

例如,30, 1m, 5m,它表示如果客户端在 1 分钟内断开连接 30 次,那么在后续 5 分钟内禁止登录。

mqtt.max_packet_size

## Value: Bytes
## Default: 1MB
mqtt.max_packet_size = 1MB

说明:允许的 MQTT 报文最大长度。

mqtt.max_clientid_len

## Value: Number [23-65535]
mqtt.max_clientid_len = 65535

说明:允许的 Client ID 串的最大长度。

mqtt.max_topic_levels

## Value: Number [0-65535]
## Default: 128
mqtt.max_topic_levels = 128

说明:允许客户端订阅主题的最大层级。0 表示不限制。

提示:Topic层级过多可能会导致订阅时的性能问题

mqtt.max_qos_allowed

## Value: 0 | 1 | 2
mqtt.max_qos_allowed = 2

说明:允许客户端发布的最大 QoS 等级。

mqtt.max_topic_alias

## Value: 0-65535
mqtt.max_topic_alias = 65535

说明:允许最大的主题别名数。0 表示不支持主题别名。

mqtt.retain_available

## Value: boolean
mqtt.retain_available = true

说明:是否支持 Retain 消息。

mqtt.wildcard_subscription

## Value: boolean
mqtt.wildcard_subscription = true

说明:是否支持订阅通配主题。

mqtt.shared_subscription

## Value: boolean
mqtt.shared_subscription = true

说明:是否支持共享订阅

mqtt.ignore_loop_deliver

## Value: true | false
mqtt.ignore_loop_deliver = false

说明:是否忽略自己发送的消息。如果忽略,则表明 EMQX 不会向消息的发送端投递此消息。

mqtt.strict_mode

## Value: true | false
mqtt.strict_mode = false

说明:是否开启严格检查模式。严格检查模式会更细致的检查 MQTT 报文的正确性。

plugins.etc_dir

## Value: Folder
plugins.etc_dir = etc/plugins/

说明:插件的配置目录

plugins.loaded_file

## Value: File
plugins.loaded_file = data/loaded_plugins

说明:插件启动列表的配置文件路径。

plugins.expand_plugins_dir

## Value: File
plugins.expand_plugins_dir = etc/plugins/

说明:外部插件存放目录。

broker.sys_interval

## Value: Duration
## Default: 1m, 1 minute
broker.sys_interval = 1m

说明:设置系统主题 ($SYS) 消息的发布间隔。

broker.sys_heartbeat

## Value: Duration
## Default: 30s
broker.sys_heartbeat = 30s

说明:设置系统心跳消息的发布间隔。系统心跳消息包括下面两个主题:

  • "$SYS/brokers/<node>/uptime"

  • "$SYS/brokers/<node>/datetime"

broker.session_locking_strategy

## Value: Enum
## - local
## - leader
## - quorum
## - all
broker.session_locking_strategy = quorum

说明:设置会话集群锁的类型。会话的集群锁用来防止同一个客户端在多个不同节点上创建多个会话,常见于客户端频繁切换节点登录的情况。

broker.shared_subscription_strategy

## Value: Enum
## - random
## - round_robin
## - sticky
## - hash # same as hash_clientid
## - hash_clientid
## - hash_topic
broker.shared_subscription_strategy = random

说明:设置共享订阅的分发策略。可选值为:

  • random: 在所有订阅者中随机选择

  • round_robin: 按照一个固定的顺序选择下一个订阅者

  • sticky: 首次分发时随机选择一个订阅者,后续消息一直发往这一个订阅者

  • hash_clientid: 按照发布者 ClientID 的哈希值

  • hash_topic: 按照源消息主题的哈希值

broker.shared_dispatch_ack_enabled

## Value: Enum
## - true
## - false
broker.shared_dispatch_ack_enabled = false

说明:开启或关闭共享订阅对于 qos1/qos2 消息的 ACK 检查功能。开启后,如果投递到某个订阅者但收不到ACK,将尝试投递给订阅组里的下一个订阅者。

broker.route_batch_clean

## Value: Flag
broker.route_batch_clean = off

说明:开启或关闭批量清理路由信息。批量清理路由可用在短时间内大量客户端掉线的情况,以提高清理效率。

broker.perf.route_lock_type

## Value: Enum
##  - key:   mnesia translational updates with per-key locks. recommended for single node setup.
##  - tab:   mnesia translational updates with table lock. recommended for multi-nodes setup.
##  - global: global lock protected updates. recommended for larger cluster.
## NOTE: when changing from/to 'global' lock, it requires all nodes in the cluster
## to be stopped before the change.
# broker.perf.route_lock_type = key

Description

选择在数据库中为通配符订阅更新路由信息时锁的粒度。

  • key (默认值) 为每个前缀拿一次数据库锁。

  • tab 表锁

  • global 全局锁

对于较大集群,(如7个node或以上),尤其是node之间网络延迟大的,推荐是用tabglobal。 注意:是需要重启整个集群来使得更新生效。

broker.perf.trie_compaction

## Value: Enum
##  - true: enable trie path compaction
##  - false: disable trie path compaction
broker.perf.trie_compaction = false

Description

设置为 true 时,对通配符订阅表进行压缩。 压缩可优化写操作,降低高并发量的订阅请求响应时间,内存使用量也只有非压缩时的一半。 非压缩优化读操作,适用于发布主题层数较多的场景。

注意: 将该配置从 fase 改成 true 时,集群中的节点可依次重启来是配置生效。 从 true 改为 false 时,需要将集群中所有的节点重启,否则会发生有些消息 无法被路由的情况。

license.file

license.file = etc/emqx.lic

说明:license文件路径


    您需要登录后才可以回复