Nifi:我可以为 Kerberos Principal 和 Kerberos Keytab 使用变量吗?

Nifi: Can I use variables for the Kerberos Principal and the Kerberos Keytab?

我有来自三个不同来源的文件到 "PutHDFS" 处理器。这三个来源都有单独的 keytabs 并且将要分开的目录。由于源名称在文件名中,我能够创建一个名为 "source_name" 的变量,我可以用它来创建一个目录,就像这样:

/my/hdfs/directory/${source_name}/reports

我想对 Kerberos Principal 和 Kerberos Keytab 做一些类似的事情,就像这样:

Kerberos 主体:${source_name}@acme.com

Kerberos 密钥表:/home/nifi/keytabs/${source_name}.keytab

但是,Nifi 按字面意思读取这些值,我收到错误 "couldn't authenticate ${source_name}@acme.com"

Nifi 文档说这些字段支持表达式语言,但在 Nifi 本身(版本 1.7)中,它说这些字段只支持 "Variable Registry Only." 尽管进行了广泛的搜索,我仍然无法确定 "Variable Registry Only"的意思。我是否被迫对 kerberos 值进行硬编码?

表达式语言允许引用来自多个不同来源的值,并且它在此处描述的层次结构中工作:

https://nifi.apache.org/docs/nifi-docs/html/user-guide.html#Using_Custom_Properties

当它说 "Variable Registry Only" 时,这意味着来自传入流文件的值无法被该 属性 的表达式语言语句访问。

造成这种情况的主要原因通常是因为这些值需要以无法按流文件完成的方式使用。例如,HDFS 处理器需要在处理器启动时执行 kerberos 登录,然后定期更新票证。对无限数量的传入流文件值执行此操作变得难以管理。

更新:

这可能更好地描述了表达式语言可以访问的值的层次结构:

https://github.com/apache/nifi/blob/master/nifi-api/src/main/java/org/apache/nifi/expression/ExpressionLanguageScope.java#L20-L38