如何在Apache Nifi中为Kafka生产者指定密钥?

时间:2018-09-20 09:27:16

标签: json apache-kafka apache-nifi

我有使用Apache Nifi的简单管道,我想使用现有的Kafka puplisher处理器在kafka主题中发布一些消息。 enter image description here

问题是如何使用apache nifi表达式语言指定kafka密钥? 我对${message:jsonPath('$.key')}之类的东西感到厌倦,但是,由于对象message不存在,我当然遇到了错误。 enter image description here

我还尝试使用filename对象,该对象类似于输入消息的默认对象名称,但没有帮助


使用另一个kafka发布者处理器可以通过设置message key field属性来实现,但是PublishKafka处理器又如何呢?

1 个答案:

答案 0 :(得分:2)

NiFi表达语言只能引用流文件属性,而不能直接引用内容(这是有意为之)。

因此,如果要使用json文档中字段的值作为键,则需要首先使用另一个处理器(如EvaluateJsonPath)将该字段的值提取到流文件属性中。

假设您在json文档中有一个字段“ foo”,则可以将EvaluateJsonPath和destination设置为“流文件属性”,然后添加一个动态属性,如:

foo = $ .foo

然后在PublishKafka中将key属性设置为$ {foo}。

请记住,仅当每个流文件只有一个json文档时,这才有意义;否则,如果有多个json文档,则不清楚密钥是什么,因为流文件只能具有一个“ foo”属性,但是流文件的内容中有许多“ foo”字段。