使用Apache NiFi在GUI界面上定义数据流
首先
大家好。这篇文章是DWANGO 2015圣诞日历第13天的文章。
由于有可能受到瞩目的机会,我想给大家介绍一下Apache NiFi。
由于在日本应用还比较少(可能是因为)与此相关的日语信息也很匮乏,几乎全部都是英语信息,这种情况令人感到寂寞。
因此,我希望如果能让更多人看到并产生兴趣就好了。所以就拜托大家了。
Apache NiFi 是什么?
Apache NiFi是一款可以通过图形用户界面定义数据流的工具,简单来说就是可以从GUI定义和运行以下数据流1。
-
- ローカルファイルをHDFSに投入
-
- HTTPリクエストを待ちうけ、結果をファイルに出力
-
- Syslogを待ちうけ、結果をデータベースに投入
- Twitterからツイートを取得し、Kafkaのようなメッセージバスに投入
作为具有相似特性的产品,可以列举Node-RED、Apache Apex的dtAssemble以及Cask Data Application Platform(CDAP)的Hydrator等。
为什么需要通过GUI定义数据流?
由于企业内部数据流的变化越来越频繁,需要快速构建。
只有少部分的公司认识到数据流本身能为公司创造商业价值。这是因为价值实际上是由数据流经过的应用程序所产生的。
在这个过程中,需要进行反复尝试和错误纠正,因此数据流需要不断构建、更新和丢弃。
在上述情况下,每次都需要编写程序或脚本来构建数据流,会花费很多时间,而且容易因错误而重新开始。因此,我认为最近出现了一个可以通过图形用户界面轻松构建数据流并始终进行尝试和错误的产品。
为什么Apache NiFi在其中是一个不错的选择?
根据前面所述,有多个可以通过图形用户界面(GUI)来定义数据流的产品。我之所以推荐NiFi,有以下三个原因。
-
- 只需一個選擇 :
保持多個進程的集群擴展機制
具有少量依賴元件,可單獨使用該產品的能力
實現語言
1. 通过多进程集群化机制实现的扩展性机制保留。
数据流将连接系统之间,因此如果系统输出的数据量很大,一个进程将无法应对。
因此,我认为通过对多个进程进行集群化可以实现横向扩展是至关重要的要求。
在上述的产品中,具有通过聚类实现分布式扩展机制的是Apache NiFi、Apache Apex的dtAssemble以及CDAP的Hydrator,可惜的是Node-RED没有这样的功能。2
2. 该产品单独可用,依赖要素较少。
连接系统之间的关键是,在多个服务器上构建数据流通常是最常见的方式。
因此,理想情况下应该依赖元素和系统较少,并且最好能够仅使用相关产品本身。
在之前提到的产品中,满足这一要求的有Apache NiFi和Node-RED。而Apache Apex的dtAssemble和CDAP的Hydrator则是属于其他产品组合的一部分,需要与其他产品搭配使用。
3. Programming Language (实现语言)
最终,尽管原因相当糟糕,但实施语言是个问题。
个人觉得在出现问题时,只有使用Java、Scala、Groovy、Clojure等JVM语言才能较容易追踪问题……因此,Apache NiFi、Apache Apex的dtAssemble、CDAP的Hydrator成为了高优先级的选择。
基于以上三个原因,我们选择了Apache NiFi。除此之外,由于Apache NiFi的开发公司Onyara在2015年8月被Hortonworks收购,并成为Hortonworks DataFlow的基础,因此在接下来的一段时间内开发工作也有一定的稳定性,这也是考虑的一个因素。不过这只是一个附加的情况。
Apache NiFi的功能概述
Apache NiFi拥有以下功能的概述如下。虽然没有特别引人注目的功能,但我认为它涵盖了构建大规模数据流所需的所有要素。
-
- WebベースUI
設計、制御、フィードバックや監視がシームレスに実行可能
高い設定性
低レイテンシと高スループットの調整
メッセージの優先度順位付け
フローを動作中に変更可能
大規模データへの対応
バックプレッシャー機構
クラスタリングでスケールアウト
データ管理の明確化
データフローをはじめから最後までトラッキング
拡張に対して開かれた設計
自前でプロセッサを開発可能
高速な開発と容易なテストが可能
セキュア
SSL、SSH、HTTPS等暗号化方式をサポート
プラガブルなロールベースの認証/認可
实际构建的数据流示例,使用Apache NiFi
我列举几个实际定义的例子给你看。
从推文中提取HashTag并将其输出到文件中
在将日志内容尾部处切取并使用指定的分隔符进行切割后,发送一个HTTP请求。
接受HTTP请求,并将其序列化为Avro格式,然后将其投放到Kafka中。
从HDFS获取文件,并将其分割后插入HBase。
这样,可以定义出这样的数据流程。
尚且从定义的性质上可以看出来,Apache NiFi 的基本模型是流处理。
虽然可以从 HDFS 获取文件并进行投放等操作,但这也只是用于删除所获取的文件的处理方式,所以如果将 HDFS 作为 Apache NiFi 的数据源,则只是作为一个临时存储位置使用。
总结
希望在系统之间构建数据流,并且正在寻找一种好的方法的人可以尝试使用Apache NiFi,通过其图形界面可以轻松地连接数据流。
对于术语的定义可能有细微差别,但在这里,我们以不同系统之间的数据输出/输入的一般情况进行解释。
由于是大约半年前的调查,信息可能有些过时。