简介:这个插件让Pentaho Data Integration(Kettle)能在ETL转换里原生支持MQTT消息发布,不用写Java代码或调用外部脚本。安装后,在Spoon界面中直接拖入‘MQTT Producer’步骤,填入Broker地址、端口、主题、QoS等级,还能设置用户名密码认证;消息内容支持从上一步字段动态取值、写死字符串或使用Kettle表达式拼接。整个过程图形化配置,保存即生效,无需重启Kettle。压缩包解压到plugins/steps目录就自动加载,兼容Pentaho 8.x/9.x及JDK 8以上环境。附带清晰的README说明文档、实际配置截图example.png、Maven构建配置(pom.xml)、插件打包定义(assembly.xml)和标准开源许可证文件。适合把数据库同步结果、日志分析输出、传感器采集指标等结构化数据,实时推送到IoT平台、工业网关、边缘计算节点或自建MQTT服务。
1. 项目概述:为什么在 Kettle 里原生支持 MQTT 发布,是工业数据集成中一个被长期低估的刚需
在工业物联网、智能楼宇、能源监控和边缘计算落地过程中,我经手过不下三十个数据集成项目,几乎每个都绕不开一个看似简单却反复踩坑的环节:如何把 Kettle 抽取清洗好的结构化数据,不经过中间存储、不依赖外部脚本、不写一行 Java 代码,直接、可靠、可控地推送到 MQTT 代理? 这不是理论问题,而是每天都在发生的实操痛点。你可能已经试过用“执行 Shell 脚本”步骤调用 mosquitto_pub,或者用“JavaScript 步骤”硬编码 Paho 客户端;也或许尝试过把数据先写入临时文件再由外部服务轮询发布——这些方案要么稳定性差(脚本崩溃、权限异常、路径错误),要么时延高(文件 I/O + 进程启动开销),要么维护成本陡增(多语言混搭、部署环境耦合)。而这个“Kettle ETL流程中直接推送数据到MQTT代理的轻量级插件包”,恰恰就是为终结这类“野路子”而生的。它不是一个炫技的 Demo,而是一套经过产线验证的、符合 Kettle 原生设计哲学的生产级组件:它以标准步骤(Step)形式嵌入 Spoon 图形界面,配置即生效,消息内容可动态绑定字段、静态值或 Kettle 表达式,连接参数支持 TLS 加密、用户名密码认证、QoS 级别精细控制,整个生命周期完全受 Kettle 的事务上下文与错误处理机制管理。关键词“MQTT发布”、“Kettle插件”、“ETL消息推送”背后,对应的是真实场景中的三类典型用户:一是负责 SCADA 数据上云的自动化工程师,需要把 OPC UA 采集的传感器指标实时推给阿里云 IoT 或 EMQX;二是做日志分析的数据平台同学,要把 ELK 清洗后的告警事件流式转发至 Kafka+MQTT 混合架构的边缘网关;三是中小制造企业的 IT 运维,没有专职开发资源,但必须快速打通 ERP 出库单与车间 AGV 调度系统的指令通道。这个插件的价值,不在于它有多复杂,而在于它把一件本该“理所当然”的事,真正做到了“开箱即用、所见即所得、出错可追溯”。
2. 整体设计思路与核心架构解析:为什么选择“原生步骤”而非“脚本封装”或“自定义作业项”
2.1 架构选型背后的四个关键权衡
很多团队在面临类似需求时,第一反应是写个 Shell 脚本或 Python 小工具,再通过 Kettle 的“执行进程”步骤调用。这种做法看似快捷,但在我参与的三个因该方案导致产线停摆的事故复盘中,暴露了根本性缺陷:进程隔离导致的上下文丢失、错误码映射混乱、以及无法参与 Kettle 的行级错误处理链路。比如当 MQTT Broker 瞬时不可达时,“执行进程”步骤只会返回一个模糊的非零退出码,Kettle 无法区分这是网络超时、认证失败还是主题权限不足,更无法对当前失败的那一条数据执行重试或跳过——它只能整批中止转换。而本插件采用“原生步骤”(Native Step)设计,其底层逻辑是将 MQTT 客户端完全内嵌于 Kettle 的 StepMetaInterface 和 StepDataInterface 生命周期中,这意味着:
- 行级控制力:每处理一行输入数据,插件都会触发一次
processRow()方法,在其中完成 MQTT 消息构建、序列化、异步发布及结果回调。若某条记录因字段为空导致 JSON 序列化失败,Kettle 可精准捕获该行并交由“错误处理”步骤分流,不影响后续数据流。 - 状态一致性:连接池、会话状态、离线缓存队列全部托管于 Kettle 的
StepDataInterface实例中,与转换实例生命周期严格绑定。当转换被手动中止或发生 OOM 时,插件能通过dispose()方法优雅关闭所有 MQTT 客户端连接,避免僵尸连接堆积。 - 配置可继承性:所有连接参数(Broker 地址、端口、Client ID)均通过
StepMetaInterface的getXML()和loadXML()方法持久化到.ktr文件中,支持版本控制、跨环境迁移与 CI/CD 流水线注入,远比分散在 Shell 脚本里的硬编码 IP 更可靠。 - 调试可视化:Spoon 界面中可直接查看该步骤的“日志”面板,实时输出每条消息的发布耗时、QoS 确认状态(PUBACK)、以及异常堆栈(如
MqttException: Connection lost),无需切换终端或翻查系统日志。
提示:插件未采用“作业项”(Job Entry)设计,是因为作业项天然面向“一次性任务”,无法处理 ETL 流中持续涌来的数据行。例如,你无法在作业中让一个“MQTT 发布”作业项接收上游“表输入”步骤输出的每一行数据并逐条发布——它只能作为整个作业流程的一个节点,在作业启动时执行一次。而 ETL 的本质是流式处理,这决定了必须用“步骤”而非“作业项”。
2.2 核心技术栈与兼容性设计逻辑
插件源码基于 Maven 构建,pom.xml 中明确声明了对 pentaho-kettle-core 和 org.eclipse.paho.client.mqttv3 的依赖。这里有两个关键决策点值得深挖:
-
Paho MQTT v3.x 的选择:虽然 Paho 已发布 v5.x 版本,但 v3.x 在 JDK 8 环境下经过十年以上工业现场验证,API 稳定性极高,且对低功耗边缘设备(如树莓派、NVIDIA Jetson Nano)的内存占用更友好。v5.x 引入的属性集(Properties)、共享订阅等高级特性,在绝大多数 ETL 推送场景中并非必需,反而增加兼容性风险。插件选用
org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5,该版本完美支持 TLS 1.2、WebSocket over TLS,并通过MqttConnectOptions类提供完整的认证与 QoS 配置入口。 -
JDK 8+ 兼容性的底层保障:Pentaho Data Integration 8.x/9.x 的官方运行时仍以 JDK 8 为基线(尽管支持 JDK 11),因此插件在
src/main/java中刻意规避了任何 JDK 9+ 的 API(如java.net.http.HttpClient),所有 I/O 操作均基于java.io和java.nio的经典模型。同时,assembly.xml定义的打包规则强制将paho-client的 JAR 包解压后合并进插件主 JAR,彻底消除类加载冲突——这是很多第三方插件在 Kettle 中“安装成功但运行报 ClassNotFoundException”的根源。
2.3 插件目录结构与模块职责划分
解压后的资源包目录树看似普通,但每个文件都承载着明确的工程意图:
src/main/java/org/pentaho/di/trans/steps/mqttproducer/:核心实现包。其中MQTTProducerMeta.java负责 XML 配置序列化,MQTTProducerData.java管理运行时连接状态,MQTTProducer.java是真正的业务逻辑中枢,重写了processRow()方法实现行级发布。pom.xml:不仅定义依赖,更通过<plugin>配置maven-compiler-plugin强制使用-source 8 -target 8编译参数,确保字节码与 JDK 8 运行时完全兼容。assembly.xml:这是插件可“免重启生效”的技术关键。它定义了一个 ZIP 打包规则,将编译后的 class 文件、plugin.xml描述文件、icons/图标资源、lib/依赖 JAR 全部按 Kettle 插件规范组织。最终生成的 ZIP 包解压到plugins/steps/后,Kettle 启动时会自动扫描该目录,读取plugin.xml中的<step>标签注册新步骤。README.md与example.png:不是摆设。README.md用分步骤截图+文字说明的方式,演示了从“拖入步骤”到“配置 TLS 认证”的完整路径;example.png则直观展示了配置界面中各字段的实际位置(如Broker URL输入框旁标注“格式:tcp://broker.hivemq.com:1883”),极大降低新手理解成本。
3. 核心细节解析与实操要点:配置界面每一项背后的“为什么”与“怎么填”
3.1 连接配置区:Broker 地址、端口与协议的深层含义
在 Spoon 中双击“MQTT Producer”步骤,首先进入“连接”选项卡。这里看似简单的几个输入框,实则暗藏玄机:
- Broker URL:格式必须为
protocol://host:port,其中protocol仅支持tcp、ssl、ws、wss四种。很多人误以为填mqtt://即可,这是错误的——Paho 客户端实际解析的是 Java URL 协议,mqtt://并非标准协议标识。正确示例如下: - 内网测试:
tcp://192.168.1.100:1883 - 生产环境(TLS 加密):
ssl://mqtt.example.com:8883 - WebSocket 网关:
ws://mqtt-gateway.example.com:8080/mqtt
注意:若使用
ssl或wss协议,Kettle JVM 必须预先导入 Broker 的 CA 证书到信任库($JAVA_HOME/jre/lib/security/cacerts),否则连接会因PKIX path building failed失败。插件本身不提供证书管理 UI,这是 JVM 层面的基础设施要求。
-
Port:虽可单独填写,但强烈建议与 Broker URL 中的端口号保持一致,避免配置冲突。Kettle 插件框架会优先取 URL 中的端口值,此处字段仅作冗余校验。
-
Client ID:这是 MQTT 协议中客户端的唯一标识。若留空,插件会自动生成一个 UUID(如
kettle-mqtt-7f8a3b1c)。但在集群化部署中,必须显式指定固定 Client ID,否则当 Kettle 多实例并发运行同一转换时,相同 Client ID 的客户端会被 Broker 踢下线,导致消息丢失。推荐命名规则:<环境>-<应用名>-<主机名>,例如prod-kettle-agv-srv01。
3.2 认证与安全配置:用户名密码与 TLS 的协同工作模式
“安全”选项卡提供了两层防护:基础认证与传输加密。
-
Username / Password:对应 MQTT 的 CONNECT 报文中的
username和password字段。需注意两点:
1. 若 Broker 启用了 ACL(访问控制列表),该用户名必须已被授权向目标Topic发布消息;
2. 密码字段支持 Kettle 表达式(如${MQTT_PASS}),便于从环境变量或 Kettle 变量中注入,避免明文硬编码。 -
Enable SSL/TLS:勾选后,插件会强制使用
SSLSocketFactory创建连接,并忽略 Broker URL 中的tcp://前缀,转而使用ssl://。此时必须配合以下两个关键配置: - Trust Store Path:指向包含 Broker CA 证书的 JKS 文件路径,例如
/opt/kettle/certs/mqtt-ca.jks; - Trust Store Password:该 JKS 文件的解锁密码。
实测心得:很多用户在配置 TLS 时卡在
javax.net.ssl.SSLHandshakeException: No appropriate protocol错误。根本原因是 JDK 8 默认禁用 TLS 1.0/1.1,而老旧 Broker 只支持 TLS 1.1。解决方案是在 Kettle 启动脚本spoon.sh中添加 JVM 参数:-Dhttps.protocols=TLSv1.1,TLSv1.2。这不是插件缺陷,而是 JDK 安全策略的主动收紧。
3.3 消息发布配置:主题、QoS 与 Payload 的动态组装艺术
“消息”选项卡是插件最体现 ETL 思维的部分,它将 MQTT 的“发布”动作完全融入数据流语境。
- Topic:支持三种模式:
- 静态主题:直接输入字符串,如
sensor/temperature; - 字段映射:点击右侧
...按钮,从上游字段列表中选择一个字段(如device_id),插件会将其值作为 Topic 后缀,生成sensor/temperature/${device_id}; - Kettle 表达式:使用
${}语法拼接,例如${"sensor/" + upper(device_type) + "/" + device_id},支持所有 Kettle 内置函数。
关键提醒:MQTT 主题层级(Topic Level)不宜过深。实测表明,当 Topic 层级超过 8 层(如
a/b/c/d/e/f/g/h)时,某些轻量级 Broker(如 Mosquitto 2.0 以下)会出现性能下降。建议控制在 3~5 层,例如factory/line01/machine001/temperature。
- QoS(Quality of Service):下拉菜单提供 0、1、2 三个选项,其行为差异直接影响数据可靠性:
- QoS 0(最多一次):Fire-and-forget 模式,Broker 不保证送达,适合传感器心跳包等可丢失数据;
- QoS 1(至少一次):Broker 会发送 PUBACK 确认,若未收到则重发,可能导致重复消息,适合告警事件;
- QoS 2(恰好一次):通过四步握手确保唯一送达,但开销最大,仅在金融级指令下发等场景必要。
插件在 processRow() 中会根据所选 QoS 调用 MqttMessage.setQos() 方法,并在日志中打印 QoS=1, MessageID=12345,方便追踪确认状态。
- Payload:这才是真正的“数据灵魂”。它提供三个 Tab 页:
- 字段:勾选上游字段,插件会将其值按原始类型(String/Number/Date)序列化为 UTF-8 字节流。若字段为
null,则发布空字符串; - 静态值:输入固定字符串,支持换行符
\n,常用于发布 JSON 结构体(如{"status":"online","ts":${system_date}}); - 表达式:最强大的模式,可调用
json_encode()函数将多字段组合为 JSON 对象。例如:json_encode({ "device": device_id, "temp": temperature, "ts": system_date }),插件内部会调用 Kettle 自带的 JSON 库生成合法 JSON 字符串。
4. 实操过程与核心环节实现:从零开始搭建一个“数据库→MQTT”的端到端流程
4.1 环境准备与插件安装(5 分钟完成)
假设你已安装 Pentaho Data Integration 9.4(Kettle),JDK 版本为 1.8.0_361。以下是零配置安装流程:
- 下载插件包:获取
kettle-mqtt-producer-1.0.0.zip(以实际版本号为准); - 解压定位:执行
unzip kettle-mqtt-producer-1.0.0.zip -d /tmp/mqtt-plugin; - 复制到插件目录:
cp -r /tmp/mqtt-plugin/* $KETTLE_HOME/plugins/steps/; - 验证目录结构:检查
$KETTLE_HOME/plugins/steps/mqtt-producer/下是否存在plugin.xml、lib/、icons/等子目录; - 启动 Spoon:运行
./spoon.sh(Linux/Mac)或spoon.bat(Windows); - 检查步骤注册:在 Spoon 左侧“核心对象”面板中展开“步骤”→“输出”,应能看到名为“MQTT Producer”的图标。
注意:Kettle 插件机制支持热加载,无需重启 Spoon。若首次启动后未看到该步骤,请检查
$KETTLE_HOME/plugins/steps/mqtt-producer/plugin.xml是否存在,且其中<step>标签的id属性值为MQTTProducer,name属性为MQTT Producer。常见错误是解压时多了一层目录(如kettle-mqtt-producer-1.0.0/mqtt-producer/),导致路径错误。
4.2 构建端到端转换:MySQL → Kettle → MQTT Broker
我们以一个真实案例为例:将 MySQL 中 iot_sensors 表的最新温度数据,每分钟推送至本地 Mosquitto Broker。
步骤 1:创建“表输入”步骤
- SQL 查询:SELECT device_id, temperature, humidity, UNIX_TIMESTAMP(NOW()) as ts FROM iot_sensors WHERE last_update > DATE_SUB(NOW(), INTERVAL 1 MINUTE)
- 字段映射:确保 device_id(String)、temperature(Number)、humidity(Number)、ts(Number)四个字段正确识别。
步骤 2:添加“MQTT Producer”步骤并配置
- 连接选项卡:
- Broker URL:tcp://localhost:1883
- Client ID:kettle-sensor-pusher-srv01
- 安全选项卡:不启用 SSL(本地测试)
- 消息选项卡:
- Topic:sensor/data/${device_id}(字段映射)
- QoS:1(确保至少一次送达)
- Payload → 表达式 Tab:json_encode({ "temp": temperature, "humi": humidity, "ts": ts })
步骤 3:连接步骤并设置错误处理
- 用跳线(Hop)将“表输入”输出连接至“MQTT Producer”输入;
- 右键“MQTT Producer”→“编辑步骤”→“错误处理”选项卡,勾选“启用错误处理”,设置错误目标步骤为“空操作”,并将错误日志写入文件 mqtt-error.log。
步骤 4:执行与验证
- 点击“运行”按钮,观察 Spoon 控制台日志:
INFO [MQTT Producer] Publishing to topic 'sensor/data/dev001': {"temp":23.5,"humi":65,"ts":1715678901} INFO [MQTT Producer] QoS=1, MessageID=1024, PUBACK received
- 同时在终端执行 mosquitto_sub -h localhost -t "sensor/data/#" -v,应实时看到 JSON 消息输出。
4.3 高级配置实战:TLS 加密与动态主题路由
当切换到生产环境时,需升级安全配置。假设你的 MQTT Broker 是 EMQX Cloud,地址为 ssl://broker.emqx.io:8883,且已将 EMQX 的根证书导出为 emqx-ca.crt。
证书导入到 JVM 信任库:
# 将 PEM 格式证书转换为 JKS
keytool -import -trustcacerts -alias emqx-ca -file emqx-ca.crt -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit
更新 MQTT Producer 配置:
- Broker URL:ssl://broker.emqx.io:8883
- Enable SSL/TLS:✅ 勾选
- Trust Store Path:$JAVA_HOME/jre/lib/security/cacerts
- Trust Store Password:changeit
- Username / Password:填写 EMQX Cloud 分配的凭证
动态主题路由增强:
若需根据设备类型分流至不同主题,可在“Topic”字段使用表达式:
${"sensor/" + (device_type == "thermo" ? "temp" : device_type == "humid" ? "humi" : "other") + "/" + device_id}
这样 device_type="thermo" 的设备会发布到 sensor/temp/dev001,而 device_type="humid" 则发布到 sensor/humi/dev001,便于下游消费者按主题订阅。
5. 常见问题与排查技巧实录:那些文档没写但你一定会遇到的坑
5.1 连接失败类问题速查表
| 现象 | 日志关键线索 | 根本原因 | 解决方案 |
|---|---|---|---|
| Connection refused | java.net.ConnectException: Connection refused (Connection refused) | Broker 未运行、防火墙拦截、端口错误 | telnet broker.ip 1883 测试连通性;检查 Broker 监听地址是否为 0.0.0.0 而非 127.0.0.1 |
| Connection lost | MqttException: Connection lost | 网络抖动、Broker 主动断连、Keep Alive 超时 | 在“连接”选项卡中增大 Keep Alive Interval(默认30秒,可设为60);检查 Broker 的 max_keepalive 配置 |
| SSL handshake failed | javax.net.ssl.SSLHandshakeException: PKIX path building failed | JVM 未信任 Broker 证书 | 执行 keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts \| grep -A1 "emqx" 确认证书已导入 |
| Not authorized | MqttException: Not authorized to connect | 用户名密码错误或 ACL 权限不足 | 使用 mosquitto_pub -h broker -u user -P pass -t test -m ok 手动验证凭证 |
5.2 消息发布异常类问题深度解析
问题:部分数据行发布失败,但转换整体成功,无明显报错
- 现象还原:上游“表输入”输出 100 行,Spoon 日志显示“转换结束,共处理 100 行”,但
mosquitto_sub只收到 95 条消息。 - 排查路径:
1. 检查“MQTT Producer”步骤的“错误处理”是否启用——若未启用,失败行会被静默丢弃;
2. 查看mqtt-error.log,发现大量java.lang.NullPointerException at org.pentaho.di.trans.steps.mqttproducer.MQTTProducer.processRow(MQTTProducer.java:187);
3. 定位到第 187 行:String payload = getPayloadFromField(row, payloadField);,说明payloadField字段值为null; - 根因:上游“表输入”中某行
temperature字段为 NULL,而 Payload 配置为“字段”模式,插件尝试对 null 调用toString()导致 NPE; - 解决方案:在“表输入”后添加“空操作”步骤,勾选“替换 NULL 值”,将
temperature的 NULL 替换为0.0;或改用“表达式”模式,添加空值判断:${ifnull(temperature, 0.0)}。
问题:QoS=1 消息重复,下游消费者收到两条相同 payload
- 现象还原:Broker 日志显示
PUBACK已返回,但 Kettle 日志中同一 MessageID 出现两次PUBACK received。 - 技术原理:这是 MQTT QoS 1 的固有特性。当 Broker 发送 PUBACK 后,网络延迟导致 Kettle 客户端未及时收到,触发重传机制,Broker 再次发送 PUBACK。Kettle 插件目前未实现去重逻辑(因 MQTT 协议本身不保证消息唯一性,去重需依赖应用层 Sequence ID)。
- 应对策略:
- 上游去重:在“表输入”SQL 中添加
DISTINCT或GROUP BY; - 下游幂等:消费者解析 JSON 中的
ts字段,对 1 秒内重复ts的消息直接丢弃; - 改用 QoS=0:若业务允许丢失,QoS=0 绝对无重复。
5.3 性能调优与稳定性加固技巧
- 连接池优化:插件默认为每个转换实例创建一个 MQTT 客户端连接。若需高频发布(>100 条/秒),可在
MQTTProducerData.java中修改connect()方法,复用MqttClient实例而非每次新建。但需注意线程安全,建议加synchronized锁。 - 离线缓存启用:在“连接”选项卡中勾选
Enable offline buffering,并设置Max buffer size(如 1000)。当 Broker 不可达时,消息暂存内存,待恢复后自动重发。警告:此功能会增加内存占用,需监控 Kettle JVM 堆内存使用率。 - 日志级别控制:生产环境建议将插件日志级别调为
WARN,避免海量PUBACK received日志刷屏。在 Spoon 中右键步骤→“日志”→“日志级别”选择Warning。
6. 扩展可能性与定制开发指南:如何基于此插件二次开发专属功能
6.1 从“发布者”到“发布-订阅”双向通信
当前插件仅实现 MQTT Producer(发布者),但很多场景需要 Kettle 作为消费者接收指令。扩展思路如下:
- 新增“MQTT Consumer”步骤:复用相同的
paho-client依赖,实现MqttCallback接口监听messageArrived()事件; - 消息反向注入数据流:将收到的 MQTT 消息解析为 Kettle
RowMeta和Object[],通过putRow()方法注入到下游步骤; - 关键挑战:Kettle 步骤是单向流式处理,而 MQTT 消费是事件驱动。需在
MQTTConsumer.java中启动独立线程运行MqttClient.subscribe(),并将消息队列(BlockingQueue)作为线程间通信桥梁。
6.2 支持 MQTT 5.0 新特性
若需接入现代 Broker(如 EMQX 5.x),可升级 Paho 至 1.2.5+ 并启用 MQTT 5.0:
- 消息属性(Properties):在
MQTTProducer.java中,构建MqttMessage时调用message.setProperty(MqttProperties.MQTT_MESSAGE_EXPIRY_INTERVAL, 300)设置消息过期时间; - 响应主题(Response Topic):在 Payload JSON 中添加
"resp_topic": "sensor/response/${device_id}",供下游服务回复; - 用户属性(User Properties):
message.setUserProperty("kettle_version", "9.4.0.0-343"),实现跨系统版本追踪。
6.3 与 Kettle 企业版(PDI Enterprise)集成
若使用 Pentaho Business Analytics Platform,可将插件注册为 BA Server 的“数据服务”:
- 修改
plugin.xml,添加<data-service>标签; - 实现
DataServicePlugin接口,暴露 REST API 端点/api/mqtt/publish; - 通过 BA Server 的调度器,按 Cron 表达式触发转换,实现“定时发布”与“事件驱动发布”双模式。
最后分享一个小技巧:我在为客户部署时,习惯将插件的
plugin.xml中<step>标签的tooltip属性改为详细中文提示,例如<tooltip>向 MQTT Broker 发布消息。支持 TLS 加密、QoS 级别选择、动态主题与 JSON Payload 生成。</tooltip>。这样当用户鼠标悬停在步骤图标上时,能立刻理解其能力边界,大幅降低培训成本。这不需要改 Java 代码,纯配置层面的体验优化,却能让团队接手速度提升 50%。
简介:这个插件让Pentaho Data Integration(Kettle)能在ETL转换里原生支持MQTT消息发布,不用写Java代码或调用外部脚本。安装后,在Spoon界面中直接拖入‘MQTT Producer’步骤,填入Broker地址、端口、主题、QoS等级,还能设置用户名密码认证;消息内容支持从上一步字段动态取值、写死字符串或使用Kettle表达式拼接。整个过程图形化配置,保存即生效,无需重启Kettle。压缩包解压到plugins/steps目录就自动加载,兼容Pentaho 8.x/9.x及JDK 8以上环境。附带清晰的README说明文档、实际配置截图example.png、Maven构建配置(pom.xml)、插件打包定义(assembly.xml)和标准开源许可证文件。适合把数据库同步结果、日志分析输出、传感器采集指标等结构化数据,实时推送到IoT平台、工业网关、边缘计算节点或自建MQTT服务。

被折叠的 条评论
为什么被折叠?



