NiFi Bootstrap 如何确定 NiFi 是不是未运行?

Posted

技术标签:

【中文标题】NiFi Bootstrap 如何确定 NiFi 是不是未运行?【英文标题】:How does NiFi Bootstrap determine if NiFi is not running?NiFi Bootstrap 如何确定 NiFi 是否未运行? 【发布时间】:2021-06-17 19:13:13 【问题描述】:

我看到 NiFi 偶尔会重新启动。在 nifi-app.log 中没有错误指示。 NiFi 没有处理任何数据,此时服务器也不忙。当我在 nifi-bootstrap.log 中看到时,我看到了

2021-06-17 16:44:00,551 DEBUG  [main] org.apache.nifi.bootstrap.RunNiFi Status File: /opt/nifi-1.10.0/run/nifi.status
2021-06-17 16:44:00,551 DEBUG  [main] org.apache.nifi.bootstrap.RunNiFi Status File: /opt/nifi-1.10.0/run/nifi.lock
2021-06-17 16:44:00,551 WARN  [main] org.apache.nifi.bootstrap.RunNiFi Apache NiFi appears to have died. Restarting...
2021-06-17 16:44:00,552 DEBUG  [main] org.apache.nifi.bootstrap.RunNiFi Status File: /opt/nifi-1.10.0/run/nifi.pid
2021-06-17 16:44:00,555 DEBUG  [main] org.apache.nifi.bootstrap.RunNiFi Saved Pid 17260 to /opt/nifi-1.10.0/run/nifi.pid
2021-06-17 16:44:00,555 DEBUG  [main] org.apache.nifi.bootstrap.RunNiFi Status File: /opt/nifi-1.10.0/run/nifi.status
2021-06-17 16:44:00,557 DEBUG  [main] org.apache.nifi.bootstrap.RunNiFi Saved Properties pid=17260 to /opt/nifi-1.10.0/run/nifi.status
2021-06-17 16:44:00,557 INFO  [main] org.apache.nifi.bootstrap.Command Launched Apache NiFi with Process ID 17260
2021-06-17 16:44:00,558 INFO  [main] org.apache.nifi.bootstrap.RunNiFi Successfully started Apache NiFi with PID 17260
2021-06-17 16:44:01,128 DEBUG  [NiFi Bootstrap Command Listener] org.apache.nifi.bootstrap.RunNiFi Status File: /opt/nifi-1.10.0/run/nifi.status
2021-06-17 16:44:01,128 DEBUG  [NiFi Bootstrap Command Listener] org.apache.nifi.bootstrap.RunNiFi Status File: /opt/nifi-1.10.0/run/nifi.pid
2021-06-17 16:44:01,131 DEBUG  [NiFi Bootstrap Command Listener] org.apache.nifi.bootstrap.RunNiFi Saved Pid 17260 to /opt/nifi-1.10.0/run/nifi.pid
2021-06-17 16:44:01,131 DEBUG  [NiFi Bootstrap Command Listener] org.apache.nifi.bootstrap.RunNiFi Status File: /opt/nifi-1.10.0/run/nifi.status

我的问题是;引导过程如何确定“NiFi 似乎已经死亡”?它是否在寻找 nifi.pid 和 nifi.status 文件的存在?如果是这样,它多久检查一次?这是可配置的吗?

【问题讨论】:

【参考方案1】:

根据源代码 nifi-bootstrap 通过检查进程是否有可用的退出代码来检查主进程是否处于活动状态,每秒检查一次(不可配置)。

https://github.com/apache/nifi/blob/820b2cff29bf3a0d97399667264591b995cc9e45/nifi-bootstrap/src/main/java/org/apache/nifi/bootstrap/RunNiFi.java#L1273

            while (true) 
                final boolean alive = isAlive(process);

                if (alive) 
                    try 
                        Thread.sleep(1000L);
                     catch (final InterruptedException ie) 
                    
                 else 
                    ... restart process ...

https://github.com/apache/nifi/blob/820b2cff29bf3a0d97399667264591b995cc9e45/nifi-bootstrap/src/main/java/org/apache/nifi/bootstrap/RunNiFi.java#L1028

    public static boolean isAlive(final Process process) 
        try 
            process.exitValue();
            return false;
         catch (final IllegalStateException | IllegalThreadStateException itse) 
            return true;
        
    

听起来您的主要 nifi 进程因某种原因停止...检查服务器上可用的 RAM 和 bootstrap.conf 中的 -Xms-Xmx 参数 - 通常这是主要原因。

【讨论】:

以上是关于NiFi Bootstrap 如何确定 NiFi 是不是未运行?的主要内容,如果未能解决你的问题,请参考以下文章

Nifi 除了模板和 flow.xml 文件还有其他备份吗?

Nifi 1.10.0-使用新的Stateless NiFi执行引擎和命令行

Nifi:如何在 nifi 中同步两个目录

Ambari 与 Nifi 有啥区别……这些风筝、香蕉在 Ambari 或 Nifi 中是如何使用的?

使用python传输文件以执行脚本NiFi

NiFi 计数器有啥用?