Apache NiFi和StreamSets之间的区别

Gou*_*tam 38 apache-nifi streamsets

我打算做一个类项目,并且经历了一些技术,我可以自动化或设置系统之间的数据流,并发现它们有几个,即Apache NiFi和StreamSets(据我所知).我无法理解的是它们与可以使用它们的用例之间的区别?我是新手,如果有人能解释我,我会非常感激.谢谢

Joe*_*itt 61

苏拉杰,

好问题.

我的回答是作为开源Apache NiFi项目管理委员会的成员,以及对数据流管理领域充满热情的人.

我从2006年开始参与NiFi项目.我对Streamsets的了解相对有限,所以我会让他们说出来.

要理解的关键是NiFi的构建是为了做一件非常重要的事情,那就是'数据流管理'.它的设计基于一个名为Flow Based Programming的概念,您可能希望阅读并参考您的项目" https://en.wikipedia.org/wiki/Flow-based_programming "

已经有许多系统产生诸如传感器等数据.有许多系统专注于Apache Storm,Spark,Flink等数据处理.最后,有许多系统存储HDFS,关系数据库等数据.NiFi完全专注于连接这些系统的任务,并提供必要的用户体验和核心功能.

为实现这一目标,有哪些关键功能和设计选择:

1)交互式命令和控制

尝试连接系统的人的工作是能够快速有效地与他们看到的恒定数据流进行交互.NiFi的UI允许您在数据流动时执行此操作,您可以添加要对其进行操作的功能,分发数据副本以尝试新方法,调整当前设置,查看最新和历史统计数据,有用的在线文档等.通过比较,几乎所有其他系统都具有面向设计和部署的模型,这意味着您进行一系列更改然后进行部署.该模型很好并且可以直观,但对于数据流管理工作而言,这意味着您无法通过对快速构建新流或安全有效地纠正或改进现有数据流处理至关重要的变更反馈来获得交互式更改.

2)数据来源

NiFi的一个非常独特的功能是能够生成细粒度和强大的可追溯性细节,用于数据的来源,对其执行的操作,发送的位置以及流程中的完成时间.这对于有效的数据流管理至关重要,原因有很多,但是对于处于早期探索阶段和项目工作的人来说,最重要的是这给你带来了很棒的调试灵活性.您可以设置流程并让事情运行,然后使用来源实际证明它完全符合您的要求.如果没有按预期发生某些事情,您可以修复流程并重播该对象然后重复.真有帮助.

3)专用数据存储库

即使在非常适中的硬件或虚拟环境中,NiFi的开箱即用体验也能提供非常强大的性能.这是因为flowfile和内容存储库设计为我们提供了高性能但我们想要的事务语义,因为数据在流程中工作.flowfile存储库是一个简单的预写日志实现,内容存储库提供了一个不可变的版本化内容存储库.这反过来意味着我们只能通过添加新指针(实际上不是复制字节)来"复制"数据,或者我们可以通过简单地从原始数据中读取并写出新版本来转换数据.再次非常有效率.再加上我刚才提到的物源,它只是提供了一个非常强大的平台.另一个值得理解的关键是,在连接系统的业务中,您并不总是能够决定所涉及的数据大小.NiFi API是为了纪念这一事实而构建的,因此我们的API允许处理器执行诸如接收,转换和发送数据之类的操作,而无需在内存中加载完整的对象.这些存储库还意味着在大多数流程中,大多数处理器甚至根本不接触内容.但是,您可以从NiFi UI中轻松查看实际读取或写入的字节数,这样您就可以在建立和观察流程时获得真正有用​​的信息.这种设计还意味着NiFi可以自然地支持背压和压力释放,这些是数据流管理系统的关键特性.

之前由Streamsets公司的人员提到NiFi是面向文件的.我不确定文件或记录或元组或对象或消息之间的区别在于通用术语,但实际情况是,当数据在流程中时,它是'需要管理的事物,交付".这就是NiFi的作用.无论你有很多非常高速的小东西,或者你有大量的东西,无论它们来自互联网上的现场音频流,还是来自硬盘上的文件,都没关系.一旦进入流程,就可以进行管理和交付.这就是NiFi的作用.

Streamsets公司还提到NiFi是无模式的.NiFi不会强制将数据从最初的数据转换为某种特殊的NiFi格式,也不必将其重新转换回某种格式以便后续交付.如果我们这样做会非常不幸,因为这意味着即使是最微不足道的案例也会产生问题性的影响,幸运的是NiFi没有这个问题.我们进一步走了那条路然后意味着处理各种数据集,如媒体(图像,视频,音频等)会很困难,但我们走在正确的轨道上,NiFi一直用于这样的事情.

最后,当您继续执行项目时,如果您发现有些内容需要改进,或者您希望提供代码,我们很乐意为您提供帮助.从https://nifi.apache.org,您可以快速找到有关如何提交票证,提交补丁,通过电子邮件发送邮件列表等信息.

以下是几个有趣的NiFi项目结账:https : //www.linkedin.com/pulse/nifi-ocr-using-apache-read-childrens-books-jeremy-dyer https://twitter.com/KayLerch /状态/ 721455415456882689

祝好课程项目好运!如果您有任何疑问,users @ nifi.apache.org邮件列表会很乐意提供帮助.

谢谢乔


小智 32

Apache NiFi和StreamSets Data Collector都是Apache许可的开源工具.

Hortonworks确实有一个名为Hortonworks DataFlow(HDF)的商业支持变体.

虽然两者都有许多相似之处,例如基于网络的ui,但两者都用于摄取数据,但存在一些关键差异.它们还包括链接在一起的处理器,以执行转换,序列化等.

NiFi处理器是面向文件和无模式的.这意味着一段数据由FlowFile表示(这可能是磁盘上的实际文件,或其他地方获得的一些数据).每个处理器负责理解数据的内容以便对其进行操作.因此,如果一个处理器理解格式A而另一个处理器只理解格式B,则可能需要在这两个处理器之间执行数据格式转换.

NiFi可以独立运行,也可以使用自己的内置集群系统作为集群运行.

然而,StreamSets Data Collector(SDC)采用基于记录的方法.这意味着当数据进入您的管道时(无论是JSON,CSV等),它被解析为通用格式,以便不再将理解数据格式的责任放在每个处理器上,并且可以连接任何处理器到任何其他处理器.

SDC也可以独立运行,也可以运行集群模式,但它可以在YARN/Mesos上的Spark上运行,利用您可能拥有的现有集群资源.

NiFi已经存在了大约10年(但在开源社区不到2年).

StreamSets在2015年稍后发布到开源社区.它与供应商无关,并且就Hadoop而言,Hortonworks,Cloudera和MapR都受支持.

完全披露:我是一名在StreamSet上工作的工程师.