--- name: apache-nifi-registry description: Expert guidance for Apache NiFi Registry including flow versioning, buckets, Git integration, security, and registry client configuration. Use this when working with flow version control and registry management. tags: [nifi-registry, version-control, flow-management] color: blue --- # Apache NiFi Registry Expert Skill You are an expert in Apache NiFi Registry, a central location for storing and managing shared resources like versioned flows. ## Core Concepts ### Architecture - **Buckets**: Containers for organizing versioned items - **Versioned Flows**: Snapshots of NiFi process groups - **Flow Versions**: Individual versions within a flow - **Registry Clients**: Connections from NiFi to Registry ## Key Features ### Version Control - Store and manage NiFi flow versions - Track changes with metadata and comments - Compare versions side-by-side - Import/export flows between environments ### Storage Backends - **File System**: Default local storage - **Git**: Store flows in Git repositories - **Database**: Store in relational database (PostgreSQL, MySQL) ## Configuration ### registry.properties ```properties # Web UI nifi.registry.web.http.host=0.0.0.0 nifi.registry.web.http.port=18080 # Flow Persistence nifi.registry.flow.storage.directory=./flow_storage # Git Flow Persistence Provider nifi.registry.provider.flow.git.implementation=org.apache.nifi.registry.provider.flow.git.GitFlowPersistenceProvider nifi.registry.provider.flow.git.Flow Storage Directory=./flow_storage ``` ### Git Integration ```xml org.apache.nifi.registry.provider.flow.git.GitFlowPersistenceProvider ./flow_storage origin git-user password ``` ## Docker Deployment ### Standalone Registry ```yaml services: nifi-registry: image: apache/nifi-registry:latest ports: - "18080:18080" environment: - LOG_LEVEL=INFO volumes: - ./nifi-registry/database:/opt/nifi-registry/nifi-registry-current/database - ./nifi-registry/flow_storage:/opt/nifi-registry/nifi-registry-current/flow_storage - ./nifi-registry/conf:/opt/nifi-registry/nifi-registry-current/conf ``` ### With Git Backend ```yaml services: nifi-registry: image: apache/nifi-registry:latest ports: - "18080:18080" volumes: - ./nifi-registry/flow_storage:/opt/nifi-registry/nifi-registry-current/flow_storage - ./nifi-registry/conf/providers.xml:/opt/nifi-registry/nifi-registry-current/conf/providers.xml environment: - NIFI_REGISTRY_FLOW_PROVIDER=git - NIFI_REGISTRY_GIT_REMOTE=https://github.com/org/nifi-flows.git - NIFI_REGISTRY_GIT_USER=git-user - NIFI_REGISTRY_GIT_PASSWORD=token ``` ## Usage Workflow ### Connect NiFi to Registry 1. **Add Registry Client** (NiFi Controller Settings) ``` Name: Dev Registry URL: http://nifi-registry:18080 ``` 2. **Create Bucket** (in Registry UI) ``` Bucket Name: Production Flows Description: Versioned production data flows ``` 3. **Version Control a Flow** (in NiFi) - Right-click Process Group - Version → Start version control - Select Registry, Bucket, Flow name - Add version comment - Click Save ### Version Management ```bash # Commit Changes (NiFi UI) Right-click Process Group → Version → Commit local changes # View Change Log Right-click Process Group → Version → Show local changes # Revert Changes Right-click Process Group → Version → Revert local changes # Change Version Right-click Process Group → Version → Change version ``` ## Best Practices ### Bucket Organization ``` Buckets by Environment: ├── Development ├── Testing ├── Staging └── Production OR by Domain: ├── Data Ingestion ├── ETL Pipelines ├── Analytics └── Data Distribution ``` ### Versioning Strategy - **Commit frequently** with meaningful messages - **Tag stable releases** (v1.0.0, v1.1.0) - **Use branching** for experimental changes (if using Git backend) - **Document breaking changes** in commit messages - **Test in lower environments** before promoting ### Naming Conventions ``` Flow Names: - product-ingestion-flow - customer-etl-pipeline - sensor-data-aggregation Version Comments: - "feat: Add Kafka consumer for orders" - "fix: Correct JSON parsing logic" - "refactor: Optimize database queries" ``` ## Security ### Authentication ```properties # Identity Providers nifi.registry.security.identity.provider=ldap-identity-provider # LDAP Configuration nifi.registry.security.ldap.manager.dn=cn=admin,dc=example,dc=com nifi.registry.security.ldap.manager.password=password nifi.registry.security.ldap.url=ldap://ldap-server:389 nifi.registry.security.ldap.user.search.base=ou=users,dc=example,dc=com ``` ### Authorization ```xml file-user-group-provider org.apache.nifi.registry.security.authorization.file.FileUserGroupProvider ./conf/users.xml CN=admin, OU=NiFi file-access-policy-provider org.apache.nifi.registry.security.authorization.file.FileAccessPolicyProvider file-user-group-provider ./conf/authorizations.xml CN=admin, OU=NiFi ``` ## API Usage ### REST API Examples ```bash # List buckets curl http://localhost:18080/nifi-registry-api/buckets # Create bucket curl -X POST http://localhost:18080/nifi-registry-api/buckets \ -H "Content-Type: application/json" \ -d '{"name":"MyBucket","description":"Test bucket"}' # List flows in bucket curl http://localhost:18080/nifi-registry-api/buckets/{bucketId}/flows # Get flow versions curl http://localhost:18080/nifi-registry-api/buckets/{bucketId}/flows/{flowId}/versions # Export flow version curl http://localhost:18080/nifi-registry-api/buckets/{bucketId}/flows/{flowId}/versions/{version}/export \ -o flow-export.json ``` ## Gitea Integration When using Gitea as a Git backend for NiFi Registry: ### Setup Steps 1. **Create Gitea Repository** ```bash # In Gitea UI Repository: nifi-flows Visibility: Private Initialize: Yes (with README) ``` 2. **Generate Access Token** ```bash # Gitea Settings → Applications → Generate Token Permissions: repo (all) ``` 3. **Configure Registry providers.xml** ```xml org.apache.nifi.registry.provider.flow.git.GitFlowPersistenceProvider ./flow_storage origin gitea-user gitea-access-token ``` 4. **Initialize Git Repository** ```bash cd flow_storage git init git remote add origin http://gitea:3000/user/nifi-flows.git git config user.name "NiFi Registry" git config user.email "registry@nifi.local" ``` ## Monitoring & Troubleshooting ### Logs ```bash # Main logs logs/nifi-registry-app.log # Application log logs/nifi-registry-user.log # User actions logs/nifi-registry-bootstrap.log # Bootstrap # Enable DEBUG conf/logback.xml → Set level to DEBUG ``` ### Common Issues | Issue | Solution | |-------|----------| | Cannot connect from NiFi | Check network, firewall, registry URL | | Git push fails | Verify credentials, remote URL, network | | Flow not visible | Check bucket permissions, user authorization | | Version conflict | Pull latest, resolve conflicts, recommit | ## Migration & Backup ### Export All Flows ```bash # Using NiFi Registry CLI (part of NiFi Toolkit) registry list-buckets registry export-all-flows -b bucket-id -o /backup/flows/ ``` ### Import Flows ```bash registry import-flow-version -f /backup/flows/flow.json -b target-bucket-id ``` ### Backup Strategy ```bash # 1. File System Backend tar -czf registry-backup-$(date +%Y%m%d).tar.gz flow_storage/ database/ # 2. Git Backend cd flow_storage && git push --all origin # 3. Database (if using DB backend) pg_dump nifi_registry > registry-backup-$(date +%Y%m%d).sql ``` ## Resources - [NiFi Registry Documentation](https://nifi.apache.org/registry.html) - [REST API Guide](https://nifi.apache.org/docs/nifi-registry-docs/rest-api/index.html) - [Git Provider Setup](https://nifi.apache.org/docs/nifi-registry-docs/html/administration-guide.html#git-persistence-provider)