增强
优化 License 检查的性能。
此优化通过减少节点间的 RPC 调用,降低了客户端建立连接时 EMQX 根据 License 对连接总数进行检查的性能开销。
优化大量客户端重连时的连接管理,避免因 License 连接数限制导致客户端被拒绝连接的问题。
优化后,即使当前连接数已经超过 License 的限制,EMQX 仍然会允许已经连接成功的 ClientID 重连。
改进 Wolff 以支持 Kafka 服务端以更小的分区数目重建主题。
此前,Wolff (EMQX 的 Kafka 驱动) 仅支持 Kafka 服务端增加主题的分区数目(扩容),而不支持减少分区数(缩容)。 由于 Kafka 本身不支持直接减少分区数,用户通常需要创建新主题并迁移数据,或者直接删除旧主题并创建新的同名主题(如果不关心数据丢失)。在此改进前,Wolff 无法应对这种情况,可能导致部分生产者无法恢复连接。
统一监听器的
acceptors
和max_connections
配置项的默认值。改进后,各类监听器的
acceptors
配置项的默认值统一为16
,max_connections
配置项的默认值统一为1024000
。日志追踪模块支持更多配置选项。
现在日志追踪模块支持三个新增的选项:
行最大长度
,文件最大长度
,客户端进程最大堆内存
。行最大长度
和文件最大长度
分别用于控制日志文件中单行的最大字符数目和日志文件的最大长度,默认值分别为2048
和1GB
; 而客户端进程最大堆内存
默认值为512MB
,一定程度上可以避免开启日志追踪功能后,客户端连接进程因为默认的内存限制(此限制在 64 位系统上默认为 64MB)过小而被杀死的情况。当客户端进程被杀死时,打印 Warning 日志。
此前,当客户端进程因为因为内存限制被杀死时,只有如下 Erlang/OTP 打印的日志,但无法知道具体是哪个客户端出了问题:
[error] Process: <0.3540.0> on node 'emqx@127.0.0.1', Context: maximum heap size reached, Max Heap Size: 167772160, Total Heap Size: 200934817, Kill: true, ...
现在,EMQX 会在此日志的基础上,增加一条 Warning 日志,以便用户调查问题:
[warning] [CM] Clean down, clientid: abcd_bench_pub_1, pid: <0.3540.0>, reason: killed
修复
修复容器部署的 EMQX 无法通过热配置功能更新
acceptors
和max_connections
配置项的问题。修复 Redis Cluster 模式下,Redis 服务端进行主从切换后,EMQX 可能无法恢复 Redis 连接的问题。
此前,若主从切换后,EMQX 因为网络等问题无法连接到新的 Redis 主节点,
eredis_cluster
(EMQX 的 Redis Cluster 驱动)的状态将出现异常,导致无法正常重连到 Redis。修复从 Dashboard 下载日志追踪文件偶尔会无响应的问题。
修复了 Pulsar 驱动中的一个报文解析问题。