Apache nifi 关于NiFi,如何区分来自两个不同Kakfa的消息?

Apache nifi 关于NiFi,如何区分来自两个不同Kakfa的消息?,apache-nifi,Apache Nifi,我有两个不同的应用程序,分别命名为A1和A2。每个应用程序都有自己的Kakfa服务器。来自这两个KAKFA服务器(代理)的消息将发送到NiFi 每个Kakfa都有不同的主题名称,基于此,我可以区分来自Kakfa的消息。但除了卡夫卡的主题名,NiFi中还有其他方法来区分来自两个不同卡夫卡的消息吗?他们是否有NiFi处理器检查主题名称,然后决定下一条路线 非常感谢。 当做 Yeshwant如果您使用NiFi的卡夫卡处理器(ConsumeKafka/ConsumeKafka记录)从卡夫卡接收消息,它们

我有两个不同的应用程序,分别命名为A1和A2。每个应用程序都有自己的Kakfa服务器。来自这两个KAKFA服务器(代理)的消息将发送到NiFi

每个Kakfa都有不同的主题名称,基于此,我可以区分来自Kakfa的消息。但除了卡夫卡的主题名,NiFi中还有其他方法来区分来自两个不同卡夫卡的消息吗?他们是否有NiFi处理器检查主题名称,然后决定下一条路线

非常感谢。 当做
Yeshwant

如果您使用NiFi的卡夫卡处理器(ConsumeKafka/ConsumeKafka记录)从卡夫卡接收消息,它们将以流文件的形式输出消息。它们带有一个名为
kafka.topic
的属性,该属性将包含消息来自的主题的名称

要根据主题名称路由消息,可以使用
RouteOnAttribute
processor。例如,您有两个主题
topicA
&
topicB
。然后,您必须如下配置RouteOnAttribute处理器:


然后根据您的需求将关系
topic-a
topic-b
连接到单独的流。如果要添加更多卡夫卡源代码,只需使用另一个动态关系更新
RouteOnAttribute
。例:
topic-c:${kafka.topic:equals('topicC')}
另一个解决方案。您可以将处理器用于此目的。您可以获得内容的唯一哈希代码,并基于此确定您的消息


注意:从Apache NiFi 1.8.0开始,该处理器被标记为已弃用,因为它是一个非标准的遗留实现,可能会在即将发布的版本中删除

我更新了这个答案,以指向取代不推荐的
HashContent
处理器的
加密HashContent
。我不确定这个解决方案是如何回答这个问题的,但至少引用的处理器是最新的。非常感谢!我写“HashContent”是因为我花了很多时间在我们的工作项目上,该项目的生产版本为1.4.0:)忘了它)非常感谢。非常有用的评论。谢谢西瓦帕拉桑纳。我试过你的解决办法,结果很好。一旦我区分了Kafka的各种来源,我就需要发送Restful HTTP get和post请求。我使用了InvokeHTTPProcessor,但在配置屏幕中并没有用于编写POST正文消息的属性。我是否需要使用类似UpdateAttribute或ReplaceText的处理器,然后将其发送到AttributesToJSON?在那之后把它发送给EHTTP?布莱恩在你的另一个问题中回答了这个问题。这就是
InvokeHTTP
的工作原理。如果我想基于某个属性值创建路由怎么办?因为消息是JSON格式的,所以我首先使用EvaluateJSONPath。它具有“引擎”属性。然后我将这个处理器连接到RouteOnAttribute。我添加了新的路由“topicD”,它的值为${.engine:equals('XJERA')},但在“putFile”中“我没有看到任何数据进入。我遗漏了什么吗?您不能提供JSON路径表达式来代替NiFi表达式语言。您必须向
EvaluateJSONPath
添加一个动态属性,其中键可以是任何东西,值是JSON路径表达式,并且在
RouteOnAttribute
中必须提供键。看看这个: