我需要从某个来源读取数据流(在我的情况下是UDP流,但这并不重要),转换每个记录并将其写入HDFS。
对于这个目的,使用Flume或Flink有什么区别吗?
我知道可以使用自定义拦截器在Flume中转换每个事件。
但是我在Flink上还是新手,所以对我来说它看起来会做同样的事情。
应该选择哪一个更好?性能有差异吗?
请帮忙!
我需要从某个来源读取数据流(在我的情况下是UDP流,但这并不重要),转换每个记录并将其写入HDFS。
对于这个目的,使用Flume或Flink有什么区别吗?
我知道可以使用自定义拦截器在Flume中转换每个事件。
但是我在Flink上还是新手,所以对我来说它看起来会做同样的事情。
应该选择哪一个更好?性能有差异吗?
请帮忙!
免责声明: 我是Apache Flink的committer和PMC成员,但我对Apache Flume没有详细了解。
据我所知,将来自各种来源的流数据移到HDFS中是Apache Flume的主要用例之一。它是一个专业工具,我想它应该内置了许多相关功能。我无法评论Flume的性能。
Apache Flink是一款数据流处理平台,比Flume更加通用和功能丰富(例如支持事件时间,高级窗口操作,高级API,容错和有状态应用等等)。使用Flink可以实现和执行许多不同类型的流处理应用程序,包括流分析和CEP。
Flink提供滚动文件接收器以将数据流写入HDFS文件,并允许通过用户定义的函数实现各种自定义行为。然而,它并不是专门用于将数据注入到HDFS中的工具。不要期望在此用例中有很多内置功能。Flink提供非常好的吞吐量和低延迟。
如果您不需要超过简单记录级别的转换,我建议先尝试使用Flume解决您的用例。我希望Flume能够提供一些您需要自己实现的功能,如果您未来预计要进行更高级的流处理,则值得考虑Flink。
声明:我是 Apache Flume 的一个提交者,对 Apache Flink 没有详细了解。
对于你所描述的用例,Flume 可能是一个正确的选择。
你可以使用 Exec Source 直到 Netcat UDP Source 被合并到代码库中。
关于转换,很难提供建议,但你可能需要查看 Morphline Interceptor。
关于通道,我建议使用 Memory Channel,因为如果源是 UDP,一些可忽略的数据丢失应该是可以接受的。
在 sink 方面,HDFS Sink 可能符合你的需求。