EMQ X关键参数解析之can_do

阅读更多
EMQ X关键参数解析

EMQ X版本为【emqx 3.1.0 is started successfully!】

1、参数位置:【/etc/emqx.conf】

1> zone.external.max_awaiting_rel = 4000
## Maximum QoS2 packets (Client -> Broker) awaiting PUBREL, 0 means no limit.
##
## Value: Number
此参数控制每次连接publish消息到Topic的数量,如果持久订阅者不在线,则消息会先进入到message_queue中,或者inflight窗口满时,消息会缓存到message_queue,这个参数反映message_queue的长度。
通过zone.external.max_inflight = 1000参数控制,注意inflight队列中的消息,会有retry机制。

注意:参数zone.external.max_awaiting_rel默认值为0,即不限制;

2> zone.external.max_inflight = 1000
## Maximum size of the Inflight Window storing QoS1/2 messages delivered but unacked.
##
## Value: Number
此参数控制未应答消息的最大数量,针对QoS1和QoS2类的消息,进入此队列的消息可能出现重发或者丢失,取决于另一个参数zone.external.retry_interval;

飞行窗口(Inflight Window)保存当前正在发送未确认的 Qos1/2 消息。窗口值越大,吞吐越高;窗口值越小,消息顺序越严格。

当客户端离线或者飞行窗口(Inflight Window)满时,消息缓存到队列。如果消息队列满,先丢弃 Qos0 消息或最早进入队列的消息。

3> zone.external.retry_interval = 60s
## Retry interval for QoS1/2 message delivering.
##
## Value: Duration
此参数控制飞行中消息重试间隔,如果在重试间隔内,发送消息已结束,则不触发重试,可能导致消息丢失
如果在重试间隔内,发送消息已结束,则触发重试,可能导致消息重复消费。

注意:参数zone.external.retry_interval默认值为20s。

4> listener.tcp.external.max_conn_rate = 1000
此参数控制,客户端pub/sub,连接到emqx的速率,以每秒为单位,即1000Cps

5> listener.tcp.external.rate_limit = 1024,4096
## Rate limit for the external MQTT/TCP connections. Format is 'rate,burst'.
##
## Value: rate,burst
## Unit: Bps
此参数单位为Bps,类似带宽控制,用于消息限流,此参数要谨慎使用,触发限流条件后,会导致inflight消息增加,可能发生仅收取带宽数量内的消息,
后续消息可能收取不到。

此参数默认是关闭的

6> zone.external.session_expiry_interval = 30m
## Default session expiry interval for MQTT V3.1.1 connections.
##
## Value: Duration
## -d: day
## -h: hour
## -m: minute
## -s: second
##
## Default: 2h, 2 hours
此参数控制session过期间隔扫描周期,默认是2小时,扫描一次是否过期,持久化订阅在某些情况(不正常失效时),可导致同一个clientId不能再次发起持久化订阅。
建议此参数配置小一点,比如30minute

7> 【共享订阅】
## - random
## - round_robin
## - sticky
## - hash
>>>broker.shared_subscription_strategy = round_robin
>>>zone.external.shared_subscription = true
>>>broker.shared_dispatch_ack_enabled = true

EMQ X支持共享订阅,类似Kafka的consumer_group,共享订阅同一个topic时,相当对该topic进行分发消费,而不是备份消费。

pub端正常向指定topic发消息
sub端需要配置成共享订阅方式,通过topic名称区分,即$share++topic,在原topic前添加共享订阅标记和分组标记,比如:$share/cnd/YourCompanyTm/02012345678/+

注意:broker.shared_subscription_strategy默认是random策略,而zone.external.shared_subscription和broker.shared_dispatch_ack_enabled默认都是false

你可能感兴趣的:(MQTT,EMQ,X,max_inflight,rate_limit)