Files
logseq/pages/New Examples.md
T
2025-06-05 22:07:12 +02:00

257 lines
32 KiB
Markdown

- # Patient Monitoring
- Patients are endowed with different kinds of devices for sensing vital parameters
- Patient sensors send data to local gateways or directly to Hospital gateways (e.g., via mobile applications) if no local gateways are available or in case of malfunctioning gateways.
- Patient data are continuosly analysed to raise alerts in case of occurred problems or even predicted ones
- Depending on the available edges around patients, data are sent and analysed to the sub-system that best fit the requirements and the goals of the analysis to be performed.
- Gateways can already do some data analysis to check if patient parameters are ok or not
- ![image.png](../assets/image_1674128190862_0.png)
- {{renderer code_diagram,plantuml}}{{renderer code_diagram,plantuml}}
- ```plantuml
@startuml
start
:Sense Patient Data;
:Send Data to the local gateway if any;
:Send Data to the Hospital infrastructure;
:Local gateways (if any) analyse patient data and trigger alarms in case of critical values;
:Hospital gateways store data and ask cloud services to apply processing power-intensive prediction/analysis;
:Hospital gateways raise alerts and inform medical staff in case of predicted health problems;
stop
@enduml
```
- ## Smart City
- **Scenario**: Imagine a smart city where thousands of sensors are installed throughout the city to collect data on traffic, air quality, and weather conditions. These sensors are connected to the internet and send their data to a central server for analysis. However, the central server can quickly become overwhelmed with the amount of data it receives, and it needs help to process it all in real-time.
- A distributed "computing continuum" system can be employed to solve such a problem, where the data from the sensors is sent to a network of edge devices throughout the city and to the central server only if needed. In particular, edge devices are powerful enough to process the data they receive locally, execute lightweight data analysis tasks, and make decisions based on them without needing to send all the data to the central server. For example, an edge device located near a busy intersection could use the traffic data it receives from nearby sensors to adjust the timing of traffic lights in real time, reducing congestion and improving traffic flow. Similarly, an edge device located near a park could use the air quality data it receives to adjust the flow rate of a nearby air purification system, ensuring that the air in the park remains clean and healthy. However, the central server can still play a crucial role in the system, as it collects and analyses data from all the edge devices to gain a city-wide understanding of the data. Additionally, it could help in managing and monitoring the Edge Devices.
- Overall, the *distributed "computing continuum" system* allows the city to efficiently process and use the vast amount of data it is collecting and ultimately make better decisions for the benefit of its residents.
- The development of such systems encompass the development, deployment, and execution of several data-pipelines e.g., for optimizing traffic flows, monitoring air quality, and even for *mintenace prediction*. Specifically the "maintenance prediction" pipeline uses data from various sources to predict the maintenance required for the infrastructure such as roads, bridges, etc. The pipeline involves both edge devices and cloud servers, working together to process and analyze the data as shown below.
-
- ![image.png](../assets/image_1674749996408_0.png)
- [IoT Data Pipeline with MQTT, NiFi, and InfluxDB | Baeldung](https://www.baeldung.com/iot-data-pipeline-mqtt-nifi)
-
- The data pipelines implementing the different prediction and analysis functionalities of the considered smart city begins with the *data collection stage*, where sensor data, weather data, and usage data is gathered from various sources. The sensor data is collected by *edge devices* located on or near the infrastructure, while the weather and usage data can be obtained from publicly available sources.
- Once the data is collected, it is *preprocessed* by the edge devices, where it is cleaned, transformed, and filtered to ensure that it is of high quality and ready for analysis. The preprocessed data is then sent to the cloud server for further analysis.
- In the *analysis stage*, the data is processed by machine learning models running on the cloud server. These models use the preprocessed data e.g., to predict the maintenance required for the infrastructure, taking into account factors such as sensor data, weather data, and usage data.
- Finally, the results of the analysis are used e.g., to generate *maintenance schedules and alerts*, which are sent back to the edge devices. The edge devices can then use the information to trigger maintenance activities, such as sending out maintenance crews or adjusting the usage of infrastructure.
- The pipeline is thus a continuous loop, with the edge devices and cloud server working together to gather, process, and analyze data, and make decisions based on the results. The edge devices are responsible for collecting and preprocessing the data, while the cloud server is responsible for running the machine learning models and making decisions based on the results. An important aspect of this pipeline is the use of edge devices, which allows for *real-time analysis and decision-making*, as well as *reducing the amount of data sent to the cloud server*, which can help to *reduce costs and improve the performance of the pipeline*. Additionally, by using edge devices, the pipeline can work offline and operate in remote areas where the internet connectivity is poor or non-existent.
-
- ### Implementation of data pipelines with Apache NiFi
- [IoT Data Pipeline with MQTT, NiFi, and InfluxDB | Baeldung](https://www.baeldung.com/iot-data-pipeline-mqtt-nifi)
-
- root@vmi199272:~/nifi/nifi-1.19.1# ./bin/nifi.sh set-single-user-credentials diruscio 30zero4oodL1L
- new Simulation.Sensor("london", "central", "ozone", "air-quality/ozone"), new Simulation.Sensor("london", "central", "co", "air-quality/co"), new Simulation.Sensor("london", "central", "so2", "air-quality/so2"), new Simulation.Sensor("london", "central", "no2", "air-quality/no2"), new Simulation.Sensor("london", "central", "aerosols", "air-quality/aerosols"));
-
- ozone,city=london,station=central value=72.2
- [cloudera-labs/edge2ai-workshop at 1644675ba32490243212fef6a21bbd773261b43b (github.com)](https://github.com/cloudera-labs/edge2ai-workshop/tree/1644675ba32490243212fef6a21bbd773261b43b)
- ### Proposed approach
-
- ----------------------------
- Data from various sources such as sensor data, weather, usage data is collected, preprocessed and analyzed by edge devices and central server. The edge devices and central server use this data to predict the maintenance required for the infrastructure such as roads, bridges, etc.
- The "**maintenance prediction**" pipeline is a pipeline that uses data from various sources to predict the maintenance required for the infrastructure such as roads, bridges, etc. The pipeline involves both edge devices and cloud servers, working together to process and analyze the data.
- The pipeline begins with the data collection stage, where sensor data, weather data, and usage data is gathered from various sources. The sensor data is collected by edge devices located on or near the infrastructure, while the weather and usage data can be obtained from publicly available sources.
- Once the data is collected, it is preprocessed by the edge devices, where it is cleaned, transformed, and filtered to ensure that it is of high quality and ready for analysis. The preprocessed data is then sent to the cloud server for further analysis.
- In the analysis stage, the data is processed by machine learning models running on the cloud server. These models use the preprocessed data to predict the maintenance required for the infrastructure, taking into account factors such as sensor data, weather data, and usage data.
- Finally, the results of the analysis are used to generate maintenance schedules and alerts, which are sent back to the edge devices. The edge devices can then use the information to trigger maintenance activities, such as sending out maintenance crews or adjusting the usage of infrastructure.
- The pipeline is thus a continuous loop, with the edge devices and cloud server working together to gather, process, and analyze data, and make decisions based on the results. The edge devices are responsible for collecting and preprocessing the data, while the cloud server is responsible for running the machine learning models and making decisions based on the results.
- An important aspect of this pipeline is the use of edge devices, which allows for real-time analysis and decision-making, as well as reducing the amount of data sent to the cloud server, which can help to reduce costs and improve the performance of the pipeline. Additionally, by using edge devices, the pipeline can work offline and operate in remote areas where the internet connectivity is poor or non-existent.
-
-
- Possible data pipelines:
- ***Traffic flow optimization***: Data from traffic sensors is collected and analyzed in real-time by edge devices located at busy intersections. The edge devices use this data to adjust the timing of traffic lights, reducing congestion and improving traffic flow.
- ***Air quality monitoring***: Data from air quality sensors is collected and analyzed by edge devices located near parks and other public spaces. The edge devices use this data to adjust the flow rate of nearby air purification systems, ensuring that the air in these areas remains clean and healthy.
- ***Weather forecasting***: Data from weather sensors is collected and analyzed by edge devices located throughout the city. The edge devices use this data to generate local weather forecasts and send alerts to city residents if severe weather is expected.
- ***Noise pollution monitoring***: Data from noise sensors is collected and analyzed by edge devices located near high-traffic areas, construction sites, and other sources of noise pollution. The edge devices use this data to generate noise pollution maps of the city and send alerts to city residents if the noise levels exceed certain thresholds.
- *Crime prediction*: Data from various sources such as CCTV cameras, crime reports, social media, and weather information is collected, preprocessed, and analyzed by edge devices and central server. The edge devices and central server use this data to predict the likelihood of crime in specific areas and alert the police to areas that are at high risk.
- There are several ways to define and deploy the maintenance prediction pipeline, using different modeling languages and container technologies. Here are a few examples:
- 1. Modeling languages:
- For defining the pipeline's architecture, you can use languages such as JSON or YAML to define the pipeline's structure and dependencies, and deploy it using a tool like Kubernetes, which is an open-source container orchestration system.
- For modeling the machine learning models, you can use languages such as Python and R with libraries like TensorFlow, Scikit-learn, or PyTorch.
- 2. Container technologies:
- Docker: Docker is a popular containerization technology that allows you to package up the pipeline's components and dependencies into a single container, which can be easily deployed and run on any platform that supports Docker.
- Kubernetes: Kubernetes is an open-source container orchestration system that can be used to deploy, scale, and manage the pipeline's components and dependencies.
- Cloud-based container services: Cloud providers like AWS, Azure, and GCP offer managed container services that allow you to deploy and manage containerized applications in the cloud with minimal setup and maintenance.
- 3. Cloud-based IoT platforms:
- AWS IoT Greengrass: This is a service from Amazon Web Services that allows you to run AWS Lambda functions, perform local data processing, and communicate with the cloud on IoT devices. Greengrass can be used to run the edge devices' code and preprocess the data locally.
- Azure IoT Edge: This is a service from Microsoft Azure that allows you to run IoT workloads on the edge device and perform tasks such as data filtering and transformation, without sending all the data to the cloud.
- These are just a few examples of how you can define and deploy the maintenance prediction pipeline, but the choice of tools and technologies will depend on the specific requirements of the pipeline and the resources available.
- It's important to note that the pipeline should be designed and implemented with security in mind, as it will involve sensitive data and infrastructure. Therefore, it should be designed with considerations for data encryption, secure communication and proper access control.
- Designing the maintenance prediction pipeline in a way that is deployment independent and able to take decisions at run-time is an important aspect of the system. Here are a few ways to achieve this:
- 1. Microservices architecture: Using a microservices architecture, the pipeline can be broken down into smaller, independent services that can be deployed and scaled independently of one another. Each service can be designed to be highly available and fault-tolerant, which allows for the system to continue to function even if one service is down or unavailable. This way, you can make changes to one service without affecting the entire pipeline.
- 2. Dynamic scaling: Using a container orchestration system like Kubernetes, you can configure the pipeline to automatically scale the number of instances of a service based on the current load. This allows the pipeline to handle changes in the number of devices at run-time and ensures that the system can handle the increased load.
- 3. Service discovery: Service discovery is the process of automatically discovering new services as they come online and registering them with the pipeline. This way, the pipeline can dynamically discover new devices as they come online and automatically include them in the pipeline.
- 4. Autonomous decision-making: By using techniques such as machine learning, the pipeline can be designed to take decisions at run-time, without the need for human intervention. This allows the system to adapt to changing conditions and take appropriate actions without the need for manual intervention.
- 5. Decentralized decision-making: Decentralized decision-making is a strategy where decisions are made locally at the edge devices, reducing the amount of data sent to the cloud server and increasing the speed of decision-making. This way, the pipeline can continue to operate even if the connection to the cloud server is lost, and the devices can make decisions based on their local data and context.
- By using these techniques, the maintenance prediction pipeline can be designed to be highly available, fault-tolerant, and able to adapt to changing conditions at run-time. However, it's important to note that this can be a complex task, that requires careful planning and testing to ensure that the pipeline is able to handle any possible scenarios.
- ## Implementations
- ### JSON Implementation
collapsed:: true
- {
"name": "Maintenance Prediction Pipeline",
"services": [
{
"name": "Sensor Data Collection",
"image": "sensor-data-collection:1.0",
"replicas": 5,
"environment": {
"SENSOR_TYPES": "temperature,humidity,pressure"
}
},
{
"name": "Data Preprocessing",
"image": "data-preprocessing:1.0",
"replicas": 3,
"environment": {
"PREPROCESSING_MODEL": "clean_data.py"
}
},
{
"name": "Data Analysis",
"image": "data-analysis:1.0",
"replicas": 1,
"environment": {
"ANALYSIS_MODEL": "predict_maintenance.py"
}
},
{
"name": "Maintenance Scheduling",
"image": "maintenance-scheduling:1.0",
"replicas": 1,
"environment": {
"SCHEDULING_MODEL": "schedule_maintenance.py"
}
}
],
"ingresses": [
{
"service": "Sensor Data Collection",
"port": 80
},
{
"service": "Data Preprocessing",
"port": 80
},
{
"service": "Data Analysis",
"port": 80
},
{
"service": "Maintenance Scheduling",
"port": 80
}
],
"volumes": [
{
"name": "sensor-data",
"path": "/data/sensor-data"
},
{
"name": "preprocessed-data",
"path": "/data/preprocessed-data"
}
]
}
- This example defines the pipeline using a JSON object, with the top-level object containing the name of the pipeline, and an array of services. Each service is defined by its name, image, and the number of replicas that should be run. Additionally, each service has an environment object that contains environment variables, which can be used to configure the service at runtime.
- The pipeline also includes ingresses, which are used to route incoming traffic to the appropriate service, and volumes, which are used to store data that needs to be shared between services.
- This is just an example, and the pipeline's structure and dependencies will depend on the specific requirements of the system and the technologies used to implement the pipeline. Additionally, this pipeline definition is just an example of how the pipeline could be defined using JSON, other modeling languages such as YAML and XML could be used as well, and several tools and libraries that provide a more user-friendly way of defining and deploying the pipeline are available.
- ### [[NextFlow]] Implementation
collapsed:: true
- process sensorDataCollection {
container 'sensor-data-collection:1.0'
input:
val sensorTypes from 'config.json'
- output:
file 'sensor_data.csv'
- script:
"""
python collect_sensor_data.py --sensorTypes $sensorTypes
"""
}
- process dataPreprocessing {
container 'data-preprocessing:1.0'
input:
file 'sensor_data.csv'
- output:
file 'preprocessed_data.csv'
- script:
"""
python preprocess_data.py --inputFile sensor_data.csv
"""
}
- process dataAnalysis {
container 'data-analysis:1.0'
input:
file 'preprocessed_data.csv'
- output:
file 'maintenance_schedule.json'
- script:
"""
python analyze_data.py --inputFile preprocessed_data.csv
"""
}
- process maintenanceScheduling {
container 'maintenance-scheduling:1.0'
input:
file 'maintenance_schedule.json'
- output:
file 'maintenance_alerts.json'
- script:
"""
python schedule_maintenance.py --inputFile maintenance_schedule.json
"""
}
- workflow maintenancePrediction {
sensorDataCollection,
dataPreprocessing,
dataAnalysis,
maintenanceScheduling
}
- This example defines the pipeline using Nextflow, where each step of the pipeline is defined as a process. Each process specifies the container image to be used
- ### Deployment
- The Nextflow pipeline can be deployed and executed in a distributed computing continuum scenario in a few ways:
- 1. Cloud-based platforms: Nextflow can be easily executed on cloud-based platforms like AWS, Azure, and GCP, which offer preconfigured environments to run Nextflow pipelines. By using cloud-based platforms, you can easily scale the pipeline to handle large amounts of data, and the platform will take care of managing the infrastructure for you.
- 2. On-premises clusters: Nextflow can also be executed on-premises clusters, such as Apache Hadoop or Apache Spark, which provide a distributed computing environment. By using on-premises clusters, you can take advantage of existing infrastructure and maintain control over the data and the pipeline execution.
- 3. Cluster managers: Nextflow can be executed on cluster managers such as Kubernetes, Apache Mesos, and Docker Swarm, which allow for the deployment and management of Nextflow pipelines in a distributed environment.
- 4. Edge devices: Nextflow pipelines can also be executed on edge devices, using technologies such as Nextflow Cloud, which allows Nextflow pipelines to be executed on edge devices, such as Raspberry Pi or NVIDIA Jetson, with the ability to use the edge devices' resources, without relying on a connection to the cloud.
- 5. Hybrid: Nextflow pipelines can be executed on a hybrid infrastructure, where part of the pipeline runs on edge devices while other parts run on cloud servers. This can help to reduce the amount of data sent to the cloud and improve the overall performance of the pipeline.
- OR
- 1. Running on a local machine: Nextflow can be installed on a local machine and the pipeline can be executed locally. This approach is useful for testing and development, but it may not be suitable for large-scale production use.
- 2. Running on a cluster: Nextflow can be installed on a cluster, such as a Kubernetes cluster, and the pipeline can be executed on the cluster's nodes. This approach allows for efficient execution of the pipeline, and allows for scaling the pipeline to handle large amounts of data.
- 3. Running on a cloud provider: Nextflow can be executed on a cloud provider, such as AWS, Azure, or GCP, using cloud-specific solutions like AWS Batch, Azure Batch AI, or Google Cloud Dataflow. This approach allows for easy scaling, automatic provisioning of resources, and pay-per-use billing, which can help to reduce costs.
- 4. Running on a hybrid environment: A hybrid environment is a combination of on-premises and cloud-based resources. With this approach, the pipeline can take advantage of the benefits of both environments, for example, edge devices can collect and preprocess data locally, then send the data to the cloud for further analysis. This approach allows for real-time decision-making, reduce data transfer costs, and improve system performance.
- In a hybrid environment deployment, the Nextflow pipeline can be executed on both edge devices and cloud servers, allowing the pipeline to take advantage of the benefits of both environments. Here's an example of how the pipeline can be deployed in a hybrid environment:
- 1. Edge devices are used to collect sensor data, preprocess the data, and run simple analysis tasks.
- 2. Edge devices can run Nextflow pipeline instances locally, and use a service discovery mechanism to register themselves with a central server running in the cloud.
- 3. The edge devices then send the preprocessed data to the cloud server for further analysis.
- 4. The cloud server runs more complex analysis tasks and machine learning models using the data received from the edge devices.
- 5. The cloud server can also provide a web-based interface for monitoring and managing the pipeline.
- 6. The cloud server then sends the results of the analysis back to the edge devices, which can use the information to trigger maintenance activities or adjust the usage of infrastructure.
- A key aspect of this approach is the use of edge devices, which allows for real-time analysis and decision-making, as well as reducing the amount of data sent to the cloud server, which can help to reduce costs and improve the performance of the pipeline. Additionally, by using edge devices, the pipeline can work offline and operate in remote areas where the internet connectivity is poor or non-existent.
- To achieve this, it's important to use a communication protocol that allows edge devices to communicate with the cloud server, such as MQTT, CoAP, or HTTP. Additionally, a secure communication channel should be established between the edge devices and the cloud server to ensure that the data is transmitted securely.
- It's important to note that deploying the pipeline in a hybrid environment can be complex, it requires careful planning and testing to ensure that the pipeline is able to handle any possible scenarios, and that the communication channels between edge devices and
- ## Concrete example of Nextflow used in the context of IoT
- There are several examples of Nextflow being used in the context of IoT, here are a few examples:
- 1. [[Real-time sensor data analysis]]: In this example, Nextflow is used to process and analyze sensor data in real-time. The pipeline reads sensor data streams from multiple IoT devices, performs data preprocessing and cleaning, and runs machine learning models to analyze the data. The pipeline can also send alerts or take actions based on the results of the analysis.
- 2. IoT image processing: In this example, Nextflow is used to process and analyze images from IoT devices, such as cameras or drones. The pipeline reads image streams from the devices, performs image processing tasks, such as object detection or image classification, and sends the results to a cloud server for further analysis.
- 3. IoT log analysis: In this example, Nextflow is used to process and analyze log data from IoT devices. The pipeline reads log streams from the devices, performs data preprocessing and cleaning, and runs machine learning models to analyze the data. The pipeline can also send alerts or take actions based on the results of the analysis.
- 4. Real-time anomaly detection: In this example, Nextflow is used to perform real-time anomaly detection on sensor data streams from IoT devices. The pipeline reads sensor data streams, performs data preprocessing and cleaning, and runs machine learning models to detect anomalies in the data. The pipeline can also send alerts or take actions based on the results of the analysis.
- 5. Real-time prediction: Nextflow can be used to perform real-time predictions on sensor data streams from IoT devices. The pipeline reads sensor data streams, performs data preprocessing and cleaning, and runs machine learning models to make predictions about future sensor values. The pipeline can also send alerts or take actions based on the results of the predictions.
- These are just a few examples, but Nextflow can be used in many different ways to process and analyze data from IoT devices. Nextflow's ability to handle large amounts of data, process data streams in real-time, and integrate with other data processing tools makes it a powerful tool for working with IoT data.
- ### Apache NiFi
- The "real-time sensor data analysis" pipeline could be implemented using Apache NiFi:
- 1. Collect sensor data: The first step in the pipeline is to collect sensor data from the IoT devices. To accomplish this, you could use a "GetSerial" processor to read data from a serial port connected to the IoT devices. The processor could be configured to read data at a specified interval and send it to a "RouteOnAttribute" processor.
- 2. Preprocess data: The "RouteOnAttribute" processor routes the data to the next step in the pipeline based on certain conditions, such as the value of certain attributes. In this case, it could route the data to a "ReplaceText" processor, which performs data preprocessing by cleaning, transforming, and validating the sensor data before it's passed on to the next step in the pipeline.
- 3. Analyze data: The preprocessed data is then sent to the "InvokeScriptedProcessor" processor, which runs machine learning models on the sensor data to analyze it. The script could use libraries such as `scikit-learn`, `TensorFlow`, or `PyTorch` to perform the analysis.
- 4. Schedule maintenance: After the data is analyzed, the results are sent to a "InvokeScriptedProcessor" processor which schedules maintenance activities based on the results of the data analysis. The script could include logic to send notifications or trigger other actions based on the results of the analysis
- 5. Send the results: The results of the maintenance schedule could be sent to the "PutFile" processor, which writes the results to a file, or to the "PutDatabaseRecord" processor, which writes the results to a database.
- 6. Monitor the pipeline: To monitor the pipeline and ensure that it is running correctly, you can use NiFi's built-in monitoring features, such as the NiFi Data Provenance and the NiFi Flow analytics, to collect metrics, log data, and other information from the pipeline.
- It's important to note that deploying a pipeline in NiFi requires a good understanding of the tool, the data flow and the specific requirements of your use case. You can find the official documentation of Apache NiFi here [https://nifi.apache.org/docs.html](https://nifi.apache.org/docs.html) and the official tutorials here [https://nifi.apache.org/tutorials.html](https://nifi.apache.org/tutorials.html), this resources will help you to understand the tool and the steps you need to follow to deploy your pipeline. Additionally, you can also find some examples in the NiFi community, such as [https://community.hortonworks.com/articles/113858/nifi-examples-template.html](https://community.hortonworks.com/articles/113858/nifi-examples-template.html)
- Find examples and tutorials on the Apache NiFi website that show how to use various NiFi processors to collect, transform, and analyze data, as well as how to use NiFi's built-in monitoring features to track the status of your pipeline. You can find tutorials and examples on the NiFi website that cover many of the concepts and processors used in the example pipeline I described earlier, such as:
- Collecting data from IoT devices: [https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-standard-nar/1.14.0/org.apache.nifi.processors.standard.GetSerial/index.html](https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-standard-nar/1.14.0/org.apache.nifi.processors.standard.GetSerial/index.html)
- Data pre-processing: [https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-standard-nar/1.14.0/org.apache.nifi.processors.standard.ReplaceText/index.html](https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-standard-nar/1.14.0/org.apache.nifi.processors.standard.ReplaceText/index.html)
- Data analysis: [https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-scripting-nar/1.14.0/org.apache.nifi](https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-scripting-nar/1.14.0/org.apache.nifi).
- The distributed "computing continuum" system allows for efficient processing and use of vast amounts of data, leading to better decisions and improved living conditions for the residents of the smart city.
- ## Apache NiFi examples / Resources
- [US Presidential Election: tweet analysis using HDF... - Cloudera Community - 246097](https://community.cloudera.com/t5/Community-Articles/US-Presidential-Election-tweet-analysis-using-HDF-NiFi-Spark/ta-p/246097)
- [NiFi Sizing Guide & Deployment Best Practices - Cloudera Community - 246781](https://community.cloudera.com/t5/Community-Articles/NiFi-Sizing-Guide-Deployment-Best-Practices/ta-p/246781)
- [xmlking/nifi-examples: Apache NiFi example flows (github.com)](https://github.com/xmlking/nifi-examples)