使用ConsumeKafka处理器时创建更大的NiFi流文件

时间:2017-10-16 13:35:31

标签: hadoop apache-kafka apache-nifi

我创建了一个简单的NiFi管道,它从Kafka主题中读取数据流(使用ConsumeKafka)并将其写入HDFS(使用PutHDFS)。目前,我在HDFS上看到了很多小文件。一个新文件大约每秒创建一次,有些只有一个或两个记录。

我希望将更少,更大的文件写入HDFS。

我在ConsumeKafka中有以下设置:

Message Demarcator = <new line>
Max Poll Records = 10000
Max Uncommitted Time = 20s

过去我使用的是Flume而不是Nifi,它有batchSizebatchDurationMillis,这使我可以调整HDFS文件的大小。似乎Nifi中的ConsumeKafka缺少batchDurationMillis等效项。

NiFi中的解决方案是什么?

1 个答案:

答案 0 :(得分:1)

使用Message Demarcator和Max Poll Records是获取每个流文件多个消息的正确方法。您可能希望通过从0秒调整运行时间表(在调度选项卡上)来减慢ConsumeKafka处理器的速度,这意味着尽可能快地运行,达到1秒或任何有意义的东西来获取更多数据。

即使使用上述内容,您仍可能希望在PutHDFS之前粘贴MergeContent处理器,并根据大小合并流文件,以便在写入HDFS之前可以等到具有适当数量的数据。

如何使用MergeContent将取决于您要合并的数据类型...如果您有Avro,则Avro有一个特定的合并策略。如果你有JSON,你可以一个接一个地合并它们,或者你可以用页眉,页脚和分界符包装它们来制作一个有效的JSON数组。