我一直在尝试从Spark Streaming中的Kafka消息访问NiFi Flowfile属性。我使用Java作为语言。
场景是NiFI使用GetSFTP处理器从FTP位置读取二进制文件,并使用publishKafka处理器向Kafka发布byte []消息。这些byte []属性使用Spark Streaming作业转换为ASCII数据,这些解码的ASCII写入Kafka进行进一步处理,并使用NiFi处理器保存到HDFS。
我的问题是我无法跟踪二进制文件名和解码的ASCII文件。我必须在我的解码ASCII中添加一个标题部分(用于文件名,文件大小,记录计数等),但我无法弄清楚如何从KafkaConsumer对象的NiFi Flowfile访问文件名。有没有办法可以使用标准的NiFi处理器来做到这一点?或者,请分享任何其他建议,以实现此功能。感谢。
答案 0 :(得分:2)
所以你的数据流是:
FTP - > NiFi - >卡夫卡 - > Spark Streaming - >卡夫卡 - > NiFi - > HDFS ?
目前Kafka在每条消息上都没有元数据属性(虽然我相信这可能会出现在Kafka 0.11中),所以当NiFi向主题发布消息时,它当前无法传递流文件属性消息。
您必须构建某种类型的包装器数据格式(可能是JSON或Avro),其中包含原始内容+您需要的其他属性,以便您可以将整个内容作为一条消息的内容发布到Kafka。 / p>
另外,我不知道你在Spark流媒体工作中到底在做什么,但是有没有理由你不能在NiFi中做那个部分?它听起来不像涉及窗口或连接的任何复杂,所以你可以简化一些事情并让NiFi进行解码,然后让NiFi将其写入Kafka和HDFS。