Member since
07-30-2019
3406
Posts
1623
Kudos Received
1008
Solutions
My Accepted Solutions
| Title | Views | Posted |
|---|---|---|
| 337 | 12-17-2025 05:55 AM | |
| 398 | 12-15-2025 01:29 PM | |
| 405 | 12-15-2025 06:50 AM | |
| 370 | 12-05-2025 08:25 AM | |
| 604 | 12-03-2025 10:21 AM |
07-11-2023
06:12 AM
@mbraunerde When you authenticate to NiFi, a client token is issued for your user. That token is then presented by your browser with all subsequent requests since every action performed in NiFi must be both authenticated and authorized. When the token expires, a new one must be obtained. While you have configured the OIDC properties to support authentication via an external AD, you are still using the Single-user-authorizer which allows full access to only the user created by the Single-user-provider. I suggest you modify your nifi.properties file to use: nifi.security.user.authorizer=managed-authorizer This provider will utilize the the file-access-policy-provider (authorizations.xml file) for user authorizations. With your configuration above it will set admin level authorizations for user: admin@login-domain.com This user would be then allowed to access the NiFi and manage additional user authorizations via the UI. As far as access to the NiFi rest-api, I'd recommend using a certificate instead of your AD. 1. No need to obtain a user token - Include the clientAuth certificate in all your rest-api calls. 2. Will work for as long as the client certificate is valid. Certificate can be configured with long validity dates (often 2 years or more) 3. Token are only valid for the NiFi node on which they were issued. meaning if you accessed a different NiFi node in a NiFi cluster or a different instance of NiFi, you would need to get a new token each time. 4. Using a token requires you then to store that token somewhere for reuse by your individual rest-api calls. If you found that the provided solution(s) assisted you with your query, please take a moment to login and click Accept as Solution below each response that helped. Thank you, Matt
... View more
07-11-2023
05:55 AM
@sarithe That looks pretty health to me. GC Young Gen is a normal activity to see as the JVM will not free up memory until heap memory utilization reaches around the 80% point. Old Gen is full garabage collection and takes a lot longer and is triggered when Young Gen does not clean-up enough heap space. I see that is at 0. Have adjusted the concurrent tasks on the processors where you see a bottleneck or lower then expected throughput, consumption, etc? If you found that the provided solution(s) assisted you with your query, please take a moment to login and click Accept as Solution below each response that helped. Thank you, Matt
... View more
07-11-2023
05:50 AM
1 Kudo
@hegdemahendra The ConsumeAzureEventHub processor utilizes the AzureSDK library. The AzureSDK manages an internal thread pool for consuming events outside of the control of the NiFi processor. When the processor is started the single concurrent task thread is used to give a handle to the AzureSDK Session Factory. At that point all thread control pertaining to the consumption of events is outside the bounds of the NiFi framework. There are unfortunate side effects caused by using the AzureSDK in this processor. Since thread handling is moved out of the NiFi framework control, backpressure on the outbound connection(s) of this processor are not going to be honored. NiFi Framework handles backpressure as a soft limit and once the threshold on the connection is met or exceeded, the framework stops scheduling the source component. Since the ConsumeAzureEventHub processor on startup only gets "scheduled" once (hands off thread to AzureSDK to handle thread pool and consumption, the processor never needs to be scheduled again (always on). Only stopping the processor will stop the underlying AzureSDK from consuming more events. Risk here is that if a downstream issue happens, the connection(s) outbound from the ConsumeAzureEventHub processor will continue to grow until you run out of disk space on the FlowFile or content repository disks. The following Jira covers this limitation: https://issues.apache.org/jira/browse/NIFI-10353 If you found that the provided solution(s) assisted you with your query, please take a moment to login and click Accept as Solution below each response that helped. Thank you, Matt
... View more
07-10-2023
01:01 PM
@hegdemahendra There currently are no NiFi processors for ingesting from Delta Lake. There is an existing Apache Jira for creating such list/fetch processors for Delta Lake, but it is still open and does not look to be actively being worked on: https://issues.apache.org/jira/browse/NIFI-7093 I am not aware of any open source 3rd party options here as well. If you found that the provided solution(s) assisted you with your query, please take a moment to login and click Accept as Solution below each response that helped. Thank you, Matt
... View more
07-10-2023
09:47 AM
@MWM The stack trace you provided from the logs indicates and issue with the truststore properties. The truststore properties are not valid You'll want to inspect the keystore and truststore properties in the nifi.properties configuration file. Make sure none are blank or incorrect. I have seen this happen when the keystoreType and/or TruststoreType properties are blank (should be set to JKS or PKCS12 depending on your keystore format). If you found that the provided solution(s) assisted you with your query, please take a moment to login and click Accept as Solution below each response that helped. Thank you, Matt
... View more
07-07-2023
06:31 AM
2 Kudos
@SandyClouds What i am saying is that rest-api call response you got via command line is probably not the exact same request made by NiFi. What that response json tells you is that the user that made the request only has READ to all three buckets. You did not share the complete rest-api call you made, so I am guessing you did not pass any user authentication token or clientAuth certificate in yoru rest-api request and this that request was treated as bing made by an anonymous user. Since your bucket(s) have the "make publicly visible" checked, anonymous user will have only READ access to the buckets. In NiFi you are trying to start version control on a Process group. That means that the NiFi node certificate needs to be authorized on all buckets and authorized to proxy the NiFi authenticated user (who also needs to have read, write on the specific bucket to start version control. If the response received back to NiFi during the request is that nodes or user on has READ, then no buckets would be shown in that UI since the action that UI is performing would be a WRITE. You should use the "developer tools" in your web browser to capture the actual full request being made by NiFi when you try to start version control on a process group. Most developer tolls even give you and option to "copy as curl" which you can then just paste in a cmd window and execute manually yourself outside of NiFi to see the same response NiFi is getting. My guess here is that you are having a TLS handshake issue resulting in yoru requests to NiFi-Registry being anonymous requests. The NiFi logs are not going to show you details on what authorization was on the NiFi-Registry side (you'll need to check the nifi-registry-app.log for that). All the NiFi log you shared shows is that your "new_admin" was authorized to execute the NiFi rest-api endpoint. This triggering the connection attempt with NiFi-Registry which also appeared successful (likely as anonymous). If you look at the verbose output for the NiFi keystore, NiFi truststore, NiFi-Registry keystore, and NiFi-Registry truststore, you'll be able to determine if a mutual TLS exchange would even be possible between the two services using the keystore and truststores you have in place. These versbose outputs which you can get using the keytool command will also show you the EKUs and SANs present on your certificates. <path to JDK>/keytool -v -list -keystore <keystore or truststore file> When prompted for password, you can just hit enter without providing password. The screenshots you shared showing the authorizations configured in NiFi-Registry are sufficient. I was simply pointing out that you gave too much authorization to your NiFi node in the global policy section. This is why i am leaning more to a TLS handshake issue resulting in an anonymous user authentication rather then an authorization issue. You'll also want to inspect your nifi-registry-app.log for the authorization request coming from NiFi to see if is authorizing "anonymous" or some other string. Perhaps you have some identity mapping pattern configured on NiFi-Registry side that is trimming out the CN from your certificate DNs? In that case you could also see this behavior because your NiFi-Registry would be looking up authorization on different identity string (instead of "CN=new_admin, OU=Nifi, i maybe looking for just "new_admin"). NiFi and NiFi-Registry authorizations are exact string matches (case sensitive); otherwise, treated as different users. If you found that the provided solution(s) assisted you with your query, please take a moment to login and click Accept as Solution below each response that helped. Thank you, Matt
... View more
07-06-2023
12:31 PM
@sarithe Difficult to provide suggestion without details about your dataflows. Some components (Processors, etc) are going to be CPU intensive and other Memory intensive (embedded docs for each component will show list of resource considerations). You also need to look at disk I/O for the location where NiFi repositories are located. The more FlowFiles you have (small files, but a lot of them) will result in high disk I/O. You can also improve things here by using NiFi record based processors where possible so that one FlowFile contains multiple pieces of content in record format. You may also look at your concurrent task settings on your processors. All processors default to 1 concurrent task, but increasing this value is like cloning the processor allowing multiple concurrent executions (each concurrent thread executes on a different FlowFile from the inbound connection(s)). Also, you have set your Max Timer Driven Thread pool to value that is too high. Do you see any out of memory (OOM) errors or "too Many Open Files" errors in the nifi-app.log? These too will impact performance. NiFi needs a lot of file handles to work with the many components and FlowFiles being processed. If you found that the provided solution(s) assisted you with your query, please take a moment to login and click Accept as Solution below each response that helped. Thank you, Matt
... View more
07-06-2023
12:17 PM
1 Kudo
@hackerway I would not recommend using the embedded zookeeper as zookeeper quorum must be maintained in order for yoru NiFi cluster to remain stable. Losing a NiFi node also takes down the embedded zookeeper running with that NiFi. While I would recommend keeping your zookeeper quorum installed on its own servers separate from the NiFi service (NiFi can be a resource intensive application depending on dataflow designs and data volumes), you may be able to run yoru external ZK servers and NiFi servers on the same hardware. Sounds like you have established dataflows and resource usage is low on your servers, but that may change if you add to your existing dataflows, add new dataflows, and/or there is a change in data size/volume. You'll want to be looking at all resource consumption over time before making a decision here: - CPU Load (core load average as well as peaks) - Memory utilization on yoru servers to make sure there is sufficient memory to support both ZK and NiFi. - Disk I/O NiFi can have a lot of disk I/O with it local repositories (content, flowfile, and provenance). So if Disk I/O is high adding ZK to the same host could impact throughput of your NiFi If you found that the provided solution(s) assisted you with your query, please take a moment to login and click Accept as Solution below each response that helped. Thank you, Matt
... View more
07-06-2023
12:06 PM
@hegdemahendra SASL_SSL is Simple Authentication and Security Layer over a TLS encrypted connection. A TLS encrypted connection is going to require that the server (Kafka) has a server certificate. There are two types of TLS connection (1-way and mutual). Without going very deep in to this process, i'll keep it very high level). In a 1-way TLS connection only the server (Kafka in your case) presents information in the TLS exchange. The client (NiFi Kafka processor in your case) does not present information back to the server. The client will verify if they trust the information provided from the server. The servers serverAuth certificate will be signed by some certificate authority and the client will verify if that signing authority's trust chain is trusted and if if it is will accept the Server's information allowing the TLS connection to proceed. Now it is possible for the client to choose to trust the server (unsecure) without verifying the trust chain. This is unsafe, so NiFi and its components (Processors, controller services, reporting tasks, RPG, etc) will not allow that. So the processor will require that a SSL Context Service is created. You'll need to configure that SSL Context Service with a SSL truststore which contains the complete trust chain for the Kafka signed certificate. No need for configuring the keystore properties. In a Mutual TLS connection, both sides (server and Client) will present information to each other to identify themselves in order to establish the encrypted TLS connection. In a mutual TLS exchange, the Client must be capable via its truststore to trust the compete trust chain for the server's certificate issuer. And the Server must be capable via its truststore to trust the complete trust chain for the clients certificate issuer. Since you are authenticating via SASL via username and password, you'll only need 1-way TLS encrypted connection. You can manually create a truststore.jks to use for this. You should be able to use openssl to get the public keys needed to do this from yoru kafka target: openssl s_client -connect <kafka hostname>:<kafka port> -showcerts The output from this should contain all the public keys in the trust chain. Each certificate will look something like this: -----BEGIN CERTIFICATE-----
MIIFYjCCBE......yilrbCgj8=
-----END CERTIFICATE----- The "-----BEGIN CERTIFICATE-----" and "-----END CERTIFICATE-----" are part of the certificate. You can save each certificate as a "key<num>.pem" file and the import them in to your truststore you when then use in your SSLContextService. If you found that the provided solution(s) assisted you with your query, please take a moment to login and click Accept as Solution below each response that helped. Thank you, Matt
... View more
07-05-2023
12:54 PM
1 Kudo
@c3turner7 I suggest opening the developer tools in your browser and then observing the network communication between your browser and the NiFi server. Form this you should see what the current request to load the NiFi UI post authentication credentials being provided is waiting on. You could get and examine a JVM thread dump for your NIFi. Getting multiple thread dumps space at least 1 min apart while it is in the state of loading the UI for comparison will allow you to see any threads that my not be changing from one dump to the next. That info may help understand where exactly it is hung waiting on something. Hope this helps, Matt
... View more