Day1 NiFi 导读与前言

我是谁?这系列的目的是?

先来简单自我介绍一下,我是 Mars。
目前在公司担任 Data / ML Engineer,但除了接触 Data 相关的任务之外,我本身也会去参与一些 ML 相关专案。所以对於 Data Pipeline 和 ML Pipeline 都有相关的经验。

而这次系列分享的目的,主要是希望能从自身经验中来分享一个在台湾比较少人提到跟讨论的服务工具 - Apache NiFi,这是一个 Data Pipeline 的 opensource,但通常在台湾讲到这个议题时,一开始可能都会想到像是 Apache Airflow, AWS Data Pipeline等服务工具,甚至自己额外程序撰写去执行,比较少人去联想到它。但其实这个服务在国外是成长地非常成熟,有许多很好的 UseCase,所以来透过这次的铁人30天活动让带大家能认识到这个服务的性质与使用场景。

前情提要

在一开始就先来做简单的导读。如同简介所说,在这次的系列文当中,我要介绍一个 Data Pipeline 的工具服务 - Apache NiFi。

首先,到底何谓 Data Pipeline 呢?我们依据下图来简单说明,可以想像有一个既有的 Source Data,我们从这里面读取数据,经过我们中间 Pipeline 的时候,Data 会经过一些逻辑的转换或清洗,最後再落地到 Target Data 作存放或是交由其他服务做後续处理。

其中 Source DataTarget Data 通常为能存放资料的地方,较常见的有:

  • Local File (ex. csv, parquet, json, etc.)
  • RDB (ex. MySQL, MariaDB, PostgreSQL, etc.)
  • Document DB (ex. MongoDB, etc.)
  • NoSQL (ex. Cassandra, ScyllaDB, etc.)
  • Search Engine (ex. elasticsearch, etc.)
  • Data Storage (ex. AWS S3, GCP GCS, HDFS, etc.)
  • DataWarehouse (ex.AWS Redshift, GCP BigQuery, etc.)
  • Message Queue (ex.Apache Kafka, AWS Knesis, etc.)
  • SQL Engine (ex. Presto, AWS Athena, etc.)
  • API (ex. 透过请求 API 将资料转移到下一个服务)

所以简单来说,只要是能存放资料的地方,我们都可以从中取得资料,再经由 Pipeline 的转换来做写入以利於後续的任务做使用。

而 Pipeline 的转换非常多样,会依照使用场景跟需求不同而有所设计,最常见的有:

  • 移除不必要的栏位
  • 栏位值的格式转换与解析
  • 计算与加入统计分析相关数据等

接着,由於目前大环境的现况,在实际应用中我们会很常面临到需要做大量资料转换的场景,可能要整合多个 Datasource 然後做整并处理,来给商业端或是ML相关的下游做应用,所以 Data Pipeline 在真实场景上其实是扮演着一个非常重要的角色。

也正因为其之重要性,所以延伸出许多相关服务,像是常见的 GCP Data FusionGCP DataflowAWS Data Pipeline等,但这些常见的都是在各自的 Cloud,因此能对接的也都以自身 Cloud 的 Datasource 居多,例如 AWS 就只能接 AWS 自己的 DB 或 Storage,GCP 也是。那 Apache Airflow 呢?要说他是他其实在目前大多数的应用确实是,说不是也确实不是,因为 Airflow 在当初的发展理念主要是以 Workflow 为主,所以它并不是很纯的 Data pipeline 工具,这部分会在後续有一篇来单独介绍这中间的差异性。

Apache NiFi 特点简介

而我们这次的主轴 Apache-NiFi,它拥有以下几个重要特点:

  1. 支援 AWS, GCP, Azure 之 cloud db 和 storage 相关服务,ex. S3, GCS, PubSub, Knesis等。
  2. 支援 opensource DB,ex. Cassandra, MySQL, MongoDB等。
  3. 主要透过 Web UI 视觉化之设定与拖拉的方式即可建立 Data pipeline。
  4. 可以 Batch 和 Streaming 做切换。
  5. 具备 Monitoring 机制来监控 data 的处理状况。
  6. 具备 Module Group 的机制,让 Pipeline 变成模组来重复使用。
  7. 可建置成clustering(丛集),来使大量资料做 load balance。
  8. 可针对 Data pipeline 去达到像 Git 一样的版本控制,让使用者可以指定版本去使用对应的 pipeline。
  9. 可搭配自己撰写的 Script (ex. python, golang, etc.)去做资料处理与控制。
  10. 容易追踪每笔资料的流向与转换状况。
  11. 对於错误处理有提供完善的措施。
  12. 如果 Pipeline 有问题时,不需要停止 Pipeline的运作,只要针对特定的 Processor 作处理即可。

那 Apache-NiFi有没有缺点,其实也是有的,如下:

  1. 介面设定的参数较多,涵盖的 Component 也较多,所以时常需要搭配 document 去做实作与理解。
  2. 需要 Self-hosted 和 Self-maintain。
  3. 假如是Clustering(丛集)的状况下,若需要再额外加入一个 node,需要将服务 downtime,接着更改设定再重启。
  4. 台湾本身的 Community 和 UseCase 相对较少,但在国外有许多 Community 和相关的资源与 Case 可以去做参考跟查找。

那基於以上特点与性质,我先在这里大概提一下,可能有些人觉得听起来不错、有些人觉得还好,但对我来说这就是一个选择,依照不同的使用场景选择适用的工具这才是重要的,但至少在我的经验中使用 Apache Nifi 是有一定的成效跟好处,所以也希望将此服务好好地介绍给各位。在接下来的30天会带着大家一步一步地理解 Apache Nifi 的性质与特点是什麽意思,以及如何去实作操作它。

未来30天的大纲


<<:  Day-01 深度学习是什麽?

>>:  食谱搜寻系统_搜寻演算法介绍

Day 4 图片加文字

图片加文字 教学原文参考:图片加文字 这篇文章会介绍如何透过 GIMP,使用选取工具和文字工具,开启...

【第十四天 - 堆叠型 SQL注入】

Q1. 什麽是 堆叠型 SQL注入? 堆叠型 SQL注入也称为 堆查询注入,英文为 stacked ...

【图解演算法】【Hash】 LeetCode 459 Repeated Substring Pattern

Question link: https://leetcode.com/problems/repea...

day16_Windows Arm 的游戏之旅

你最万能的游戏机 Windows PC windows 为市占率最高的电脑作业,他满足了人们音乐, ...

Ray Dalio 的浅白经济学笔记

今天来笔记一个之前从股癌上看到由 Ray Dalio 分享的一段 30 分钟的浅白经济学的影片。 ...