Apache NiFi is a software project from the Apache Software Foundation designed to automate the flow of data between software systems.
Apache NiFi supports powerful and scalable directed graphs of data routing, transformation, and system mediation logic.
Prerequisites
- JDK 8
Add JAVA_HOME in Environment Variables
Once you have installed the JDK 8, we need to setup the System Variable in Environment variables. Open Environment variables from the Start Menu.
In System Variables
, click on New. If JAVA_HOME
is already present pointing to JRE 1.8 path, then you do not have to perform these steps.
Give a new System variable name JAVA_HOME and choose the directory of jre 1.8.
When you have added the system variable, click on OK.
Download Apache NiFi
Go to the official website and click on the zip file under binaries. At the time of writing this blog, the latest version is 1.14.0.
Download from the first link. The download size is approx. over 1.3 GB.
Unzip the file and this is how the folder structure will be.
Check the Configuration
Open the conf folder and open the nifi.properties
file. Scroll to the web properties. Make a note of host and the port where the NiFi will be running.
Run NiFi
Go to the bin folder and open command line from there.
To start the NiFi, you can directly double click on run-nifi.bat
file. Or you can just type the file name in command prompt.
If the command line produces a process ID, that means your NiFi is running. You can also check the status of NiFi if it is running or not by executing the status-nifi.bat
file.
Go to the following URL – https://127.0.0.1:8443/nifi/ to check if the NiFi has started. Your port might be different. Don’t worry if this URL is not loading instantly. NiFi takes time after starting. It creates the repository folders at the root location.
Once the folders are created, you can check the URL. If you see the below warning, click on Advanced and Proceed.
Following is the login screen you will see.
To get the Username and Password, refer to my blog here. To shutdown the NiFi, just type Cntrl+C on the command line where NiFi is running.
Thank you All!!! Hope you find this useful.
Apache NiFi is a very popular data movement tool, widely used by many companies around the world to move data across different systems. Born as an Apache Open Source project, it was packaged by Hortonworks in its Data Flow platform, and then by Cloudera in their own version of Data Flow when the two companies merged.
Today, it is available in the Cloudera stack both for on-premise and public clusters, but the open-source version still remains a valid option for those who want to experiment, play, or simply run it in non-production environments.
While typically run on Linux machines, it is perfectly feasible to run it on Windows, and in certain cases this might be an easier and more immediate option. If you just want to run it for simple flows, or if you want to build and test your pipelines without worrying about incurring additional costs from your cloud provider before the flow is deployed to production, then you can do so perfectly well from your personal or work Windows laptop, without needing to install Linux virtual machines and so on.
We have written plenty of blog posts about NiFi usage in certain enterprise scenarios (have a look at our blog here or simply google “clearpeaks nifi”), but today we want to get back to the roots and guide you through the straightforward process of installing it on your local Windows machine. There are two main steps that we need to perform, installing a valid JDK (Java Development Kit), and downloading then starting NiFi.
Let’s take a look at both of them in more detail.
Installing a valid JDK
In this section we’ll assume that you do not have a running version of the JDK. On a Windows machine, it’s easy to check: go to Start > Control Panel > Programs, and see if Java is installed. Alternatively, you can open a command line and type “javac”. If the command is not recognised, chances are that you do not have a JDK (although it might depend on how your system variables are set up, as we will see in a bit).
If you already have a JDK, no problem; NiFi will most probably work with it and you can move on to the next step.
To download a JDK, go to the Oracle website. In our case, we decided to install JDK 8, as it is one of the most used versions and usually works well with common software.
Follow this link, and scroll down until you find the Windows x64 installer; click on the link on the right and download the exe file.
Figure 1: The JDK download page on the Oracle website
After downloading the file, double-click on it and follow the wizard. There’s no need to change anything, so just confirm and click Next whenever requested, and wait for the installation to complete. Remember the name of the folder where the JDK will be installed (probably something like “C:Program FilesJava”).
Once the installation has finished, you need to edit your system variables so your laptop will be able to find the JDK location when required. Go to the Start Menu, look for Edit the system environment variables, and open the System Properties tab. There, at the bottom, click on Environment Variables.
Click on New at the bottom of the tab that opens to add a new system variable. We called ours JAVA_HOME, with the value where the JDK was installed (in our case, C:Program FilesJavajdk1.8.0_331).
Figure 2: Creating the JAVA_HOME system variable
Then scroll down the list of existing variables until you find Path; open it, and at the bottom add a new line, using the same path as before, but this time with the “bin” suffix (so in our case, “C:Program FilesJavajdk1.8.0_331bin”).
Figure 3: Editing the Path system variable
Now confirm the changes and close the tab.
At this point, the JDK should have been installed and detected by your machine; to confirm this, open a command line and type “javac”. If the output looks like the one in the picture below, then you are all set!
Figure 4: Checking the JDK on your console
Downloading and Starting NiFi
Now that we have a working JDK, we can move on to downloading and installing NiFi.
To download NiFi, go to this link (or simply google “download nifi”).
Figure 5: NiFi download page
The version we want ends with “bin.zip” (the binary file zip folder). Click on it, and you are taken to another page where you can actually download the file (using the first link).
Figure 6: Binary zip file download link
Once the zip file has been downloaded, just extract it. A simple and effective choice is to unzip the folder in C:, and you should end up with a path like C:nifi-1.16.3, in which you should already see a bin directory.
At this point, we should check out the NiFi documentation to better understand the next steps.
At this link you’ll see that you are now required to navigate to that bin folder and double-click on the run-nifi.bat file. This will start the NiFi process in your machine. Keep this tab open as long as you want to use NiFi!
Figure 7: Starting the NiFi process
If you scroll down the documentation page a bit, you’ll also see how NiFi has already created a user for us: simply open the logs/nifi-app.log, look for “Generated”, and you should see both the username and password. The documentation also explains how to change those credentials, should you wish to.
Finally, you can open your NiFi UI. As the documentation shows, it is actually secured and running on HTTPS, on port 8443. Depending on your DNS/hosts file setting, you might need to use one of these URLs to open it:
- https://localhost:8443/nifi
- https://127.0.0.1:8443/nifi
If everything has gone according to plan, you should be prompted with the login page, as in the picture below:
Figure 8: NiFi login
Enter your credentials (the default ones or the new ones, if you changed them) and the NiFi UI will appear!
Figure 9: NiFi UI
Conclusion
Now you have a running NiFi instance to experiment with and test your flows – and it’s free! You can save some money before moving the flows to your production environment (for example, if you are running Data Flow in CDP Public Cloud).
As we said before, we have already written a lot about NiFi (check out our blog posts), but we thought that it would make your life easier if you had a quick and concise guide just to run NiFi locally, without having to worry about clusters, cloud resources, or Linux VMs.
At ClearPeaks, we are experts in NiFi and so much more. If you have any questions about what you’ve just read, or simply need some help with your Big Data, BI or ML architecture, don’t hesitate to contact us and we’ll be happy to help.
Apache NiFi is an easy to use, powerful, and
reliable system to process and distribute data.
Table of Contents
- Features
- Requirements
- Getting Started
- MiNiFi subproject
- Registry subproject
- Getting Help
- Documentation
- License
- Export Control
Features
Apache NiFi was made for dataflow. It supports highly configurable directed graphs of data routing, transformation, and system mediation logic. Some of its key features include:
- Web-based user interface
- Seamless experience for design, control, and monitoring
- Multi-tenant user experience
- Highly configurable
- Loss tolerant vs guaranteed delivery
- Low latency vs high throughput
- Dynamic prioritization
- Flows can be modified at runtime
- Back pressure
- Scales up to leverage full machine capability
- Scales out with zero-leader clustering model
- Data Provenance
- Track dataflow from beginning to end
- Designed for extension
- Build your own processors and more
- Enables rapid development and effective testing
- Secure
- SSL, SSH, HTTPS, encrypted content, etc…
- Pluggable fine-grained role-based authentication/authorization
- Multiple teams can manage and share specific portions of the flow
Minimum Recommendations
- JDK 11.0.16
- Apache Maven 3.8.6
Minimum Requirements
- JDK 8 Update 251
- Apache Maven 3.6.0
Getting Started
Read through the quickstart guide for development.
It will include information on getting a local copy of the source, give pointers on issue
tracking, and provide some warnings about common problems with development environments.
For a more comprehensive guide to development and information about contributing to the project
read through the NiFi Developer’s Guide.
Building
Run mvn clean install
or for parallel build execute mvn -T 2.0C clean install
.
The parallel build should take around fifteen minutes on modern hardware.
laptop:nifi myuser$ mvn -T 2.0C clean install
[INFO] Scanning for projects...
[INFO] Inspecting build with total of 115 modules...
...tens of thousands of lines elided...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 09:24 min (Wall Clock)
[INFO] Finished at: 2015-04-30T00:30:36-05:00
[INFO] Final Memory: 173M/1359M
[INFO] ------------------------------------------------------------------------
Run mvn clean install -DskipTests
to skip unit test execution.
Deploying
Change directories to nifi-assembly
. The target
directory contains binary archives.
laptop:nifi myuser$ cd nifi-assembly
laptop:nifi-assembly myuser$ ls -lhd target/nifi*
drwxr-xr-x 3 myuser mygroup 102B Apr 30 00:29 target/nifi-1.0.0-SNAPSHOT-bin
-rw-r--r-- 1 myuser mygroup 144M Apr 30 00:30 target/nifi-1.0.0-SNAPSHOT-bin.tar.gz
-rw-r--r-- 1 myuser mygroup 144M Apr 30 00:30 target/nifi-1.0.0-SNAPSHOT-bin.zip
Copy the nifi-VERSION-bin.tar.gz
or nifi-VERSION-bin.zip
to a separate deployment directory.
Extracting the distribution will create a new directory named for the version.
laptop:nifi-assembly myuser$ mkdir ~/example-nifi-deploy
laptop:nifi-assembly myuser$ tar xzf target/nifi-*-bin.tar.gz -C ~/example-nifi-deploy
laptop:nifi-assembly myuser$ ls -lh ~/example-nifi-deploy/
total 0
drwxr-xr-x 10 myuser mygroup 340B Apr 30 01:06 nifi-1.0.0-SNAPSHOT
Starting
Change directories to the deployment location and run the following command to start NiFi.
laptop:~ myuser$ cd ~/example-nifi-deploy/nifi-*
laptop:nifi-1.0.0-SNAPSHOT myuser$ ./bin/nifi.sh start
Running bin/nifi.sh start
starts NiFi in the background and exits. Use --wait-for-init
with an optional timeout in
seconds to wait for a complete startup before exiting.
laptop:nifi-1.0.0-SNAPSHOT myuser$ ./bin/nifi.sh start --wait-for-init 120
Authenticating
The default configuration generates a random username and password on startup. NiFi writes the generated credentials
to the application log located in logs/nifi-app.log
under the NiFi installation directory.
The following command can be used to find the generated credentials on operating systems with grep
installed:
laptop:nifi-1.0.0-SNAPSHOT myuser$ grep Generated logs/nifi-app*log
NiFi logs the generated credentials as follows:
Generated Username [USERNAME]
Generated Password [PASSWORD]
The USERNAME
will be a random UUID composed of 36 characters. The PASSWORD
will be a random string composed of
32 characters. The generated credentials will be stored in conf/login-identity-providers.xml
with the password stored
using bcrypt hashing. Record these credentials in a secure location for access to NiFi.
The random username and password can be replaced with custom credentials using the following command:
./bin/nifi.sh set-single-user-credentials <username> <password>
Running
Open the following link in a web browser to access NiFi: https://localhost:8443/nifi
The web browser will display a warning message indicating a potential security risk due to the self-signed
certificate NiFi generated during initialization. Accepting the potential security risk and continuing to load
the interface is an option for initial development installations. Production deployments should provision a certificate
from a trusted certificate authority and update the NiFi keystore and truststore configuration.
Accessing NiFi after accepting the self-signed certificate will display the login screen.
Using the generated credentials, enter the generated username in the User
field
and the generated password in the Password
field, then select LOG IN
to access the system.
Configuring
The NiFi User Guide describes how to build a data flow.
Stopping
Run the following command to stop NiFi:
laptop:~ myuser$ cd ~/example-nifi-deploy/nifi-*
laptop:nifi-1.0.0-SNAPSHOT myuser$ ./bin/nifi.sh stop
MiNiFi subproject
MiNiFi is a child project effort of Apache NiFi. It is a complementary data collection approach that supplements the core tenets of NiFi in dataflow management, focusing on the collection of data at the source of its creation.
Specific goals for MiNiFi are comprised of:
- small and lightweight footprint
- central management of agents
- generation of data provenance
- integration with NiFi for follow-on dataflow management and full chain of custody of information
Perspectives of the role of MiNiFi should be from the perspective of the agent acting immediately at, or directly adjacent to, source sensors, systems, or servers.
To run:
-
Change directory to ‘minifi-assembly’. In the target directory, there should be a build of minifi.
$ cd minifi-assembly $ ls -lhd target/minifi* drwxr-xr-x 3 user staff 102B Jul 6 13:07 minifi-1.14.0-SNAPSHOT-bin -rw-r--r-- 1 user staff 39M Jul 6 13:07 minifi-1.14.0-SNAPSHOT-bin.tar.gz -rw-r--r-- 1 user staff 39M Jul 6 13:07 minifi-1.14.0-SNAPSHOT-bin.zip
-
For testing ongoing development you could use the already unpacked build present in the directory
named «minifi-version-bin», where version is the current project version. To deploy in another
location make use of either the tarball or zipfile and unpack them wherever you like. The
distribution will be within a common parent directory named for the version.$ mkdir ~/example-minifi-deploy $ tar xzf target/minifi-*-bin.tar.gz -C ~/example-minifi-deploy $ ls -lh ~/example-minifi-deploy/ total 0 drwxr-xr-x 10 user staff 340B Jul 6 01:06 minifi-1.14.0-SNAPSHOT
To run MiNiFi:
-
Change directory to the location where you installed MiNiFi and run it.
$ cd ~/example-minifi-deploy/minifi-* $ ./bin/minifi.sh start
-
View the logs located in the logs folder
$ tail -F ~/example-minifi-deploy/logs/minifi-app.log -
For help building your first data flow and sending data to a NiFi instance see the System Admin Guide located in the docs folder or making use of the minifi-toolkit, which aids in adapting NiFi templates to MiNiFi YAML configuration file format.
-
If you are testing ongoing development, you will likely want to stop your instance.
$ cd ~/example-minifi-deploy/minifi-* $ ./bin/minifi.sh stop
Docker Build
To build:
- Run a full NiFi build (see above for instructions). Then from the minifi/ subdirectory, execute
mvn -P docker clean install
. This will run the full build, create a docker image based on it, and run docker-compose integration tests. After it completes successfully, you should have an apacheminifi:${minifi.version} image that can be started with the following command (replacing ${minifi.version} with the current maven version of your branch):
docker run -d -v YOUR_CONFIG.YML:/opt/minifi/minifi-${minifi.version}/conf/config.yml apacheminifi:${minifi.version}
Registry subproject
Registry—a subproject of Apache NiFi—is a complementary application that provides a central location for storage and management of shared resources across one or more instances of NiFi and/or MiNiFi.
Getting Registry Started
- Build NiFi (see Getting Started for NiFi )
or
Build only the Registry subproject:
cd nifi/nifi-registry
mvn clean install
If you wish to enable style and license checks, specify the contrib-check profile:
mvn clean install -Pcontrib-check
-
Start Registry
cd nifi-registry/nifi-registry-assembly/target/nifi-registry—bin/nifi-registry-/
./bin/nifi-registry.sh start
Note that the application web server can take a while to load before it is accessible.
- Accessing the application web UI
With the default settings, the application UI will be available at http://localhost:18080/nifi-registry
- Accessing the application REST API
If you wish to test against the application REST API, you can access the REST API directly. With the default settings, the base URL of the REST API will be at http://localhost:18080/nifi-registry-api
. A UI for testing the REST API will be available at http://localhost:18080/nifi-registry-api/swagger/ui.html
- Accessing the application logs
Logs will be available in logs/nifi-registry-app.log
Database Testing
In order to ensure that NiFi Registry works correctly against different relational databases,
the existing integration tests can be run against different databases by leveraging the Testcontainers framework.
Spring profiles are used to control the DataSource factory that will be made available to the Spring application context.
DataSource factories are provided that use the Testcontainers framework to start a Docker container for a given database and create a corresponding DataSource.
If no profile is specified then an H2 DataSource will be used by default and no Docker containers are required.
Assuming Docker is running on the system where the build is running, then the following commands can be run:
Target Database | Build Command |
---|---|
All supported | mvn verify -Ptest-all-dbs |
H2 (default) | mvn verify |
MariaDB 10.3 | mvn verify -Pcontrib-check -Dspring.profiles.active=mariadb-10-3 |
MySQL 8 | mvn verify -Pcontrib-check -Dspring.profiles.active=mysql-8 |
PostgreSQL 10 | mvn verify -Dspring.profiles.active=postgres-10 |
For a full list of the available DataSource factories, consult the nifi-registry-test
module.
Getting Help
If you have questions, you can reach out to our mailing list: dev@nifi.apache.org
(archive). For more interactive discussions, community members can often be found in the following locations:
-
Apache NiFi Slack Workspace: https://apachenifi.slack.com/
New users can join the workspace using the following invite link.
To submit a feature request or bug report, please file a Jira at https://issues.apache.org/jira/projects/NIFI/issues. If this is a security vulnerability report, please email security@nifi.apache.org directly and review the Apache NiFi Security Vulnerability Disclosure and Apache Software Foundation Security processes first.
Documentation
See https://nifi.apache.org/ for the latest NiFi documentation.
See https://nifi.apache.org/minifi and https://cwiki.apache.org/confluence/display/MINIFI for the latest MiNiFi-specific documentation.
See https://nifi.apache.org/registry for the latest Registry-specific documentation.
License
Except as otherwise noted this software is licensed under the
Apache License, Version 2.0
Licensed under the Apache License, Version 2.0 (the «License»);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an «AS IS» BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Export Control
This distribution includes cryptographic software. The country in which you
currently reside may have restrictions on the import, possession, use, and/or
re-export to another country, of encryption software. BEFORE using any
encryption software, please check your country’s laws, regulations and
policies concerning the import, possession, or use, and re-export of encryption
software, to see if this is permitted. See https://www.wassenaar.org/ for more
information.
The U.S. Government Department of Commerce, Bureau of Industry and Security
(BIS), has classified this software as Export Commodity Control Number (ECCN)
5D002.C.1, which includes information security software using or performing
cryptographic functions with asymmetric algorithms. The form and manner of this
Apache Software Foundation distribution makes it eligible for export under the
License Exception ENC Technology Software Unrestricted (TSU) exception (see the
BIS Export Administration Regulations, Section 740.13) for both object code and
source code.
The following provides more details on the included cryptographic software:
Apache NiFi uses BouncyCastle, JCraft Inc., and the built-in
Java cryptography libraries for SSL, SSH, and the protection
of sensitive configuration parameters. See
- https://bouncycastle.org/about.html
- http://www.jcraft.com/c-info.html
- https://www.oracle.com/corporate/security-practices/corporate/governance/global-trade-compliance.html
for more details on each of these libraries cryptography features.
Recently have been working with Apache Nifi for one my IoT Project. I would like to write a post on how to Install Apache Nifi in Windows 7.
Pre-requisites:
- Java Installation
- Environment variable JAVA_HOME
Step 1: Download Apache Nifi 1.0 from here.
Step 2: Download the zip file the mirror site as recommended. It would be around 740 MB patiently download it.
Step 3: Extract the folder and I moved nifi-1.0.0 to a root drive for each of access through windows command console.
Step 4: Now go to the command prompt and navigate to the nifi-1.0.0 directory
Step 5: Navigate to the bin directory
Step 6: You will find run run-nifi.bat, execute run-nifi
Step 7: You will see something like the below:
Step 8: Now open your favourite browser and type localhost:9090, I have changed the port from 8080 to 9090 in nifi.properties file. If you want, you can change that as well.
Step 9: Now you can access to the menu to get to know the version of you are running on
Step 10: Happy data flows with Apache Nifi!!!
В этой главе мы узнаем о настройке среды Apache NiFi. Шаги для установки Apache NiFi следующие:
Шаг 1 – Установите текущую версию Java на свой компьютер. Пожалуйста, установите JAVA_HOME на вашем компьютере. Вы можете проверить версию, как показано ниже:
В операционной системе Windows (ОС) (с использованием командной строки) –
> java -version
В ОС UNIX (с использованием терминала):
$ echo $JAVA_HOME
Шаг 2 – Загрузите Apache NiFi с https://nifi.apache.org/download.html
-
Для Windows OS скачать ZIP файл.
-
Для ОС UNIX скачать файл TAR.
-
Для изображений докера перейдите по следующей ссылке https://hub.docker.com/r/apache/nifi/.
Для Windows OS скачать ZIP файл.
Для ОС UNIX скачать файл TAR.
Для изображений докера перейдите по следующей ссылке https://hub.docker.com/r/apache/nifi/.
Шаг 3 – Процесс установки Apache NiFi очень прост. Процесс отличается с ОС –
-
ОС Windows – разархивируйте zip-пакет и установите Apache NiFi.
-
ОС UNIX – Извлеките tar-файл в любом месте, и Logstash будет установлен.
ОС Windows – разархивируйте zip-пакет и установите Apache NiFi.
ОС UNIX – Извлеките tar-файл в любом месте, и Logstash будет установлен.
$tar -xvf nifi-1.6.0-bin.tar.gz
Шаг 4 – Откройте командную строку, перейдите в каталог bin NiFi. Например, C: nifi-1.7.1 bin и выполните файл run-nifi.bat.
C:nifi-1.7.1bin>run-nifi.bat
Шаг 5 – Потребуется несколько минут, чтобы запустить интерфейс NiFi. Пользователь может проверить nifi-app.log, как только пользовательский интерфейс NiFi будет запущен, пользователь может ввести http: // localhost: 8080 / nifi / для доступа к пользовательскому интерфейсу.
Contents
- 1 Введение в Apache NiFi
- 1.1 Что такое Apache NiFi?
- 1.1.1 Почему мы используем Apache NiFi?
- 1.1.2 Особенности Apache NiFi
- 1.1.3 Архитектура Apache NiFi
- 1.1.4 Ключевые концепции Apache NiFi
- 1.1.5 Пользовательский интерфейс Apache NiFi
- 1.1.6 Компоненты Apache NiFi
- 1.1.7 Классификация процессоров в Apache NiFi
- 1.1.8 Как установить Apache NiFi?
- 1.1.9 Как построить поток?
- 1.1.9.1 Добавить и настроить процессоры
- 1.1.10 Преимущества Apache NiFi
- 1.1.11 Недостатки Apache NiFi
- 1.1 Что такое Apache NiFi?
В этом руководстве вы познакомитесь с Apache NiFi и подробно ознакомитесь с его концепциями и архитектурой. Вы обнаружите, насколько просто и адаптируемо создавать конвейеры данных в режиме реального времени и управлять ими.
Apache NiFi — это система потоков данных, основанная на концепциях программирования на основе потоков. Он разработан Агентством национальной безопасности (АНБ), а затем в 2015 году стал официальной частью Apache Project Suite.
Каждые 6-8 недель Apache NiFi выпускает новое обновление для удовлетворения требований пользователей.
Это руководство по Apache NiFi предназначено для начинающих и профессионалов, которые хотят изучить основы Apache NiFi. Он включает в себя несколько разделов, которые предоставляют основные знания о том, как работать с NiFi.
Что такое Apache NiFi?
Apache NiFi — это надежная, масштабируемая и надежная система, которая используется для обработки и распространения данных. Он создан для автоматизации передачи данных между системами.
- NiFi предлагает пользовательский веб-интерфейс для создания, мониторинга и управления потоками данных. NiFi расшифровывается как Niagara Files, который был разработан Агентством национальной безопасности (АНБ), но теперь поддерживается фондом Apache.
- Apache NiFi — это веб-платформа пользовательского интерфейса, в которой нам необходимо определить источник, место назначения и процессор для сбора, хранения и передачи данных соответственно.
- У каждого процессора в NiFi есть отношения, которые используются при соединении одного процессора с другим.
Почему мы используем Apache NiFi?
Apache NiFi имеет открытый исходный код; поэтому он находится в свободном доступе на рынке. Он поддерживает несколько форматов данных, таких как социальные сети, географическое положение, журналы и т. д.
Apache NiFi поддерживает широкий спектр протоколов, таких как SFTP, KAFKA, HDFS и т. д., что делает эту платформу более популярной в ИТ-индустрии. Есть так много причин, чтобы выбрать Apache NiFi. Они следующие.
- Apache NiFi помогает организациям интегрировать NiFi в существующую инфраструктуру.
- Это позволяет пользователям использовать функции экосистемы Java и существующие библиотеки.
- Он обеспечивает управление в режиме реального времени, что позволяет пользователю управлять потоком данных между любым источником, процессором и пунктом назначения.
- Это помогает визуализировать DataFlow на уровне предприятия.
- Это помогает агрегировать, преобразовывать, маршрутизировать, извлекать, прослушивать, разделять и перетаскивать поток данных.
- Это позволяет пользователям запускать и останавливать компоненты на индивидуальном и групповом уровнях.
- NiFi позволяет пользователям извлекать данные из различных источников в NiFi и позволяет им создавать потоковые файлы.
- Он предназначен для масштабирования в кластерах, которые обеспечивают гарантированную доставку данных.
- Визуализируйте и отслеживайте производительность и поведение в бюллетене потока, который предлагает встроенную и информативную документацию.
Особенности Apache NiFi
Особенности Apache NiFi заключаются в следующем:
- Apache NiFi — это пользовательский веб-интерфейс, который предлагает беспрепятственный опыт проектирования, мониторинга, управления и обратной связи.
- Он даже предоставляет модуль происхождения данных, который помогает отслеживать и контролировать данные от источника до места назначения потока данных.
- Разработчики могут создавать свои настраиваемые процессоры и задачи отчетности в соответствии с требованиями.
- Он поддерживает устранение неполадок и оптимизацию потока.
- Он обеспечивает быструю разработку и эффективное тестирование.
- Он обеспечивает шифрование контента и связь по защищенному протоколу.
- Он поддерживает буферизацию всех данных в очереди и обеспечивает возможность обратного давления, поскольку очереди могут достигать заданных пределов.
- Apache NiFi предоставляет систему пользователю, пользователя системе и функции безопасности мультитенантной аутентификации.
Архитектура Apache NiFi
Архитектура Apache NiFi включает веб-сервер, контроллер потока и процессор, работающий на виртуальной машине Java (JVM).
Он имеет три репозитория, такие как репозиторий FlowFile, репозиторий контента и репозиторий происхождения.
- Веб сервер
Веб-сервер используется для размещения API управления и контроля на основе HTTP.
- Контроллер потока
Контроллер потока — это мозг операции. Он предлагает потоки для запуска расширений и управляет расписанием, когда расширения получают ресурсы для запуска.
- Расширения
Несколько типов расширений NiFi определены в других документах. Расширения используются для работы и выполнения в JVM.
- Репозиторий FlowFile
Репозиторий FlowFile включает текущее состояние и атрибут каждого FlowFile, который проходит через поток данных NiFi.
Он отслеживает состояние, которое активно в потоке в данный момент. Стандартным подходом является непрерывный журнал упреждающей записи, который находится в описанном разделе диска.
- Репозиторий контента
Репозиторий контента используется для хранения всех данных, присутствующих в файлах потока. Подход по умолчанию — довольно простой механизм, который хранит блоки данных в файловой системе.
Чтобы уменьшить конкуренцию за любой отдельный том, укажите более одного места хранения файловой системы, чтобы получить разные разделы.
- Репозиторий происхождения
В репозитории происхождения хранятся все данные о событиях происхождения. Конструкцию репозитория можно подключить к реализации по умолчанию, использующей один или несколько томов физических дисков.
Данные о событиях индексируются и доступны для поиска в каждом месте.
Начиная с версии NiFi 1.0, включен шаблон кластеризации с нулевым лидером. Каждый узел в кластере выполняет аналогичные задачи с данными, но работает с другим набором данных.
Apache Zookeeper выбирает один узел в качестве координатора кластера. Координатор кластера используется для подключения и отключения узлов. Кроме того, в каждом кластере есть один основной узел.
Ключевые концепции Apache NiFi
Ключевые концепции Apache NiFi заключаются в следующем:
- Поток : Поток создается для подключения различных процессоров для совместного использования и изменения данных, которые требуются от одного источника данных к другому месту назначения.
- Соединение : Соединение используется для соединения процессоров, которые действуют как очередь для хранения данных в очереди, когда это необходимо. Он также известен как ограниченный буфер в терминах программирования на основе потоков (FBP). Это позволяет нескольким процессам взаимодействовать с разной скоростью.
- Процессоры . Процессор — это модуль Java, который используется либо для извлечения данных из исходной системы, либо для их сохранения в целевой системе. Для добавления атрибута или изменения содержимого в FlowFile можно использовать несколько процессоров. Он отвечает за отправку, слияние, маршрутизацию, преобразование, обработку, создание, разделение и получение потоковых файлов.
- FlowFile : FlowFile — это базовая концепция NiFi, которая представляет собой единый объект данных, выбранных из исходной системы в NiFi. Это позволяет пользователям вносить изменения в Flowfile, когда он перемещается из исходного процессора в место назначения. Различные события, такие как создание, получение, клонирование и т. д., которые выполняются в Flowfile с использованием разных процессоров в потоке.
- Событие : событие представляет собой изменение в Flowfile при обходе потоком NiFi. Такие события отслеживаются в источнике данных.
- Происхождение данных : Происхождение данных — это репозиторий, который позволяет пользователям проверять данные, касающиеся файла Flow, и помогает в устранении неполадок, если возникают какие-либо проблемы при обработке файла Flow.
- Группа процессов : группа процессов представляет собой набор процессов и их соответствующих соединений, которые могут получать данные от входного порта и отправлять их через выходные порты.
Пользовательский интерфейс Apache NiFi
Apache NiFi — это веб-платформа, к которой пользователь может получить доступ через веб-интерфейс. Пользовательский интерфейс NiFi позволяет создавать, визуализировать, отслеживать и редактировать автоматизированные потоки данных.
Пользовательский интерфейс разделен на несколько сегментов, и каждый сегмент отвечает за разные функции приложения. Эти сегменты включают в себя различные типы команд, которые обсуждаются следующим образом:
Когда диспетчер потока данных (DFM) переходит к пользовательскому интерфейсу (UI), на экране появляется пустой холст, на котором можно построить поток данных.
На рисунке панель инструментов компонентов располагается в верхней левой части экрана. Он включает компоненты, которые позволяют перетаскивать элементы на холст для создания потока данных.
Строка состояния предоставляет информацию о количестве активных потоков, объеме существующих данных, количестве существующих групп удаленных процессов, количестве существующих процессоров, количестве существующих групп процессов с управлением версиями и отметке времени последнего обновления всей информации.
Глобальное меню находится в правой части пользовательского интерфейса и содержит параметры, используемые для управления существующими компонентами на холсте.
Строка поиска используется для поиска информации о компонентах в DataFlow. Палитра навигации используется для панорамирования холста, а также для увеличения и уменьшения масштаба.
Вид с высоты птичьего полета в палитре навигации предлагает высокоуровневое представление потока данных и позволяет охватить большие части потока данных.
Палитра Operate в левой части экрана содержит различные кнопки, которые используются DFM для управления потоком, а также для доступа и настройки свойств системы.
Компоненты Apache NiFi
Ниже перечислены компоненты Apache NiFi:
Процессор
Пользователи могут перетащить значок процессора на холст и добавить необходимый процессор для потока данных в NiFi.
Входной порт
Входной порт используется для получения данных от процессора, который недоступен в группе процессов. Когда значок ввода перетаскивается на холст, это позволяет добавить порт ввода в поток данных.
Выходной порт
Выходной порт используется для передачи данных процессору, которого нет в группе процессов. Когда значок выходного порта перетаскивается на холст, он позволяет добавить выходной порт.
Группа процессов
Группа процессов помогает добавлять группы процессов в холст NiFi. Когда значок группы процессов перетаскивается на холст, он позволяет ввести имя группы процессов, а затем он добавляется на холст.
Группа удаленных процессов
Воронка
Воронка используется для отправки вывода процессора на различные процессоры. Пользователи могут перетащить значок воронки на холст, чтобы добавить воронку в поток данных.
Это позволяет добавить группу удаленных процессов на холст NiFi.
Шаблон
Значок шаблона используется для добавления шаблона потока данных на холст NiFi. Это помогает повторно использовать поток данных в одном или разных экземплярах.
После перетаскивания он позволяет пользователям выбирать существующий шаблон для потока данных.
Этикетка
Они используются для добавления текста на холст NiFi относительно любого компонента, доступного в NiFi. Он предоставляет цвета, используемые пользователем для добавления эстетического ощущения.
Классификация процессоров в Apache NiFi
Ниже приводится классификация процессов Apache NiFi.
- Процессоры AWS
Процессоры AWS отвечают за связь с системой веб-сервисов Amazon. Такими обработчиками категорий являются PutSNS, FetchS3Object, GetSQS, PutS3Object и т. д.
- Процессоры извлечения атрибутов
Процессоры извлечения атрибутов отвечают за извлечение, изменение и анализ обработки атрибутов FlowFile в потоке данных NiFi.
Примерами являются ExtractText, EvaluateJSONPath, AttributeToJSON, UpdateAttribute и т. д.
- Процессоры доступа к базе данных
Процессоры доступа к базе данных используются для выбора или вставки данных, а также для выполнения и подготовки других операторов SQL из базы данных.
Такие процессоры используют настройки контроллера подключения к данным Apache NiFi. Примерами являются PutSQL, ListDatabaseTables, ExecuteSQL, PutDatabaseRecord и т. д.
- Процессоры приема данных
Процессоры приема данных используются для приема данных в поток данных, таких как начальная точка любого потока данных в Apache NiFi. Примеры: GetFile, GetFTP, GetKAFKA, GetHTTP и т. д.
- Процессоры преобразования данных
Процессоры преобразования данных используются для изменения содержимого FlowFiles.
Их можно использовать для замены данных FlowFile, когда пользователю необходимо отправить FlowFile в формате HTTP для вызова процессора HTTP. Примеры: JoltTransformJSON ReplaceText и т. д.
- HTTP-процессоры
Процессоры HTTP работают с вызовами HTTP и HTTPS. Примеры: InvokeHTTP, ListenHTTP, PostHTTP и т. д.
- Процессоры маршрутизации и посредничества
Процессоры маршрутизации и посредничества используются для маршрутизации FlowFiles к разным процессорам в зависимости от информации в атрибутах FlowFiles.
Он отвечает за управление потоками данных NiFi. Примерами являются RouteOnContent, RouteText, RouteOnAttribute и т. д.
- Отправка процессоров данных
Отправляющие процессоры данных — это конечные процессоры в потоке данных. Он отвечает за хранение или отправку данных в пункт назначения.
После отправки данных процессор DROP FlowFile с успешным отношением. Примеры: PutKAFKA, PutFTP, PutSFTP, PutEmail и т. д.
- Процессоры разделения и агрегации
Процессоры разделения и агрегации используются для разделения и объединения контента, доступного в потоке данных. Примеры: SplitXML, SplitJSON, SplitContent, MergeContent и т. д.
- Процессоры системного взаимодействия
Процессоры системного взаимодействия используются для запуска процесса в любой операционной системе. Он также запускает сценарии на разных языках с разными системами.
Примерами являются ExecuteScript, ExecuteStreamCommand, ExecuteGroovyScript, ExecuteProcess и т. д.
Как установить Apache NiFi?
Чтобы установить Apache NiFi, выполните следующие действия.
1. Нажмите на ссылку и загрузите последнюю версию Apache NiFi.
2. В разделе «Двоичные файлы» щелкните zip-файл установки приложения NiFi для ОС Windows.
3. Приведенная выше ссылка перенаправляет вас на новую страницу. Здесь вы получите ссылку для загрузки Apache NiFi.
4. После загрузки файла распакуйте его.
5. Откройте папку bin (т.е. nifi-1.12.1 > bin) и нажмите run-nifi и запустите для запуска.
6. Панель инструментов NiFi запустится в браузере после успешной установки. Панель инструментов Apache известна как холст, где мы создаем потоки данных.
Как построить поток?
Чтобы построить поток, нам нужно добавить два процессора на холст и настроить их. Давайте посмотрим, как добавить и настроить процессоры.
Добавить и настроить процессоры
Чтобы добавить и настроить процессоры, выполните следующие действия.
- Перейдите в раздел компонентов на панели инструментов и перетащите процессор. Откроется окно Добавить процессор со списком процессоров.
- Найдите нужный процессор или сократите список процессоров в зависимости от категории и функциональности.
- Нажмите на процессор, который вы хотите выбрать, и добавьте его на холст, дважды щелкнув процессор или нажав «Добавить».
- Если вы знаете имя процессора, вы можете ввести его в строке фильтра. Добавьте еще один процессор на холст.
- Вы увидите, что оба процессора недействительны, потому что они имеют предупреждающее сообщение, указывающее, что требования должны быть настроены, чтобы сделать процессоры действительными и выполняться.
- Чтобы удовлетворить требования предупреждения, нам нужно настроить и запустить процессоры.
Преимущества Apache NiFi
Преимущества Apache NiFi заключаются в следующем:
- Apache NiFi предлагает пользовательский веб-интерфейс (UI). Чтобы он мог работать в веб-браузере, используя порт и локальный хост.
- В веб-браузере Apache NiFi использует протокол HTTPS для обеспечения безопасного взаимодействия с пользователем.
- Он поддерживает протокол SFTP, который позволяет получать данные с удаленных компьютеров.
- Он также предоставляет политики безопасности на уровне группы процессов, уровне пользователя и других модулях.
- NiFi поддерживает все устройства, на которых работает Java.
- Он обеспечивает управление в режиме реального времени, что упрощает перемещение данных между источником и получателем.
- Apache NiFi поддерживает кластеризацию, поэтому он может работать на нескольких узлах с одним и тем же потоком, обрабатывая разные данные, что повышает производительность обработки данных.
- NiFi поддерживает более 188 процессоров, и пользователь может создавать собственные плагины для поддержки различных типов систем данных.
Недостатки Apache NiFi
Ниже приведены недостатки Apache NiFi.
- У Apache NiFi есть проблема с сохранением состояния в случае переключения основного узла, из-за которого процессоры не могут получать данные из исходных систем.
- При внесении пользователем каких-либо изменений узел отключается от кластера, а затем файл flow.xml становится недействительным. Узел не может подключиться к кластеру, пока администратор не скопирует XML-файл вручную с узла.
- Чтобы работать с Apache NiFi, вы должны хорошо разбираться в базовой системе.
- Он предлагает уровень темы, и авторизации SSL может быть недостаточно.
- Требуется поддерживать цепочку хранения данных.
Вывод
И наконец, Apache NiFi используется для автоматизации и управления потоками данных между системами. Как только данные извлекаются из внешнего источника, они представляются как FlowFile в архитектуре Apache NiFi.
Я надеюсь, что это руководство поможет вам разработать и настроить потоки данных в Apache NiFi. Теперь ваша очередь исследовать NiFi. Если возникнут какие-либо запросы, не стесняйтесь оставлять свой запрос в сеансе комментариев.
In this chapter, we will learn about the environment setup ofApache NiFi. The steps for installation of Apache NiFi are as follows −
Step 1 − Install the current version of Java in your computer. Please set theJAVA_HOME in your machine. You can check the version as shown below:
In Windows Operating System (OS) (using command prompt) −
> java -version
In UNIX OS (Using Terminal):
$ echo $JAVA_HOME
Step 2 − DownloadApache NiFi from https://nifi.apache.org/download.html
-
For windows OSdownload ZIP file.
-
For UNIX OSdownload TAR file.
-
For docker images,go to the following link https://hub.docker.com/r/apache/nifi/.
Step 3 − The installation process for Apache NiFi is very easy. The process differs with the OS −
-
Windows OS − Unzip the zip package and the Apache NiFi is installed.
-
UNIX OS − Extract tar file in any location and the Logstash is installed.
$tar -xvf nifi-1.6.0-bin.tar.gz
Step 4 − Open command prompt, go to the bin directory of NiFi. For example, C:nifi-1.7.1bin, and execute run-nifi.bat file.
C:nifi-1.7.1bin>run-nifi.bat
Step 5 − It will take a few minutes to get the NiFi UI up. A user cancheck nifi-app.log, once NiFi UI is up then, a user can enter http://localhost:8080/nifi/ to access UI.
In this chapter, we will learn about the environment setup ofApache NiFi. The steps for installation of Apache NiFi are as follows −
Step 1 − Install the current version of Java in your computer. Please set theJAVA_HOME in your machine. You can check the version as shown below:
In Windows Operating System (OS) (using command prompt) −
> java -version
In UNIX OS (Using Terminal):
$ echo $JAVA_HOME
Step 2 − DownloadApache NiFi from https://nifi.apache.org/download.html
-
For windows OSdownload ZIP file.
-
For UNIX OSdownload TAR file.
-
For docker images,go to the following link https://hub.docker.com/r/apache/nifi/.
Step 3 − The installation process for Apache NiFi is very easy. The process differs with the OS −
-
Windows OS − Unzip the zip package and the Apache NiFi is installed.
-
UNIX OS − Extract tar file in any location and the Logstash is installed.
$tar -xvf nifi-1.6.0-bin.tar.gz
Step 4 − Open command prompt, go to the bin directory of NiFi. For example, C:nifi-1.7.1bin, and execute run-nifi.bat file.
C:nifi-1.7.1bin>run-nifi.bat
Step 5 − It will take a few minutes to get the NiFi UI up. A user cancheck nifi-app.log, once NiFi UI is up then, a user can enter http://localhost:8080/nifi/ to access UI.
Время прочтения
16 мин
Просмотры 4.3K
Настройка и запуск Apache NiFi и Zookeeper, настройка авторизации по LDAP и работа NiFi по HTTPS, настройка и запуск Apache NiFi Registry, пример запуска NiFi c Kerberos — вот темы, которые будут в этой статье.
Не вижу смысла полностью рассказывать, как настраивать NiFi и NiFi Registry — есть официальная документация и мануалы в сети. Я сосредоточился на ошибках, информации по которым нет, в том числе и на английском. При самостоятельном поиске решения, это реально масса времени. Я провел месяцы в режиме DEBUG и TRACE, чтобы понять, как всё сделать правильно. Готов поделится.
На всякий случай, NiFi (Niagara Files) – система для обработки потоковых данных. У нас она читает сообщения из Кафки и кладет в базу данных без написания кода.
В ходе работы мне пришлось настраивать и разворачивать кластер NiFi несколько раз, на разные виртуальные машины. Для этого у нас в компании уже было создано множество автоматизаций на Ansible, которые помогают в данный момент разворачивать и настраивать кластеры NiFi намного быстрее.
Настройка и запуск Apache NiFi
В Группе НЛМК настройка и запуск NiFi происходит с помощью Ansible Playbooks, которые на «голые» ВМ ставят софт, размечают диски, настраивают экспортеры, генерируют сертификаты, устанавливают zookepeer, а далее и сам NiFi.
Я расскажу, как аутентификация пользователей будет происходить с помощью LDAP, поэтому по умолчанию у вас должен быть сервер каталогов AD (не буду объяснять, как АD настраивать, у многих это уже есть).
Так же для запуска NiFi по HTTPS необходимо создать сертификаты. Для этого простого шага можете воспользоваться документацией здесь Securing NiFi with Provided Certificates. В нашей компании сертификатами занимаются отдельные люди, поэтому на этапе установки сертификаты у меня уже были. Тут не буду объяснять, как их сгенерить, лишь расскажу, как настроить identity mapping и установить связь между NiFi и NiFi Registry.
Разворачивать все сервисы мы будем с помощью docker. Для работы NiFi в режиме кластера необходимо подготовить и запустить zookeeper.
Настройка и запуск Zookeeper
NiFi в режиме кластера не запустится без zookeeper. Вот пример, как настроить и запустить zookeeper быстро.
---
version: '3.5'
services:
zookeeper:
image: 'bitnami/zookeeper:3.7.0'
hostname: nifi-test-node-1.mycompany
restart: unless-stopped
ports:
- '2181:2181'
- '2888:2888'
- '3888:3888'
env_file:
- zookeeper.env
volumes:
- zookeeper_data:/bitnami
volumes:
zookeeper_data:
driver: local
...
Для образа bitnami/ zookeeper необходимо настроить параметры, список которых можно взять тут.
Для безопасности включим авторизацию, настроив список параметров. Ниже в комментариях я подписал значение каждой переменной.
# ID сервера зоокипера
ZOO_SERVER_ID=1
# Запрещаем присоединяться анонимно
ALLOW_ANONYMOUS_LOGIN=NO
# Включаем авторизацию
ZOO_ENABLE_AUTH=yes
# Указываем пользователей сервера
ZOO_SERVER_USERS=user1,user1
# Указываем пароли для пользователей сервера
ZOO_SERVER_PASSWORDS=password1,password2
# Пользователь который будет использоваться при авторизации других нод Zookeeper
ZOO_CLIENT_USER=user1
# Пароль от клиентского пользователя
ZOO_CLIENT_PASSWORD=password1
# Необходимо правильно указать другие ноды Zookeeper и ZOO_SERVER_ID для корректного коннекта между нодами
ZOO_SERVERS=nifi-test-node-1.mycompany:2888:3888::1,nifi-test-node-2.mycompany:2888:3888::2,nifi-test-node-3.mycompany:2888:3888::3
ZOO_ENABLE_PROMETHEUS_METRICS=YES
После того, как zookeeper запустится и все ноды войдут в режим кластера, в логах появятся сообщения об успешном коннекте каждой ноды. Если этого не произойдет, то NiFi будет выдавать ошибку о том, что он не может подключиться к Zookeeper.
Разберем ошибки, которые могут быть при запуске Zookeeper:
- Ошибка Zookeeper «
Cannot open channel to 2 at election address nifi-test-node-2.mycompany/ip:3888 java.net.ConnectException: Connection refused (Connection refused)
» ошибка говорит о том, что либо нодаzookeeper nifi-test-node-2.mycompany
еще не поднята. Либо вторая нода считает себя другой 1 или 3, поэтому zookeeper не может войти в режим кластера. Для решения этой проблемы необходимо обратить внимание на параметрыZOO_SERVER_ID
иZOO_SERVERS
, вZOO_SERVERS
необходимо чтобы был указан ID у ноды. - Если же вы используете другой zookeeper то необходимо обратить внимание на zoo.cfg а именно на
server.1=nifi-test-node-1.mycompany:2888:3888 server.2=nifi-test-node-2.mycompany:2888:3888
и так далее. А также на значение файла /data/myid значение в файле должно соответствовать номеру ноды zookeeper. - Ошибка NiFi (возникает, если неправильно настроить Zookeeper) «
WARN [main] o.a.nifi.controller.StandardFlowService There is currently no Cluster Coordinator. This often happens upon restart of NiFi when running an embedded ZooKeeper. Will register this node to become the active Cluster Coordinator and will attempt to connect to cluster again.
» Данная ошибка возникает в NiFi, когда он не может подключиться к указанному zookeeper, и пытается подключится к внутреннему, но у nifi отключен внутренний zookeeper (описание ошибки в системе на английском немного некорректное). Можно проверить внутри этого файлаconf/nifi.properties nifi.state.management.embedded.zookeeper.start=false
.Т. е. эта ошибка говорит о двух ситуациях: 1) когда nifi не может подключится к внутреннему zookeeper – это то, что и написано в описании ошибки на английском 2) но может быть и второй случай, о котором описание умалчивает: когда nifi не может подключится к внешнему zookeeper.
Для решения второго случая необходимо проверить параметры в NiFi conf/nifi.properties:
nifi.zookeeper.connect.string=nifi-test-node-1.mycompany:2181,nifi-test-node-1.mycompany:2181,nifi-test-node-1.mycompany:2181
Настройка и запуск Apache NiFi
После успешного запуска Zookeeper, перейдем к настройкам параметров самого кластера NiFi. В данном разделе я разберу ошибки, которые получим, если неправильно настроим кластер.
Разберем файлы конфигурации NiFi для работы по LDAP:
1) conf/nifi.properties
Вот блоки, которые необходимо настроить, чтобы NiFi запустился без ошибок.
# ... - Можно оставлять стандартные настройки без изменений
# Site to Site properties
# ...
# Значение данного параметра ставим на True
nifi.remote.input.secure=True
# web properties #
# При запуске по https необходимо пропустить параметры nifi.web.http.host и nifi.web.http.port и оставить их пустыми
nifi.web.http.host=
nifi.web.http.port=
nifi.web.http.network.interface.default=
# При запуске по https необходимо заполнить параметры nifi.web.https.host и nifi.web.https.port
nifi.web.https.host=nifi-test-node-1.mycompany
nifi.web.https.port=9091
nifi.web.https.network.interface.default=
#...
# Если у вас есть балансировщик на ноды NiFi необходимо здесь указать web proxy host
nifi.web.proxy.host=my-test-nifi-proxy.com
#...
# security properties #
# До NiFi 1.14 значение этого параметра можно было оставлять пустым и ваш flow файл конфигурации бы не шифровался, и NiFi работал бы в нормальном режиме
# C версией NiFi выше 1.14 необходимо указать данный ключ иначе NiFi выдаст ошибку.
nifi.sensitive.props.key=<ваше_значение_ключа>
#...
# Так же необходимо настроить пути до сертификатов и их пароли для запуска NiFi в secure режиме
nifi.security.keystore=/etc/ssl/keystore.jks
nifi.security.keystoreType=JKS
nifi.security.keystorePasswd=<пароль>
nifi.security.keyPasswd=<пароль>
nifi.security.truststore=/etc/ssl/truststore.jks
nifi.security.truststoreType=JKS
nifi.security.truststorePasswd=<пароль>
nifi.security.user.authorizer=managed-authorizer
nifi.security.allow.anonymous.authentication=false
# Обратите значение на этот параметр
nifi.security.user.login.identity.provider=ldap-provider
#...
# Identity Mapping Properties #
# Данные параметры необходимы для более быстрой нормализации идентификаторов пользователей
# Данная настройка зависит только от вашей организации. Подробная докуемнтация тут https://docs.cloudera.com/HDPDocuments/HDF3/HDF-3.2.0/nifi-system-properties/content/identity-mapping-properties.html
nifi.security.identity.mapping.pattern.dn=^L=(.*?), ST=(.*?), C=(.*?), OU=(.*?), O=(.*?),.*?$
nifi.security.identity.mapping.value.dn=$4@$5
nifi.security.identity.mapping.transform.dn=LOWER
# cluster node properties (only configure for cluster nodes) #
# Для запуска NiFi в режиме кластера необходимо указать значение True в nifi.cluster.is.node и настроить дополнительные параметры по вашим приоритетам
# иначе нода NiFi не будет прицепляться к кластеру
nifi.cluster.is.node=True
nifi.cluster.node.address=nifi-test-node-1.mycompany
nifi.cluster.node.protocol.port=9088
nifi.cluster.node.protocol.threads=10
nifi.cluster.node.protocol.max.threads=50
nifi.cluster.node.event.history.size=25
nifi.cluster.node.connection.timeout=5 sec
nifi.cluster.node.read.timeout=5 sec
nifi.cluster.node.max.concurrent.requests=100
nifi.cluster.firewall.file=
nifi.cluster.flow.election.max.wait.time=5 mins
nifi.cluster.flow.election.max.candidates=
# zookeeper properties, used for cluster management #
# При запуске на внешнем zookeeper,настройку которого мы обсуждали ранее необходимо заполнить параметры nifi.zookeeper.*
nifi.zookeeper.connect.string=nifi-test-node-1.mycompany:2181,nifi-test-node-2.mycompany:2181,nifi-test-node-3.mycompany:2181
nifi.zookeeper.connect.timeout=10 secs
nifi.zookeeper.session.timeout=10 secs
nifi.zookeeper.root.node=/nifi
- При запуске по https необходимо пропустить параметры nifi.web.http.host и nifi.web.http.port и оставить их пустыми.
- При запуске по https необходимо заполнить параметры nifi.web.https.host и nifi.web.https.port.
- Если параметры, указанные выше, останутся заполненными, то NiFi выдаст ошибку «
IllegalStateException: Only one of the HTTP and HTTPS connectors can be configured at one time
«. - До NiFi 1.14 значение этого
nifi.sensitive.props.key=<ваше_значение_ключа>
параметра можно было оставлять пустым и ваш flow файл конфигурации бы не шифровался, и NiFi работал бы в нормальном режиме.C версией NiFi выше 1.14 необходимо указать данный ключ иначе NiFi выдаст ошибку «
IllegalArgumentException: There was an issue decrypting protected properties
« - Параметры nifi.security.identity.mapping.* зависят от вашей компании, но их необходимо заполнить для корректной аутентификации пользователей и самих нод найфая друг с другом. Документация.
- Для запуска NiFi в режиме кластера необходимо указать значение True в nifi.cluster.is.node и настроить дополнительные параметры nifi.cluster.node.* по вашим приоритетам иначе нода NiFi не будет прицепляться к кластеру.
- При запуске на внешнем zookeeper, настройку которого мы обсуждали ранее, необходимо заполнить параметры nifi.zookeeper.*
2) conf/authorizers.xml
В файле authorizers.xml определяются значения параметров, влияющих на способ представления пользователей и групп в NiFi, и определяется базовый администратор с которого можно начать настройку кластера.
Документация
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<authorizers>
<userGroupProvider>
<identifier>file-user-group-provider</identifier>
<class>org.apache.nifi.authorization.FileUserGroupProvider</class>
<property name="Users File">./conf/users.xml</property>
<property name="Legacy Authorized Users File"></property>
<property name="Initial User Identity 1">nifi_habr@test</property>
<property name="Initial User Identity 2">nifiadmin</property>
</userGroupProvider>
<userGroupProvider>
<identifier>ldap-user-group-provider</identifier>
<class>org.apache.nifi.ldap.tenants.LdapUserGroupProvider</class>
<property name="Authentication Strategy">SIMPLE</property>
<property name="Manager DN">cn=nifiadmin,ou=nifi-habr,ou=nifi,ou=test,ou=example,dc=com,dc=mycompany</property>
<property name="Manager Password">pass</property>
<!--
TLS параметры если необходимо
-->
<property name="Referral Strategy">FOLLOW</property>
<property name="Connect Timeout">10 secs</property>
<property name="Read Timeout">10 secs</property>
<property name="Url">ldaps://mycompany.com:10109</property>
<property name="Page Size"></property>
<property name="Sync Interval">5 mins</property>
<property name="Group Membership - Enforce Case Sensitivity">false</property>
<property name="User Search Base">DC=com,DC=mycompany</property>
<property name="User Object Class">user</property>
<property name="User Search Scope">SUBTREE</property>
<property name="User Search Filter">filter_users</property>
<property name="User Identity Attribute">SamAccountName</property>
<property name="User Group Name Attribute"></property>
<property name="User Group Name Attribute - Referenced Group Attribute"></property>
<property name="Group Search Base">OU=nifi-habr,OU=nifi,OU=test,OU=example,DC=com,DC=mycompany</property>
<property name="Group Object Class">group</property>
<property name="Group Search Scope">SUBTREE</property>
<property name="Group Search Filter">filter_groups</property>
<property name="Group Name Attribute">cn</property>
<property name="Group Member Attribute">member</property>
<property name="Group Member Attribute - Referenced User Attribute"></property>
</userGroupProvider>
<userGroupProvider>
<identifier>composite-configurable-user-group-provider</identifier>
<class>org.apache.nifi.authorization.CompositeConfigurableUserGroupProvider</class>
<property name="Configurable User Group Provider">file-user-group-provider</property>
<property name="User Group Provider 1">ldap-user-group-provider</property>
</userGroupProvider>
<accessPolicyProvider>
<identifier>file-access-policy-provider</identifier>
<class>org.apache.nifi.authorization.FileAccessPolicyProvider</class>
<property name="User Group Provider">composite-configurable-user-group-provider</property>
<property name="Authorizations File">./conf/authorizations.xml</property>
<property name="Initial Admin Identity">nifiadmin</property>
<property name="Legacy Authorized Users File"></property>
<property name="Node Identity 1">nifi_habr@test</property>
<property name="Node Group"></property>
<property name="Legacy Authorized Users File"></property>
</accessPolicyProvider>
<authorizer>
<identifier>managed-authorizer</identifier>
<class>org.apache.nifi.authorization.StandardManagedAuthorizer</class>
<property name="Access Policy Provider">file-access-policy-provider</property>
<property name="Initial Admin Identity">nifiadmin</property>
<property name="Legacy Authorized Users File"></property>
<property name="Node Identity 1">nifi_habr@test</property>
</authorizer>
</authorizers>
3) conf/login-identity-providers.xml
В данном файле мы указываем NiFi, какой провайдер будет использоваться для входа пользователей в систему. В данном случае мы используем LDAP.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<loginIdentityProviders>
<provider>
<identifier>ldap-provider</identifier>
<class>org.apache.nifi.ldap.LdapProvider</class>
<property name="Authentication Strategy">SIMPLE</property>
<property name="Manager DN">cn=nifiadmin,ou=nifi-habr,ou=nifi,ou=test,ou=example,dc=com,dc=mycompany</property>
<property name="Manager Password">pass</property>
<!--
TLS параметры если необходимо
-->
<property name="Referral Strategy">FOLLOW</property>
<property name="Connect Timeout">10 secs</property>
<property name="Read Timeout">10 secs</property>
<property name="Url">ldaps://mycompany.com:10109</property>
<property name="User Search Base">DC=com,DC=mycompany</property>
<property name="User Search Filter">(sAMAccountName={0})</property>
<property name="Identity Strategy">USE_USERNAME</property>
<property name="Authentication Expiration">12 hours</property>
</provider>
</loginIdentityProviders>
При авторизации пользователя, NiFi будет обращаться к DC=com,DC=mycompany
идентифицировать пользователя по его имени USE_USERNAME
и хранить авторизацию данное время 12 hours
. Но если данного пользователя не будет в authorizers.xml filter_users
, то, скорее всего, у него не будет доступа даже к UI.
После настройки всех проблемных мест NiFi должен запуститься без особых проблем.
Настройка и запуск Apache NiFi Registry
Настройка и запуск NiFi Registry не отличается от настройки NiFi. Необходимо точно так же настроить все файлы конфигурации.
Особое внимание следует обратить на параметры в nifi-registry.properties при связи NiFi и NiFi Registry. Именно в эти параметры влияют на их связь.
#...
# Identity Mapping Properties #
# Данные параметры необходимы для более быстрой нормализации идентификаторов пользователей
# Данная настройка зависит только от вашей организации. Подробная документация тут https://docs.cloudera.com/HDPDocuments/HDF3/HDF-3.2.0/nifi-system-properties/content/identity-mapping-properties.html
nifi.registry.security.identity.mapping.pattern.dn=^L=(.*?), ST=(.*?), C=(.*?), OU=(.*?), O=(.*?),.*?$
nifi.registry.security.identity.mapping.value.dn=$4@$5
nifi.registry.security.identity.mapping.transform.dn=LOWER
L=NLMK-IT, ST=Moscow, C=RU, OU=nifi, O=prod, EMAILADDRESS=sre-team@nlmk.com, CN=000_0
Запустим NiFi и NiFi registry.
Добавляем наш NiFi Registry в список доступных Settings → Controller Settings → Registry Clients.
Если при попытке сохранить изменения в NiFi Registry мы получаем ошибку: Unable to obtain listing of buckets: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
. При этом в пользовательском интерфейсе из доступных бакетов у вас будет «No Available Buckets». Чтобы убрать ошибку, здесь необходимо добавить truststore NiFi Registry в truststore NiFi и truststore NiFi в truststore NiFi Registry для запросов между кластерами (добавить доверительные сертификаты друг в друга).
Можете воспользоваться документацией. После этого данная ошибка у вас пропадет.
«No Available Buckets» самая распространенная ошибка, на которую нет нормального объяснения.
Попробую объяснить на пальцах, почему так происходит.
В официальной документации указано, что необходимо создать пользователя с правами Proxy User Request, но нет примера как этого пользователя создавать.
Рассмотрим сертификат NiFi, после его создания, владелец выглядит так:
L=mycompany, ST=Moscow, C=RU, OU=nifi_habr, O=test, EMAILADDRESS=nifihabr@mycompany.com, CN=nifi-test-node-1.mycompany
Подгоним данное значение под паттерн маппинга из файла nifi-registry.properties:
^L=(.*?), ST=(.*?), C=(.*?), OU=(.*?), O=(.*?),.*?$
$4@$5
В итоге, когда наш кластер NiFi будет ходить в NiFi Registry, NiFi Registry, будет его аутентифицировать по значению nifi_habr@test, поэтому нам необходимо создать этого пользователя в NiFi Registry, выдать ему права Proxy User Request. Так же данный маппинг вы можете настроить по своему усмотрению, ведь теперь вы знаете, что это значит.
Настройка и запуск NiFi c протоколом взаимодействия Kerberos
Перед тем как настроить запуск NiFi c Kerberos необходимо запустить кластер zookeeper с Kerberos.
Допустим мы уже имеем созданные кейтабы для zookeeper и nifi такого вида.
Keytab name: FILE:/etc/security/keytabs/zookeeper_server.keytab
KVNO Timestamp Principal
---- ------------------- ------------------------------------------------------
1 11.11.2021 15:45:18 zookeeper/nifi-test-node-1.mycompany@mycompany.com (aes256-cts-hmac-sha1-96)
1 11.11.2021 16:13:04 zookeeper/nifi-test-node-1.mycompany@mycompany.com (aes128-cts-hmac-sha1-96)
Keytab name: FILE:/etc/security/keytabs/nifi_server.keytab
KVNO Timestamp Principal
---- ------------------- ------------------------------------------------------
1 11.11.2021 16:52:43 nifi/nifi-test-node-1.mycompany@mycompany.com (aes256-cts-hmac-sha1-96)
1 11.11.2021 16:52:43 nifi/nifi-test-node-1.mycompany@mycompany.com (aes128-cts-hmac-sha1-96)
Здесь я хочу заметить что тип шифрования должен совпадать с параметрами указанными в файле krb5.conf (у нас настроено так):
default_tgs_enctypes = aes256-cts aes128-cts rc4-hmac
default_tkt_enctypes = aes256-cts aes128-cts rc4-hmac
permitted_enctypes = aes256-cts aes128-cts rc4-hmac
Иначе соединения по протоколу Kerberos не произойдет.
В этом тоже есть некоторые сложности, выложу пример docker-compose файлов.
Разберем настройку Zookeeper.
---
version: '3.7'
services:
zookeeper:
image: zookeeper
restart: always
hostname: nifi-test-node-1.mycompany
ports:
- 2181:2181
- 2888:2888
- 3888:3888
networks:
- zk
environment:
JVMFLAGS: "-Djava.net.preferIPv4Stack=true -Djava.security.auth.login.config=/conf/jaas.conf -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.rmi.port=9010 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djute.maxbuffer=4194304 -Dsun.security.krb5.disableReferrals=true -Djdk.tls.ephemeralDHKeySize=2048 -Dzookeeper.multiAddress.enabled=true"
volumes:
- zk_data:/data
- zk_datalog:/datalog
- zk_logs:/logs
- /etc/security/keytabs/zookeeper_server.keytab:/zookeeper.keytab:ro
- /etc/krb5.conf:/etc/krb5.conf:ro
- ./jaas.conf:/conf/jaas.conf:ro
- ./zoo.cfg:/conf/zoo.cfg:ro
volumes:
zk_data: {}
zk_datalog: {}
zk_logs: {}
networks:
zk:
name: zk
...
В данной настройке необходимо установить флаги JVM и прокинуть дополнительные конфигурационные файлы, связанные с Kerberos.
Можете взять файлы настройки в качестве примера, значения их можете посмотреть в документации.
Server {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/zookeeper.keytab"
storeKey=true
useTicketCache=false
principal="zookeeper/nifi-test-node-1.mycompany@mycompany.com";
};
QuorumServer {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/zookeeper.keytab"
storeKey=true
useTicketCache=false
principal="zookeeper/nifi-test-node-1.mycompany@mycompany.com";
};
QuorumLearner {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab="/zookeeper.keytab"
storeKey=true
useTicketCache=false
principal="zookeeper/nifi-test-node-1.mycompany@mycompany.com";
};
jaasLoginRenew=3600000
requireClientAuthScheme=sasl
tickTime=2000
initLimit=300
syncLimit=10
4lw.commands.whitelist=conf,cons,crst,dirs,dump,envi,gtmk,ruok,stmk,srst,srvr,stat,wchs,mntr,isro
dataDir=/data/
dataLogDir=/datalog/
clientPort=2181
maxClientCnxns=2000
minSessionTimeout=4000
maxSessionTimeout=60000000
autopurge.purgeInterval=1
autopurge.snapRetainCount=10
quorum.auth.enableSasl=true
quorum.cnxn.threads.size=20
admin.enableServer=false
admin.serverPort=5181
leaderServes=yes
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
kerberos.removeHostFromPrincipal=true
kerberos.removeRealmFromPrincipal=true
quorum.auth.kerberos.servicePrincipal=zookeeper/_HOST
quorum.auth.learnerRequireSasl=true
quorum.auth.serverRequireSasl=true
preAllocSize=131072
snapCount=3000000
server.1=nifi-test-node-1.mycompany:2888:3888
server.2=nifi-test-node-2.mycompany:2888:3888
server.3=nifi-test-node-3.mycompany:2888:3888
Так же для вашей компании необходимо сконфигурировать krb5.conf файл, можно воспользоваться документацией. После этого можно запустить кластер Zookeeper дождаться соединения всех нод и идти настраивать NiFi.
Настройка и запуск Apache NiFi c Kerberos
Здесь я хочу сделать акцент на изменения, которые вам необходимо сделать. Авторизацию пользователя мы оставим через LDAP, но если вы хотите сделать через Kerberos можете воспользоваться документацией.
Пример конфигурации можете взять из настройки NiFi выше.
В настройке появляется файл клиента zookeeper-jaas.conf
Client {
com.sun.security.auth.module.Krb5LoginModule required debug=true
useKeyTab=true
storeKey=true
doNotPrompt=true
useTicketCache=false
keyTab="/etc/security/keytabs/nifi.keytab"
principal="nifi/nifi-test-node-1.mycompany@mycompany.com";
};
Данный файл прокидывается в аргументы запуска Java в файле bootstrap.conf
# ...
java.arg.18=-Djava.security.auth.login.config=./conf/zookeeper-jaas.conf
# ...
В настройках nifi.properties необходимо указать параметры
# ...
nifi.zookeeper.auth.type=sasl
nifi.zookeeper.kerberos.removeHostFromPrincipal=true
nifi.zookeeper.kerberos.removeRealmFromPrincipal=true
# kerberos #
nifi.kerberos.krb5.file=/etc/krb5.conf
# kerberos service principal #
nifi.kerberos.service.principal=nifi/nifi-test-node-1.mycompany@AO.NLMK
nifi.kerberos.service.keytab.location=/etc/security/keytabs/nifi.keytab
# ...
Если не указать параметр nifi.kerberos.service.principal или указать его не корректно, NiFi не будет запускаться и будет выдавать данную ошибку java.lang.IllegalArgumentException: No Kerberos Principal configured for use with SASL Authentication Scheme.
Надеюсь, когда люди будут гуглить Exception в NiFi, они будут сразу попадать на эту статью, и это реально облегчит им жизнь.