NIFI使用

1 从Kafka接收消息,存储到数据库中。

(1) ConsumerKafka processor

(2)Execute Scripts Processor

我这里是使用JS脚本进行处理。 还有很多其他语言的脚本。

javascript 复制代码
var flowFile = session.get();
if (flowFile != null) {
   var IOUtils = Java.type("org.apache.commons.io.IOUtils");
   var StreamCallback = Java.type("org.apache.nifi.processor.io.StreamCallback");
   var StandardCharsets = Java.type("java.nio.charset.StandardCharsets");
   var DateFormatUtils=Java.type("org.apache.commons.lang3.time.DateFormatUtils");

   // var dataType=flowFile.getAttribute('data_type')
   // var FLAG=flowFile.getAttribute('flag')
   var tm = null;
   try {
      flowFile = session.write(flowFile, new StreamCallback(function (inputStream, outputStream) {
         var inputText = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
         var msg = JSON.parse(inputText);
         var stationId = msg['stationId'];
         var stationName = msg['stationName'];
         var deviceId = msg['deviceId'];
         var deviceName = msg['deviceName'];
         var deviceNo = msg['deviceNo'];
		 var receiveType = msg['receiveType'];
         var createAt = msg['createAt'];
         var createAtString=DateFormatUtils.format(Number(createAt),'yyyy-MM-dd HH:mm:ss');
		 var obTime = msg['obTime'];
		 var obDate = msg['obDate'];
         var obDateString=DateFormatUtils.format(Number(obDate),'yyyy-MM-dd HH:mm:ss');
		 var order = msg['order'];
		 var distance = msg['distance'];
         var channel1SignalStrength = msg['channel1SignalStrength']
		 var powerVoltage = msg['powerVoltage']
		 
		 var sql = 'insert into "SJZT_ODS"."water_data_distance"('
		 + '"station_id", "station_name", "device_id", "device_name", "device_no", "receive_type", "create_at", "ob_time", "ob_date", "order", "distance", "channel1_signal_strength", "power_voltage")'
		 + 'VALUES('
		 + stationId + ', \'' + stationName + '\', ' + deviceId + ', \'' + deviceName + '\', \'' + deviceNo + '\', ' + receiveType + ', \'' + createAtString + '\', \'' + obTime + '\', \'' + obDateString + '\', ' + order + ', ' + distance + ', ' + channel1SignalStrength + ', ' + powerVoltage 
		 + ')';
         outputStream.write(sql.getBytes(StandardCharsets.UTF_8));
      }));

      // flowFile = session.putAttribute(flowFile, "tm",tableName);
      session.transfer(flowFile, REL_SUCCESS);
   } catch (e) {
      flowFile = session.putAttribute(flowFile, "rsvr.transfer.error", e);
      session.transfer(flowFile, REL_FAILURE);
   }
}

注意: 这里只是生成了一个sql字符串,并没有执行sql,因此需要后面的processor来执行sql语句。

(3)PutSql processor

注意:autocommit要设置为true,否则看不到数据库里面的数据的。

2 将一堆Processors移动到一个Group里面界面操作

貌似没有直接的移动操作。

(1) Ctrl + A 全选要移动的processors

(2) 点击左边的group按钮

(3)为新的Group命名

(4)好了。选中的所有的processors都移动到了自己新创建的group中了。

参考材料

1 https://blog.csdn.net/guijianchouxyz/article/details/120340154

相关推荐
腻害兔4 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社5 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
萧瑟余晖6 小时前
JDK 26 新特性详解
java·开发语言
马优晨6 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
维天说9 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
Zane199410 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端
噢,我明白了11 小时前
java中Excel的导入和导出(EasyExcel)
java·开发语言·excel
吠品11 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库
啊湘11 小时前
天气查询API接口 按月Token鉴权 实时天气 物联网可用 文档齐全
java·后端·struts
Java内核笔记11 小时前
告别十亿美元的错误 : Spring Boot 4 空安全 (JSpecify) 实战
java·spring boot·后端