Member since
07-30-2019
3406
Posts
1622
Kudos Received
1008
Solutions
My Accepted Solutions
| Title | Views | Posted |
|---|---|---|
| 301 | 12-17-2025 05:55 AM | |
| 362 | 12-15-2025 01:29 PM | |
| 330 | 12-15-2025 06:50 AM | |
| 338 | 12-05-2025 08:25 AM | |
| 585 | 12-03-2025 10:21 AM |
08-13-2021
08:06 AM
@midee Not a lot of details in your question here, but the exception: SunCertPathBuilderException: unable to find valid certification path to requested target is telling you that the trust could not be determined in the TLS handshake that occurred between client and server. Essentially this means that yoru truststore did not contain all the necessary TrustedCertEntries. The complete trust chain must exist in the truststore. Lets say you have Certificate "cert-X" signed by Certificate Authority (CA) "CA-A". Owner: CN=cert-X, OU=test Issuer: CN=CA-A, OU=CA-intermediate Then that CA "CA-A" was signed by another CA "CA-root" Owner: CN=CA-A, OU=CA-intermediate Issuer: CN=CA-root, OU=CA-root Then the CA "CA-root" is signed by itself: Owner: CN=CA-root, OU=CA-root Issuer: CN=CA-root, OU=CA-root So in order to trust the certificate CN=cert-X, OU=test, the truststore would need to contain the complete trust chain meaning it would need to have a TrustedCertEntry for both "CA-A" and "CA-root" There may even be more CAs in that trust chain. You need every public cert for each ca all the way to the root CA (owner and issuer the same) to have complete trust chain. A mutual TLS handshake would require trust in both directions. Clients certificate must be trusted by server and server's certificate must be trusted by client. In a 1-way TLS handshake you only need trust in one direction. Client must be able to trust server's certificate only since client would not be sending a certificate to the server. If you found this response addressed yoru query, please take a moment to login and click "Accept as Solution". Thank you, Matt
... View more
08-13-2021
07:42 AM
@dupuy_gregory Yes, a krb5.conf can contain multiple realms in it. The HDFS processor components offered through NiFi can each be configured with different hadoop configuration resources (core-site.xml, hdfs-site.xml, etc..) and different Kerberos credentials (keytab and principal). This will allow various NiFi dataflows to interact with different target Hadoop clusters. If you found this response addressd yoru query, please take a moment to login and click on "Accept as Solution" Thank you, Matt
... View more
08-13-2021
07:33 AM
1 Kudo
@smartraman You can use a ReplaceText processor to remove these special characters from your json. Using your example, I could produce yoru desired output using the following java regular expression: (\\")|[\Q[\E]|[\Q]\E] Source: My ReplaceText processor was configured as follows: result: If you found this response addressed your query, please take a moment to login and click on "Accept as Solution". Thank you, Matt
... View more
08-09-2021
05:37 AM
@midee The condition NEL statement and resulting actions NEL statements will be unique for each rule you create. For example: Rule 1: Conditions: ${attr1:trim():length():minus(${attr1:trim():replaceAll(' ',''):length()}):plus(1):equals(1)} Actions: ${attr1:substring(0,1)} Rule2: Conditions: ${attr1:trim():length():minus(${attr1:trim():replaceAll(' ',''):length()}):plus(1):equals(2)} Actions: ${attr1:substring(0,1)}${attr1:getDelimitedField(2,' '):substring(0,1)} Rule3: Conditions: ${attr1:trim():length():minus(${attr1:trim():replaceAll(' ',''):length()}):plus(1):equals(3)} Actions: ${attr1:substring(0,1)}${attr1:getDelimitedField(2,' '):substring(0,1)}${attr1:getDelimitedField(3,' '):substring(0,1)} Rule4: Conditions: ${attr1:trim():length():minus(${attr1:trim():replaceAll(' ',''):length()}):plus(1):equals(4)} Actions: ${attr1:substring(0,1)}${attr1:getDelimitedField(2,' '):substring(0,1)}${attr1:getDelimitedField(3,' '):substring(0,1)}${attr1:getDelimitedField(4,' '):substring(0,1)} You will notice in the Conditions NEL statement, the last number is incrementing for each rule and in the Actions NEL statement the statement gets a bit longer with each additional string If you found these answers to your query were useful, please take a moment to login and click "Accept as Solution" on all answers that helped. Hope this helps, Matt
... View more
08-05-2021
12:42 PM
@Noctix Can you share nifi.properties file and authorizers.xml file and verbose output of the nifi-1 keystore and your shared truststore? It may help
... View more
08-05-2021
12:13 PM
@sivag Did you recently upgrade your browser? Have you tried using a different browser?
... View more
08-05-2021
11:16 AM
@zrbear It would be difficult to assist here without you sharing the following: - contents of nifi.properties file - verbose listing of yoru keystore and truststore using keytool Also make sure if using Java JDK 8 that you have installed the unlimited strength JCE policies: https://www.oracle.com/java/technologies/javase-jce8-downloads.html Hope this helps, Matt
... View more
08-05-2021
11:04 AM
@HariAllstate What is the use case for wanting these to be dynamic? The MergeContent processor allocates FlowFiles located in the inbound connection(s) to bins based on the configuration of these properties: Merge Strategy - Bin-Packing Algorithm - Keeps allocating FlowFiles to bin until both configured mins (Minimum Number of Entries and Minimum Group Size) are met. Bins can also be restricted to FlowFiles all having same value set in that attribute specified in the Correlation Attribute Name property - Defragment - FlowFile are allocated to bins based on fragment Attributes set on the inbound queued FlowFiles. The purpose of the Max Bin Age is to prevent bins from getting stuck forever because they do not meet the criteria necessary to be merged. Assume the scenario where the max num entries has been reached preventing any new FlowFiles from being allocated to a bin and those binned FlowFiles did not total enough size to meet the min group size. Since both mons must be satisfied for a bin to be merged, that bin could potentially sit forever. Max bin age when reached would force that bin to merge. In the case of Defragment the FlowFiles would rout to failure if max bin age is reached before all fragments are allocated to a bin. So Max Bin Age should be set to max latency you want to allow on a bin. Not clear on why you would want that to be dynamic and if it was, where would you pull that value from since many FlowFiles are allocated to a bin and they could end up having a variety of values. Since only the "mins" must be satisfied to merge a bin, not clear why you would want a dynamic capability here as well. Plus same applies here in that many FlowFiles are allocated to bins and may have different values. Also note that the processor does not use Max when considering if a bin is ready to be merged. When the MergeContent processor executes, it looks at only the FlowFiles queued on an inbound connection at that exact moment in time and allocates them to 1 or more bins. At the end of that allocation, each bin is evaluated to see if the mins were satisfied or all the fragments are in the bin and if so, it is merged. If you found this addressed your query, please take a moment to login and click "Accept as Solution" Thank you, Matt
... View more
08-05-2021
10:37 AM
@midee Assuming you know how many space delimited strings you have, you could use the following NiFi Expression Language (NEL) statement to extract the first character from each string: ${attr1:substring(0,1)}${attr1:getDelimitedField(2,' '):substring(0,1)}${attr1:getDelimitedField(3,' '):substring(0,1)} Above would take your example "Nifi Test Project" and produce "NTP". If this was not a static number of strings, you would need to count the number of strings and then use the Advanced UI of the updateAttribute processor to execute the appropriate NEL statement depending on calculated number of strings in your source attribute Here is an example UpdateAttribute processor configuration to accomplish this. Select "Configure" on the UpdateAttribute processor: In the lower left you will see button to enter the "ADVANCED" UI. Within that UI you will create a new RULE for each string count: You then create a "Conditions" which must resolve to "TRUE" before the "Actions" are applied. above image handles when the subject attribute value contains a single string. Below is example of more complicated Action when string count is equal to 4. Adding more rules is as simple as copying the last rule and editing the Condition to increment equals value and add and additional "${attr1:getDelimitedField(5,' '):substring(0,1)}" to the end with the next incremented field count. If you found this addressed your query, please take a moment to login and click "Accept as Solution". Thank you, Matt
... View more
07-28-2021
11:09 AM
1 Kudo
@jg6 There is no direct relationship between the DistributedMapCacheServer and the DistributedMapCacheClientService. Meaning that the client is simply configured with a hostname and a port. This hostname and port could be a DistributedMapCacheServer running on an entirely different NiFi cluster somewhere. Additionally there is no component that registers a dependency on the DistributedMapCacheServer controller service. They only have a dependency on the DistributedMapCacheClientService. So when constructing a template only the interconnected and dependent pieces are included. That being said, using the DistributedMapCache is not the cache I would recommend using anyway. IT offers no high Availability (HA). While a DistributedMapCacheServer is being started on every node in a NiFi cluster, they do not talk to one another and the DistributedMapCacheClientService can only be configured to point at one of them. So if you lose the NiFi node were your clients point, you lost all your cache. There are better options for external cache services that do offer HA. Hope this is helpful, Matt
... View more