New Features of Apache NiFi 1.13.0
Published: 2021-02-21 20:20:33

---
title: New Features of Apache NiFi 1.13.0
published: true
date: 2021-02-17 21:21:00 UTC
tags: 
canonical_url: 
---

#  New Features of Apache NiFi 1.13.0

[![](https://1.bp.blogspot.com/-aunmbTSRkSg/YC2D3V6WPAI/AAAAAAAAc0s/7548nNi4jdQnfLpy0lkHB07E2Zj7bIqhQCLcBGAsYHQ/w740-h377/examplenififlow.png)](https://1.bp.blogspot.com/-aunmbTSRkSg/YC2D3V6WPAI/AAAAAAAAc0s/7548nNi4jdQnfLpy0lkHB07E2Zj7bIqhQCLcBGAsYHQ/s2048/examplenififlow.png)
  

  

  

**Check it out** :   [https://twitter.com/pvillard31/status/1361569608327716867?s=27](https://twitter.com/pvillard31/status/1361569608327716867?s=27)

  

**Download today** :  [https://nifi.apache.org/download.html](https://nifi.apache.org/download.html)

  
**Release Note** s:  [https://cwiki.apache.org/confluence/display/NIFI/Release+Notes#ReleaseNotes-Version1.13.0](https://cwiki.apache.org/confluence/display/NIFI/Release+Notes#ReleaseNotes-Version1.13.0)

  

**Migration** :  [https://cwiki.apache.org/confluence/display/NIFI/Migration+Guidance](https://cwiki.apache.org/confluence/display/NIFI/Migration+Guidance)

  

[![](https://1.bp.blogspot.com/-l1bC1nih-cE/YC2EZF53b9I/AAAAAAAAc1Q/jzr6Nj1kft84E4hcATFThDaTvb8eCsDYgCLcBGAsYHQ/w640-h248/listenFtp.png)](https://1.bp.blogspot.com/-l1bC1nih-cE/YC2EZF53b9I/AAAAAAAAc1Q/jzr6Nj1kft84E4hcATFThDaTvb8eCsDYgCLcBGAsYHQ/s898/listenFtp.png)

  

**New Features**

- ListenFTP
- UpdateHiveTable - Hive DDL changes -Hive Update Schema ie Data Drift ie Hive Schema Migration!!!!
- **SampleRecord** - different sampling approaches to records ( **Interval Sampling, **** Probabilistic Sampling, ****Reservoir Sampling)**
- CDC Updates
- Kudu updates
- AMQP and MQTT Integration Upgrades
- ConsumeMQTT - readers and writers added
- HTTP access to NiFi by default is now configured to accept connections to 127.0.0.1/localhost only.  If you want to allow broader access for some reason for HTTP and you understand the security implications you can still control that as always by changing the 'nifi.web.http.host' property in nifi.properties as always. That said, please take the time to configure proper HTTPS.  We offer detailed instructions and tooling to assist.
- ConsumeMQTT - add record reader/writer
- The ability to run NiFi with no GUI as MiNiFi/NiFi combined code base continues.
- Support for Kudu Dates ([https://kudu.apache.org/releases/1.12.0/docs/release\_notes.html)](https://kudu.apache.org/releases/1.12.0/docs/release_notes.html))
- Updated GRPC versions
- Apache Calcite update
- PutDatabaseRecord update

  

Here is an example NiFi ETL Flow:

  

[![](https://1.bp.blogspot.com/-aunmbTSRkSg/YC2D3V6WPAI/AAAAAAAAc0s/7548nNi4jdQnfLpy0lkHB07E2Zj7bIqhQCLcBGAsYHQ/w740-h377/examplenififlow.png)](https://1.bp.blogspot.com/-aunmbTSRkSg/YC2D3V6WPAI/AAAAAAAAc0s/7548nNi4jdQnfLpy0lkHB07E2Zj7bIqhQCLcBGAsYHQ/s2048/examplenififlow.png)

  

**Example NiFi 1.13.0 Flow:**

- **ConsumeMQTT:   now with readers**
- **UpdateAttribute:   set ** record.sink.name to **kafka and ** recordreader.name to **json**.
- **SampleRecord** :   sample a few of the records
- **PutRecord** :   Use reader and destination service
- **UpdateHiveTable** :   new sink

Consume from MQTT and read and write to/from records.

[![](https://1.bp.blogspot.com/-MJAmTgkYEV8/YC2EYVMrSPI/AAAAAAAAc1M/laPL_hFP0KYrIQqK4ZkqdIItgJ5Qi25IgCLcBGAsYHQ/w640-h482/consumeMQTTRecords.png)](https://1.bp.blogspot.com/-MJAmTgkYEV8/YC2EYVMrSPI/AAAAAAAAc1M/laPL_hFP0KYrIQqK4ZkqdIItgJ5Qi25IgCLcBGAsYHQ/s1152/consumeMQTTRecords.png)

  

Some example attributes from a running flow:

[![](https://1.bp.blogspot.com/-MI4E1Zkq12k/YC2EYJvds3I/AAAAAAAAc1E/Yf_PzrJSv6kR-lXQ-77m_0zK7_MeRjDpACLcBGAsYHQ/w614-h640/attributesneeded.png)](https://1.bp.blogspot.com/-MI4E1Zkq12k/YC2EYJvds3I/AAAAAAAAc1E/Yf_PzrJSv6kR-lXQ-77m_0zK7_MeRjDpACLcBGAsYHQ/s716/attributesneeded.png)
  

Connection Pools for DatabaseRecordSinks can be JDBC, Hadoop and Hive.
  

[![](https://1.bp.blogspot.com/-0zWDVUUm0Gk/YC2EgEplXdI/AAAAAAAAc2A/gI6pRrCYaEcrWklgC05i-RxSzIDBfPm9ACLcBGAsYHQ/w640-h312/databaseRecordSinkSetConn.png)](https://1.bp.blogspot.com/-0zWDVUUm0Gk/YC2EgEplXdI/AAAAAAAAc2A/gI6pRrCYaEcrWklgC05i-RxSzIDBfPm9ACLcBGAsYHQ/s1934/databaseRecordSinkSetConn.png)

  

  

FreeFormTextRecordSetWriter is great for writing any format.

  

[![](https://1.bp.blogspot.com/-m2fb4h1ylo4/YC2EYPIy41I/AAAAAAAAc1A/vB7I86H47vc5vxoKa8p0dBd50_6SoC7aACLcBGAsYHQ/w640-h578/FreeFormTextRecordWriter.png)](https://1.bp.blogspot.com/-m2fb4h1ylo4/YC2EYPIy41I/AAAAAAAAc1A/vB7I86H47vc5vxoKa8p0dBd50_6SoC7aACLcBGAsYHQ/s1182/FreeFormTextRecordWriter.png)

  

  

**RecordSinkService** we will pick **Kafka** as our destination.

  

[![](https://1.bp.blogspot.com/-nZ0WPxwmS68/YC2EZVrNzyI/AAAAAAAAc1Y/rtCTFKz7684Y6KA4RkNQ9UmLNo2ltYhewCLcBGAsYHQ/w564-h640/putRecord.png)](https://1.bp.blogspot.com/-nZ0WPxwmS68/YC2EZVrNzyI/AAAAAAAAc1Y/rtCTFKz7684Y6KA4RkNQ9UmLNo2ltYhewCLcBGAsYHQ/s1198/putRecord.png)

  

  

**KafkaRecordSink** from **PutRecord**

  

[![](https://1.bp.blogspot.com/-DplSvJMU-F0/YC2EZM-MPyI/AAAAAAAAc1U/kDubJ70AAesJ_M9FOHMRypG-jb0pafQaACLcBGAsYHQ/w640-h420/kafkarecordsink26.png)](https://1.bp.blogspot.com/-DplSvJMU-F0/YC2EZM-MPyI/AAAAAAAAc1U/kDubJ70AAesJ_M9FOHMRypG-jb0pafQaACLcBGAsYHQ/s1350/kafkarecordsink26.png)
  

Reader will pick json in our example based on our **UpdateAttribute** , we can dynamically change this as data streams.

[![](https://1.bp.blogspot.com/-_bZMNV-dEZs/YC2EZS3tqVI/AAAAAAAAc1c/EnI1cyMUwY4noKHUBc7SDvvHSFjwbN_9ACLcBGAsYHQ/w640-h272/queryrecord.png)](https://1.bp.blogspot.com/-_bZMNV-dEZs/YC2EZS3tqVI/AAAAAAAAc1c/EnI1cyMUwY4noKHUBc7SDvvHSFjwbN_9ACLcBGAsYHQ/s1274/queryrecord.png)

  

**ReaderLookup**   - lets you pick a reader based on an attribute.
  

[![](https://1.bp.blogspot.com/-fEhRSY_a3Ss/YC2EYAFIpWI/AAAAAAAAc1I/4QPn1v2jYVAWhO6qDDrbH_GAep39rbUdwCLcBGAsYHQ/w640-h584/RecordReaderLookup.png)](https://1.bp.blogspot.com/-fEhRSY_a3Ss/YC2EYAFIpWI/AAAAAAAAc1I/4QPn1v2jYVAWhO6qDDrbH_GAep39rbUdwCLcBGAsYHQ/s1156/RecordReaderLookup.png)

  

  

We have defined readers for Parquet, JSON, AVRO, XML and CSV so no matter the type I can automagically read it.    Great for reusing code and great for cases like our new ListenFTP where you may get sent tons of different files to process.   Use one FLOW!

  

[![](https://1.bp.blogspot.com/-PFMUl9_3-Do/YC2EZvMw1GI/AAAAAAAAc1g/BteKA7AEa88PTKSNELxLgTXZaYYeJ78hACLcBGAsYHQ/w640-h216/readerLookupByName.png)](https://1.bp.blogspot.com/-PFMUl9_3-Do/YC2EZvMw1GI/AAAAAAAAc1g/BteKA7AEa88PTKSNELxLgTXZaYYeJ78hACLcBGAsYHQ/s1204/readerLookupByName.png)

  

**RecordSinkService** can help you make all our flows generic so you can drop in different sinks/destinations for your writers based on what the data coming in is.   This is revolutionary for code reuse.
  

[![](https://1.bp.blogspot.com/-vQgYLkWIRxw/YC2EZn4EH6I/AAAAAAAAc1k/qcUt7ATIfhMBhLgX21KnkWcsyQukDMY8ACLcBGAsYHQ/w640-h236/recordSinkLookup.png)](https://1.bp.blogspot.com/-vQgYLkWIRxw/YC2EZn4EH6I/AAAAAAAAc1k/qcUt7ATIfhMBhLgX21KnkWcsyQukDMY8ACLcBGAsYHQ/s1451/recordSinkLookup.png)

  

We can write our output in a custom format that could look like a document, HTML, fixed width, a form letter, weird delimiter or whatever you need.
  

[![](https://1.bp.blogspot.com/-GJlulnTpSMo/YC2EaDiDcwI/AAAAAAAAc1w/9Hn-kf_M9wA9f0enWfyEgE69CRr7bC_eQCLcBGAsYHQ/w640-h218/sampleRecord.png)](https://1.bp.blogspot.com/-GJlulnTpSMo/YC2EaDiDcwI/AAAAAAAAc1w/9Hn-kf_M9wA9f0enWfyEgE69CRr7bC_eQCLcBGAsYHQ/s1337/sampleRecord.png)

  

**Sample** records using different methods.

  

[![](https://1.bp.blogspot.com/-JedYJc_v8Sc/YC2EaOu8TqI/AAAAAAAAc10/5ZmTFpHD8FUL6ggVumj9K5AfJChV4g4NQCLcBGAsYHQ/w640-h138/samplerecorddocs.png)](https://1.bp.blogspot.com/-JedYJc_v8Sc/YC2EaOu8TqI/AAAAAAAAc10/5ZmTFpHD8FUL6ggVumj9K5AfJChV4g4NQCLcBGAsYHQ/s2524/samplerecorddocs.png)

  

We use the **RecordSinkServiceLookup** to allow us to change our sink location dynamically, we are passing in an attribute to choose Kafka.

  

[![](https://1.bp.blogspot.com/-cQJIY4vkboU/YC2EZ3t7kgI/AAAAAAAAc1s/DgybOZaslcEZsT_ASDK6R30CHTFRCllgACLcBGAsYHQ/w640-h98/recordsinklookupservicekafka.png)](https://1.bp.blogspot.com/-cQJIY4vkboU/YC2EZ3t7kgI/AAAAAAAAc1s/DgybOZaslcEZsT_ASDK6R30CHTFRCllgACLcBGAsYHQ/s1238/recordsinklookupservicekafka.png)

  

We have pushed our data to **Kafka** via the **KafkaRecordSink**.  We can see our data easily in **Streams Messaging Manager (SMM)**.

  

[![](https://1.bp.blogspot.com/-X0uqZpjfqVc/YC2Eab326AI/AAAAAAAAc18/Vb6Z0FB7dccDtwrSlzMoOfTk6Zg9XrBMgCLcBGAsYHQ/w640-h236/smmFromSink.png)](https://1.bp.blogspot.com/-X0uqZpjfqVc/YC2Eab326AI/AAAAAAAAc18/Vb6Z0FB7dccDtwrSlzMoOfTk6Zg9XrBMgCLcBGAsYHQ/s2915/smmFromSink.png)

  

With a **RecordReaderFactory** , you can pick readers like the new **WindowsEventLogReader**.

  

[![](https://1.bp.blogspot.com/-KfYJnkjA5L4/YC2EaTbRvYI/AAAAAAAAc14/Ft1xAtXlHkcJyHvJeO7EPN0Q5n-35j3uwCLcBGAsYHQ/w638-h640/windowsEventLogReader.png)](https://1.bp.blogspot.com/-KfYJnkjA5L4/YC2EaTbRvYI/AAAAAAAAc14/Ft1xAtXlHkcJyHvJeO7EPN0Q5n-35j3uwCLcBGAsYHQ/s1488/windowsEventLogReader.png)
  
  

As another output, we can UpdateHiveTable from our data and change the table as needed.

  

[![](https://1.bp.blogspot.com/-9Dmgm8PUMu8/YC2EB2HiFwI/AAAAAAAAc0w/b-JDW0ZTHxgRPRdVJ0ksk--70cbLB_zdwCLcBGAsYHQ/w657-h368/updateHiveTable.png)](https://1.bp.blogspot.com/-9Dmgm8PUMu8/YC2EB2HiFwI/AAAAAAAAc0w/b-JDW0ZTHxgRPRdVJ0ksk--70cbLB_zdwCLcBGAsYHQ/s1258/updateHiveTable.png)

  

  

Straight From Release Notes:  New Feature

- [[NIFI-7386](https://issues.apache.org/jira/browse/NIFI-7386)] - AzureStorageCredentialsControllerService should also connect to storage emulator
- [[NIFI-7429](https://issues.apache.org/jira/browse/NIFI-7429)] - Add Status History capabilities for system level metrics
- [[NIFI-7549](https://issues.apache.org/jira/browse/NIFI-7549)] - Adding Hazelcast based implementation for DistributedMapCacheClient
- [[NIFI-7624](https://issues.apache.org/jira/browse/NIFI-7624)] - Build a ListenFTP processor
- [[NIFI-7745](https://issues.apache.org/jira/browse/NIFI-7745)] - Add a SampleRecord processor
- [[NIFI-7796](https://issues.apache.org/jira/browse/NIFI-7796)] - Add Prometheus metrics for total bytes received and bytes sent for components
- [[NIFI-7801](https://issues.apache.org/jira/browse/NIFI-7801)] - Add acknowledgement check to Splunk
- [[NIFI-7821](https://issues.apache.org/jira/browse/NIFI-7821)] - Create a Cassandra implementation of DistributedMapCacheClient
- [[NIFI-7879](https://issues.apache.org/jira/browse/NIFI-7879)] - Create record path function for UUID v5
- [[NIFI-7906](https://issues.apache.org/jira/browse/NIFI-7906)] - Add graph processor with flexibility to query graph database conditioned on flowfile content and attributes
- [[NIFI-7989](https://issues.apache.org/jira/browse/NIFI-7989)] - Add Hive "data drift" processor
- [[NIFI-8136](https://issues.apache.org/jira/browse/NIFI-8136)] - Allow State Management to be tied to Process Session
- [[NIFI-8142](https://issues.apache.org/jira/browse/NIFI-8142)] - Add "on conflict do nothing" feature to PutDatabaseRecord
- [[NIFI-8146](https://issues.apache.org/jira/browse/NIFI-8146)] - Allow RecordPath to be used for specifying operation type and data fields when using PutDatabaseRecord
- [[NIFI-8175](https://issues.apache.org/jira/browse/NIFI-8175)] - Add a WindowsEventLogReader

  

  

An update Cloudera Flow Management!

## Cloudera Flow Management on DataHub Public Cloud 

  

This minor update has some Schema Registry and Atlas integration updates.  

  

[https://docs.cloudera.com/cdf-datahub/7.2.7/release-notes/topics/cdf-datahub-whats-new.html](https://docs.cloudera.com/cdf-datahub/7.2.7/release-notes/topics/cdf-datahub-whats-new.html)

[https://docs.cloudera.com/cdf-datahub/7.2.7/release-notes/topics/cfm-supported-processors.html](https://docs.cloudera.com/cdf-datahub/7.2.7/release-notes/topics/cfm-supported-processors.html)

  

  

If that wasn't enough, new version of MiNiFi C++ Agent!

## Cloudera Edge Manager 1.2.2 Release

  

## February 15, 2021

`CEM MiNiFi C++ Agent - 1.21.01` release includes:
- Support for JSON output in the Consume Windows Even Log processor
- Full Expression Language support on Windows
- Full S3 support (List, Fetch, Get, Put)

[https://docs.cloudera.com/cem/1.2.2/release-notes/topics/cem-minifi-cpp-download-locations.html](https://docs.cloudera.com/cem/1.2.2/release-notes/topics/cem-minifi-cpp-download-locations.html)

[https://docs.cloudera.com/cem/1.2.2/release-notes/topics/cem-minifi-cpp-agent-updates.html](https://docs.cloudera.com/cem/1.2.2/release-notes/topics/cem-minifi-cpp-agent-updates.html)

  

  

Remember when you are done.

  

[![](https://1.bp.blogspot.com/-w-OQLJdZksM/YC2EPtK__HI/AAAAAAAAc04/3a8GaWYr5SoH5qKwo82_nd8fjHP4wlTVwCLcBGAsYHQ/w728-h420/emptyallqueues.png)](https://1.bp.blogspot.com/-w-OQLJdZksM/YC2EPtK__HI/AAAAAAAAc04/3a8GaWYr5SoH5qKwo82_nd8fjHP4wlTVwCLcBGAsYHQ/s1099/emptyallqueues.png)