10分钟上手:Spring Boot集成Apache NiFi构建实时数据流处理系统
你是否还在为数据采集、清洗、流转的繁琐流程而困扰?本文将带你通过springboot-learning-example项目,快速实现Spring Boot与Apache NiFi(数据流处理框架)的集成,解决从数据源到业务系统的全链路数据治理难题。读完本文,你将掌握:
- 基于NiFi的可视化数据流设计方法
- Spring Boot与NiFi的REST API交互实现
- 实时数据处理的典型应用场景与代码示例
技术架构概览
Apache NiFi是一个基于Web的数据流处理工具,支持数据路由、转换和系统中介等功能。通过Spring Boot集成NiFi,可构建如下架构的数据流处理系统:
项目核心模块路径:
- Spring Boot基础框架:springboot-helloworld/
- RESTful接口实现:springboot-restful/
- 配置管理:springboot-configuration/
环境准备与依赖配置
1. 安装Apache NiFi
从NiFi官网下载最新版本,解压后执行启动命令:
# Linux/Mac
./bin/nifi.sh start
# Windows
bin\run-nifi.bat
访问NiFi Web控制台:https://localhost:8443/nifi(默认端口)
2. 添加Spring Boot依赖
在项目的pom.xml中添加HTTP客户端和JSON处理依赖:
<!-- 以springboot-restful模块为例 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</dependency>
依赖配置文件路径:springboot-restful/pom.xml
核心实现步骤
步骤1:配置NiFi连接参数
在application.yml中添加NiFi服务配置:
nifi:
base-url: https://localhost:8443/nifi-api
username: admin
password: 88b332a8-5953-4d5a-97c8-8f22d932e779 # 从NiFi的nifi.properties获取
配置文件路径:springboot-properties/src/test/resouorces/application.yml
步骤2:实现NiFi REST API客户端
创建NiFi服务接口类,封装数据流操作:
@Service
public class NiFiClientService {
@Value("${nifi.base-url}")
private String baseUrl;
private final RestTemplate restTemplate;
// 构造函数注入RestTemplate
public NiFiClientService(RestTemplateBuilder restTemplateBuilder) {
this.restTemplate = restTemplateBuilder
.setConnectTimeout(Duration.ofSeconds(10))
.setReadTimeout(Duration.ofSeconds(10))
.build();
}
// 获取NiFi数据流状态
public String getFlowStatus() {
HttpHeaders headers = new HttpHeaders();
headers.setBasicAuth("admin", "88b332a8-5953-4d5a-97c8-8f22d932e779");
ResponseEntity<String> response = restTemplate.exchange(
baseUrl + "/flow/status",
HttpMethod.GET,
new HttpEntity<>(headers),
String.class
);
return response.getBody();
}
// 更多API方法:创建数据流、启动处理器等
}
参考实现路径:springboot-restful/src/main/java/org/spring/springboot/
步骤3:设计NiFi数据处理流程
-
在NiFi控制台拖拽组件创建数据流:
- GetFile:监听本地文件目录
- ConvertRecord:JSON格式转换
- PutHTTP:发送数据到Spring Boot接口
-
配置PutHTTP处理器:
- 目标URL:http://localhost:8080/api/data/ingest
- Content-Type:application/json
业务集成与测试
数据接收接口实现
在Spring Boot应用中创建数据接收端点:
@RestController
@RequestMapping("/api/data")
public class DataIngestController {
private final DataService dataService;
@Autowired
public DataIngestController(DataService dataService) {
this.dataService = dataService;
}
@PostMapping("/ingest")
public ResponseEntity<String> ingestData(@RequestBody DataDTO data) {
dataService.process(data);
return ResponseEntity.ok("Data processed: " + data.getId());
}
}
控制器实现路径参考:springboot-restful/src/main/java/org/spring/springboot/
功能测试
- 启动Spring Boot应用:
cd springboot-restful
mvn spring-boot:run
-
在NiFi中上传测试文件到监听目录,观察数据流向:
- 文件路径:
/tmp/nifi-input/test.json - 数据格式:
{"id": "1", "content": "测试数据流"}
- 文件路径:
-
查看应用日志确认数据接收:
2025-11-02 10:30:45 INFO DataIngestController: Data processed: 1
典型应用场景
1. 日志数据实时处理
通过NiFi监听应用日志目录,实时解析并发送到ELK stack:
- NiFi流程:TailFile → LogAttribute → PutUDP → Logstash
- 参考配置:springboot-logging/(需扩展实现)
2. 数据库变更同步
使用NiFi的QueryDatabaseTable处理器捕获数据变更:
监控与运维
通过Spring Boot Actuator监控数据流处理状态:
- 添加Actuator依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- 暴露健康检查端点:
management:
endpoints:
web:
exposure:
include: health,info,metrics
配置参考:springboot-actuator/(需扩展实现)
总结与扩展
本文基于springboot-learning-example项目,实现了Spring Boot与Apache NiFi的集成方案,关键要点:
- 利用NiFi可视化界面简化数据流配置
- 通过REST API实现与Spring Boot应用的双向通信
- 结合Actuator实现全链路监控
扩展方向:
- 集成Kafka实现高吞吐数据传输:springboot-kafka/(需扩展模块)
- 实现数据处理的分布式部署:springboot-dubbo-server/
建议收藏本文,并关注项目README.md获取最新更新。下一篇将介绍如何使用NiFi的RecordPath语言进行复杂数据转换。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




