我打算做一个课堂项目,并且正在研究一些可以自动化或设置系统之间数据流的技术,发现其中有几个,即 Apache NiFi 和 StreamSets(据我所知)。我无法理解的是它们与可以使用它们的用例之间的区别?我是新手,如果有人能解释一下我将不胜感激。谢谢
4 回答
苏拉杰,
好问题。
我的回应是作为开源 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 的开箱即用体验也能提供非常强大的性能。这是因为流文件和内容存储库设计为我们提供了我们想要的高性能但事务语义,因为数据在流中工作。流文件存储库是一个简单的预写日志实现,内容存储库提供不可变的版本化内容存储。这反过来意味着我们可以通过只添加一个新指针(实际上并不复制字节)来“复制”数据,或者我们可以通过简单地从原始数据中读取并写出新版本来转换数据。再次非常有效。再加上我刚才提到的出处,它提供了一个非常强大的平台。这里要理解的另一件真正关键的事情是,在连接系统的业务中,您并不总是能够决定所涉及的数据大小等事情。NiFi API 是为了尊重这一事实而构建的,因此我们的 API 允许处理器执行诸如接收、转换和发送数据之类的操作,而无需将完整的对象加载到内存中。这些存储库还意味着在大多数流程中,大多数处理器甚至根本不接触内容。但是,您可以从 NiFi UI 中轻松准确地查看实际读取或写入的字节数,因此您再次获得在建立和观察流程方面非常有用的信息。这种设计也意味着 NiFi 可以自然地支持背压和压力释放,这些对于数据流管理系统来说是非常关键的特性。t 总是可以决定诸如所涉及的数据大小之类的事情。NiFi API 是为了尊重这一事实而构建的,因此我们的 API 允许处理器执行诸如接收、转换和发送数据之类的操作,而无需将完整的对象加载到内存中。这些存储库还意味着在大多数流程中,大多数处理器甚至根本不接触内容。但是,您可以从 NiFi UI 中轻松准确地查看实际读取或写入的字节数,因此您再次获得在建立和观察流程方面非常有用的信息。这种设计也意味着 NiFi 可以自然地支持背压和压力释放,这些对于数据流管理系统来说是非常关键的特性。t 总是可以决定诸如所涉及的数据大小之类的事情。NiFi API 是为了尊重这一事实而构建的,因此我们的 API 允许处理器执行诸如接收、转换和发送数据之类的操作,而无需将完整的对象加载到内存中。这些存储库还意味着在大多数流程中,大多数处理器甚至根本不接触内容。但是,您可以从 NiFi UI 中轻松准确地查看实际读取或写入的字节数,因此您再次获得在建立和观察流程方面非常有用的信息。这种设计也意味着 NiFi 可以自然地支持背压和压力释放,这些对于数据流管理系统来说是非常关键的特性。并发送数据,而无需在内存中加载完整的对象。这些存储库还意味着在大多数流程中,大多数处理器甚至根本不接触内容。但是,您可以从 NiFi UI 中轻松准确地查看实际读取或写入的字节数,因此您再次获得在建立和观察流程方面非常有用的信息。这种设计也意味着 NiFi 可以自然地支持背压和压力释放,这些对于数据流管理系统来说是非常关键的特性。并发送数据,而无需在内存中加载完整的对象。这些存储库还意味着在大多数流程中,大多数处理器甚至根本不接触内容。但是,您可以从 NiFi UI 中轻松准确地查看实际读取或写入的字节数,因此您再次获得在建立和观察流程方面非常有用的信息。这种设计也意味着 NiFi 可以自然地支持背压和压力释放,这些对于数据流管理系统来说是非常关键的特性。您可以从 NiFi UI 轻松准确地查看实际读取或写入的字节数,因此您再次获得在建立和观察流程方面非常有用的信息。这种设计也意味着 NiFi 可以自然地支持背压和压力释放,这些对于数据流管理系统来说是非常关键的特性。您可以从 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 邮件列表很乐意为您提供帮助。
谢谢乔
Apache NiFi 和 StreamSets Data Collector 都是 Apache 许可的开源工具。
Hortonworks 确实有一个商业支持的变体,称为 Hortonworks DataFlow (HDF)。
虽然两者都有很多相似之处,例如基于 Web 的 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 都受支持。
完全披露:我是一名从事 StreamSets 的工程师。
对于数据摄取场景,它们非常相似。Apache NIFI(HDP) 更成熟,StreamSets 更轻量级。两者都易于使用,都具有强大的功能。而且 StreamSets 可以轻松地背后有公司,Hortonworks 和 Cloudera。
显然,在 NIFI 上工作的贡献者比 StreamSets 多,当然,NIFI 在生产中拥有更多的企业部署。
两个恕我直言之间的两个关键区别是。
Apache NiFi 是一个顶级 Apache 项目,这意味着它已经经历了这里描述的孵化过程, http: //incubator.apache.org/policy/process.html,并且可以接受来自世界各地遵循标准 Apache 的开发人员的贡献确保软件质量的过程。StreamSets,是 Apache LICENSED,这意味着任何人都可以重用代码等。但该项目不作为 Apache 项目进行管理。事实上,为了对 Streamsets 做出贡献,您需要签署合同。 https://streamsets.com/contributing/。将此与并非由律师编写的 Apache NiFi 贡献者指南进行对比。https://cwiki.apache.org/confluence/display/NIFI/Contributor+Guide#ContributorGuide-HowtocontributetoApacheNiFi
StreamSets “改为在 YARN/Mesos 上的 Spark 上运行,利用您可能拥有的现有集群资源。” 如果您想将数据流进一步部署到生成数据的设备所在的边缘,这会施加一些限制。NiFi 的一个子项目 Apache MiniFi 可以在单个 Raspberry Pi 上运行,而我相当有信心 StreamSets 不能,因为 YARN 或 Mesos 需要比 Raspberry Pi 提供的更多资源。
披露:我是 Hortonworks 员工