EMQX Enterprise 5.4 发布:OpenTelemetry 分布式追踪、OCPP 网关、Confluent 集成支持
EMQX Enterprise 5.4.0 版本已正式发布!
新版本提供 OpenTelemetry 分布式追踪与日志集成功能,新增了开放充电协议 OCPP 协议接入能力,并为数据集成添加了 Confluent 支持。此外,新版本还进行了多项改进以及 BUG 修复,进一步提升了整体性能和稳定性。
OpenTelemetry 分布式追踪与日志集成
在 EMQX v5.2.0 中,EMQX 提供了 OpenTelemetry 指标(Metrics)的集成,本次发布中,EMQX 进一步提供了分布式追踪(Traces)与日志(Logs)的集成,完全实现了 OpenTelemetry 可观测性框架所需的功能。
分布式追踪(Traces)
OpenTelemetry 分布式追踪是一个用于追踪请求在分布式系统中的流动的规范,用于追踪请求在分布式系统中的流动情况,并提供可视化分析请求的性能和行为的能力。在 MQTT 场景下,这一概念可以实现跨越 MQTT 消息传输中的不同参与者(发布者-MQTT 服务器-订阅者)的请求追踪。
EMQX 遵循 W3C 的 Trace Context MQTT 规范实现了端到端的分布式追踪功能:客户端在发布时为消息添加 traceparent
用户属性,Traces 将记录消息在 EMQX 集群节点以及订阅者之间的流转情况。对于不支持设置用户属性的 MQTT v3.1/3.1.1 客户端,也可以配置 EMQX 在内部自动为消息添加追踪 ID 实现分布式追踪。
借助 OpenTelemetry 分布式追踪,EMQX 系统管理员或开发者可以实时监测和分析物联网应用的性能和行为,并在出现故障时快速定位并排除故障。
日志(Logs)
与基于文件的日志一样,OpenTelemetry 日志同样用于记录关键事件、状态信息和错误消息,帮助开发人员和运维团队理解应用程序的行为和故障排查。
不同的是,OpenTelemetry 日志使用了规范化的日志记录格式,使得日志更易于解析、分析和处理。初次之外 OpenTelemetry 日志还支持在记录中添加丰富的上下文信息,如 Trace ID、标签、属性等。
EMQX 支持同时开启 OpenTelemetry 指标、追踪与日志功能。指标用于实时状态监测,追踪数据显示请求的流程和途径,而日志数据可以提供每个流程上更多的细节和上下文信息,三者相互集成可以建立一个统一的视图和分析平台,形成一个完整的观测解决方案。通过统一的平台,用户可以更高效地管理和利用数据以获得全面的应用程序观测能力,从而准确地定位和解决问题,大大提升开发人员和运维团队的工作效率。
开放充电协议 OCPP 协议网关
OCPP (Open Charge Point Protocol) 是一个连接充电桩与中央管理系统的开放通信协议,旨在为电动汽车充电基础设施提供统一的通信规范。
本次发布新增了 OCPP 1.6-J 版本的协议网关,能够为符合 OCPP 规范的各品牌充电桩设备提供开箱即用的海量接入与上下行消息传输能力,并提供了一系列安全、管理与集成的支持,包括:
- 提供 TLS/SSL 加密连接,保障传输层安全
- 提供用户名/密码、JWT 接入认证
- 提供上下行消息权限控制能力
- 提供基于 Dashboard 与 REST API 的客户端管理能力
- 支持与 MQTT 协议异构结合,满足更加灵活和多样化的应用场景需求
- 支持通过规则引擎、数据集成以及 REST API 等方式与第三方管理系统(Central System)集成
借助以上特性,用户可以快速构建安全可靠的电动汽车充电基础设施,快速交付并实现有效充电业务管理和运营。
JT/T 808 与 GB/T 32960 协议网关
本次发布新增了 JT/808 与 GB/T 32960 两种车联网协议网关,能够提供符合标准的车辆数据接入,并通过 EMQX 的集成能力与车辆管理平台侧集成,实现互联互通。
JT/T 808 是交通部颁布的车载终端通信协议,广泛用于车辆远程监控和调度管理。该标准规定了车辆与监控中心之间的通信协议格式和数据传输方式。协议包括车辆定位、报警信息、语音通信、数据传输等功能,可以实现车辆位置追踪、实时监控、报警处理等功能。
GB/T 32960 电动汽车远程服务与管理系统技术规范的国家标准。该标准规定了电动汽车的远程服务与管理系统的技术要求、数据格式和交互方式。协议包括了电动汽车的基本信息、驱动电池信息、车辆位置信息、行驶数据、故障诊断等内容,通过这些信息可以实现电动汽车的远程监控、能源管理和安全管理等功能。
借助两种车联网专属协议以及标准 MQTT 协议支持,EMQX 能够提供多类数据一体的接入和集成能力,帮助车企与车辆平台快速构建车联网应用,提供更高效、智能化的车辆管理和运营服务。
Confluent 集成支持
Confluent 是一个全面的数据流平台,提供全托管的 Confluent Cloud 与自托管的 Confluent Platform 产品,用于处理和管理连续、实时的数据流。
Confluent 包含多项服务,例如 Kafka 服务,Schema Registry 与事件流处理工具,以及跨区域的数据复制能力和其他丰富的扩展功能。EMQX 与 Confluent 生态集成,能够为企业提供灵活的物联网实时数据采集、传输、处理和分析全套解决方案,为企业提供更多的洞察和决策支持。
安全增强
- 通过 Prometheus Pull 模式集成时,支持为用于获取指标的 REST API
GET /api/v5/prometheus/stats
启用身份验证功能。 - 配置文件现在支持将敏感配置存储为文件,并通过在配置文件中使用特殊前缀
file://
来指定文件路径进行加载。 - REST API 现在添加了 RBAC 功能,实现更精细安全管理。通过 Dashboard 或密钥初始化文件创建 API 密钥时,可以指定 API 密钥的角色,现有以下角色可供选择:
- 管理员:可以访问系统中的所有资源。
- 查看者:只能查看资源和数据,对应 REST API 中的所有 GET 请求。
- 发布者:专门用于 MQTT 消息发布,只能访问与发布相关的 API。
性能增强的新路由存储架构
本次发布设计了新的路由存储架构,在内存使用量略有增加的情况下提高订阅和路由性能,尤其是对于共享订阅下使用通配符的场景。在内部基准测试对比中,EMQX 5.4.0 版本相较于 5.3.0 版本,平均订阅速度提升了 30%。
同时由于新存储架构取消了建立单独索引操作,也因此彻底避免了极端情况下集群路由状态不一致的情况出现。
新存储架构默认启用,旧版本集群将在滚动升级后也将自动切换到新架构。如果你不想使用新架构,可以通过配置 broker.routing.storage_schema
指定使用旧架构。
其他新增与变更功能
- REST API 与 Dashboard 添加了备份与恢复功能,用户可以为集群创建多个数据备份,并在需要的时候恢复。
- Dashboard 中添加了审计日志管理页面,用户可以使用该页面查看对 EMQX 设备和数据进行的所有更改操作,例如踢出设备、创建/删除规则等。
- Dashboard 单点登录中的 SAML 协议支持与 Azure Entra ID 进行集成。
- 客户端认证使用 LDAP 作为数据源时支持通过 bind 操作进行验证,适用于已经在 LDAP 服务器上拥有账户数据或缺乏添加或修改数据权限的情况。
- 调整数据桥接设计,将其拆分为连接器与动作(Sink)。连接用于管理数据集成与外部系统的连接,可以在多个动作之间重复使用,动作仅用于配置数据操作方式。这个设计能够提供更大的灵活性和更好的可扩展性,实现更清晰的数据集成配置与管理。
- 节点重平衡操作状态 API
GET /api/v5/load_rebalance/availability_check
取消身份验证,简化了负载均衡器配置。 - 新增重置 License 功能,允许将现有的 License 设置为默认试用 License。
- 调整默认试用 License 规格,由 100 连接调整为 25 连接。
BUG 修复
以下是主要 BUG 修复列表:
- #10976 修复共享订阅中的主题过滤器重复处理问题。 在之前的实现中,订阅选项的存储方法没有充分适配共享订阅,这导致在特定的主题和流程下,”订阅-取消订阅” 期间消息路由失败并且节点之间的路由表出现泄漏问题。
- #12048 修复 COAP 网关忽略订阅选项的错误。
- #12158 修复规则引擎无法连接到 Upstash Redis 的问题。修复前,在与 Redis 服务建立 TCP 连接之后,EMQX 的 Redis 驱动程序使用 inline commands 来发送 AUTH 和 SELECT 命令。但 Upstash Redis 服务不支持 inline commands,导致 EMQX 无法连接到 Upstash Redis 服务。 修复后,EMQX 的 Redis 驱动使用 RESP (Redis Serialization Protocol) 来发送 AUTH 和 SELECT 命令。
更多功能变更和 BUG 修复请查看 EMQX Enterprise 5.4.0 更新日志。
相关文章:

EMQX Enterprise 5.4 发布:OpenTelemetry 分布式追踪、OCPP 网关、Confluent 集成支持
EMQX Enterprise 5.4.0 版本已正式发布! 新版本提供 OpenTelemetry 分布式追踪与日志集成功能,新增了开放充电协议 OCPP 协议接入能力,并为数据集成添加了 Confluent 支持。此外,新版本还进行了多项改进以及 BUG 修复,…...
记录 | C++ cout.setf(ios::fixed)
cout.setf(ios::fixed); 是在 C 中使用的一个标准库函数,用于将流的输出格式设置为"fixed" "fixed"格式指定输出浮点数时,小数点后的位数是固定的。这意味着,无论输出的数字有多少位小数,小数点后都会保留相…...

Eclipse 创建 Hello World 工程
Eclipse 创建 Hello World 工程 1. Hello WorldReferences Download and install the Eclipse IDE. 1. Hello World Eclipse -> double click -> Launch 单击蓝色方框 (右上角) 最大化 IDE File -> New -> C Project -> Finish Project name:工程名…...
【前端工程化面试题】vite热更新原理
vite 在开发阶段,运行 vite 命令,会启动一个开发服务器,vite 在开发阶段是一个服务器 依赖 esm: vite 在开发阶段使用 esm 作为开发时的模块系统。esm 具有动态导入的能力,这使得在代码中引入模块时可以动态地加载新的…...
【leetcode】判断二叉树是否完全二叉树
递归方式判断二叉树是否完全二叉树 bool TreeComplete(TreeNode* root) {if (root ! NULL) {if (root->left NULL && root->right ! NULL) {return false; // 左子树空}else if (root->left NULL && root->right NULL) {return true; // 左右子…...
Java多线程系列——内存模型JMM
目录 核心思想 关键概念 1. 可见性 2. 原子性 3. 有序性 工作原理 并发工具类 对并发编程的影响 同步策略 JMM的实践意义 结语 Java内存模型(Java Memory Model, JMM)是Java并发编程中的核心概念,其定义了Java虚拟机(JV…...

深入理解 Vue3 中的 setup 函数
💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…...

【QT+QGIS跨平台编译】之三十六:【RasterLite2+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
文章目录 一、RasterLite2介绍二、文件下载三、文件分析四、pro文件五、编译实践一、RasterLite2介绍 RasterLite2是一个开源的轻量级栅格数据库,可以用于存储和管理各种类型的栅格数据,包括卫星遥感图像、数字高程模型等。 与传统的GIS数据存储方式不同,RasterLite2采用基…...
java面试题:分布式和微服务的区别
1 分布式和微服务概念不同 微服务架构是架构设计方式,是设计层面的东西,一般考虑如何将系统从逻辑上进行拆分,也就是垂直拆分。 分布式系统是部署层面的东西,即强调物理层面的组成,即系统的各子系统部署在不同计算机…...
GO语言的变量与常量
1.变量 go是一个静态语言 变量必须先定义后使用变量必须要有类型 定义变量的方式: var 名称 类型 var 名称 值 名称 :值 例如: var num int 这样就存了一个num类型为int的变量 var num 1 上面使用简化的定义通过num自动判断后面的类型为int并…...

java面试多线程篇
文章说明 在文章中对所有的面试题都进行了难易程度和出现频率的等级说明 星数越多代表权重越大,最多五颗星(☆☆☆☆☆) 最少一颗星(☆) 1.线程的基础知识 1.1 线程和进程的区别? 难易程度:☆☆…...

Anaconda + VS Code 的安装与使用
目录 一. Anaconda 是什么二. Anaconda 的安装1. 下载安装包2. 安装3. 检查 三. Anaconda 的使用1. 创建虚拟环境2. 激活虚拟环境3. 包管理4. 列举虚拟环境5. 退出虚拟环境6. 删除虚拟环境 四. VS Code 开发1. 安装插件2. 打开工作区3. 选择解释器 五. VS Code 个性化设置1. 切…...
Python爬虫html网址实战笔记
仅供学习参考 一、获取文本和链接 import requests from lxml import htmlbase_url "https://abcdef自己的网址要改" response requests.get(base_url) response.encoding utf-8 # 指定正确的编码方式tree html.fromstring(response.content, parserhtml.HTML…...

C++ 调用js 脚本
需求: 使用Qt/C 调用js 脚本。Qt 调用lua 脚本性能应该是最快的,但是需要引入第三方库,虽然也不是特别麻烦,但是调用js脚本,确实内置的功能(C 调用lua 脚本-CSDN博客) 步骤: 1&…...

Vscode python pyside6 制作视频播放器
一、界面如下 包含控件 qcombox、qtablewidget、qpushbotton、qverticalslider 二、运行代码 media_player.py import sysfrom PySide6 import QtWidgets from PySide6.QtWidgets import * from PySide6.QtMultimedia import * from PySide6.QtMultimediaWidgets import QVi…...

纯前端低代码平台demo,vue框架,nodejs,简单的pm2纯前端部署实践
文章目录 目录结构说明本地运行项目启动后的页面demo前端部署打包pm2nginx 后话 前段时间开发了一个纯前端的低代码平台demo,vue框架,nodejs,pm2纯前端部署实践。为此记录一下开发过程以及各方面遇到的问题,并作说明。 表单用了若…...

致创新者:聚焦目标,而非问题
传统的企业创新管理方式常常导致组织内部策略不协调、流程低效、创新失败率高等问题。而创新运营作为企业管理创新的新模式,通过整合文化、实践、人员和工具,提高组织创新能力。已经采用创新运营的公司报告了一系列积极的结果,如市场推出速度…...
javaSE和javaEE区别
javaSE Java SE(Java Platform,Standard Edition) Java SE 以前称为 J2SE。 它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。 Java SE 包含了支持 Java Web服务开发的类,并为 Java Platform&#…...

安装VMware+安装Linux
以上就是VMware在安装时的每一步操作,基本上就是点击 "下一步" 一直进行安装 安装Linux VMware虚拟机安装完毕之后,我们就可以打开VMware,并在上面来安装Linux操作系统。具体步骤如下: 1). 选择创建新的虚拟机 2). 选…...

session和cookie理解
目录 1、理解无状态 2、Session和Cookie理论 3、使用session存储数据 前言,理解session与cookie对于我们做web测试、接口测试、性能测试都是非常有帮助的。 cookie是一些数据信息,存储在浏览器端。 session是存储于服务器端的特殊对象,服务器…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...