问题

众所周知,在实际生产环境中,数据的安全性是非常重要的一个问题,nifi本身采用的是无副本机制,如果有节点宕机、磁盘损坏等现象出现,nifi基于自身的故障恢复机制,能否做到保障数据的安全性(不丢失)?

分析

实际生产中故障的发生有很多种情况,这里从不同的方面进行分析。

  1. 处理器处理出错:nifi每个处理器都定义了各种relationship,flowfile如果没有在处理器内被移除的话,就一定会被输出到某个relationship,所以当flowfile处理出错时,会自动转移到某个relationship的queue中,不会消失。Nifi系统层面定义了penalty/yield机制,会自动进行重试。因此如果处理器处理出错,可以保证数据安全。
  2. Nifi服务挂掉:nifi采用copy-on-write机制,将nifi流程中所有数据的数据内容、状态和属性分别写入content repository、provenance repository和flowfile repository库中,保证数据的安全性,当nifi服务挂掉再重启时,nifi会自动读取数据上一次稳定的一致状态的内容和属性信息,继续往下处理。因此nifi服务挂掉时,可以保证数据安全。
  3. 磁盘损坏:当nifi存储信息的磁盘损坏时,nifi无法向磁盘中写数据,则不会继续消费数据,但磁盘中存储的数据也会丢失,此时nifi流程中的数据会丢失。

结论

Nifi的无副本机制使nifi在发生磁盘损坏时会丢失数据,因此实际生产环境中使用nifi时应采用必要手段进行处理,如使用raid5存储方案,或实时对nifi的repository进行备份等。