3
votes

Comment conserver les fichiers de flux Nifi à l'aide de docker-compose?

En ce moment, j'utilise nifi et ses processeurs pour du streaming (écouteur mqtt, évaluation json, remplacement de texte, écriture dans db ...). J'essaie de conserver les fichiers de flux et j'ai donc fait un mappage de volume (voir ci-dessous). Mais cela ne fonctionne pas; après avoir redémarré le conteneur, il semble que les fichiers de flux ne soient pas enregistrés ...

Quelqu'un pourrait-il me donner un indice pour résoudre ce problème?

nifi:
image: apache/nifi
restart: on-failure
ports:
  - "8000:8000"
networks:
  - traefik
environment:
  - NIFI_WEB_HTTP_PORT=8000
volumes:
  - nifi_conf:/opt/nifi/conf
  - nifi_state:/data/nifi/state
  - nifi_db:/opt/nifi/database_repository
  - nifi_flowfile:/opt/nifi/flowfile_repository
  - nifi_content:/opt/nifi/content_repository
  - nifi_provenance:/opt/nifi/provenance_repository 


volumes:
 nifi_provenance:{}
 nifi_flowfile: {}
 nifi_content: {}
 nifi_db: {}
 nifi_state: {}
 nifi_conf: {}

Merci. p >


0 commentaires

5 Réponses :


5
votes

vous pouvez mapper les dossiers de conteneurs du docker directement sur la machine hôte comme ceci:

services:
  nifi:
    ...
    volumes:
      - ./conf:/opt/conf
      - ./nifi_state:/data/nifi/state
      ...

aucune définition de volume supplémentaire requise

notez que sous Windows avec virtualbox, cette fonctionnalité ne fonctionne que dans le répertoire utilisateur actuel.


3 commentaires

Pour moi, NiFi peut lire à partir de tels volumes mais jamais écrire. Savez-vous comment je peux donner à NiFi une autorisation d'écriture sur un dossier hôte?


Il est inscriptible pour moi. Quel OS avez-vous? Si Windows, utilisez-vous une boîte virtuelle?


J'utilise docker sur Ubuntu-1604. Cela fonctionne pour les modèles: $ {PWD} /templates:/opt/nifi/nifi-1.9.2/conf/templates, mais cela ne fonctionne pas pour les éléments suivants: flowfile_directory, content_directory, provenance_directory. L'avez-vous essayé pour ces dossiers?



1
votes

Vous pouvez également utiliser uniquement docker-compose stop au lieu de docker-compose down , ce qui ne supprimera pas votre conteneur et gardera ainsi les volumes montés.

Cela signifie vous n'avez pas à faire de mappage de volumes et vous pouvez simplement utiliser ce fichier de base docker-compose:

version: '2'
services:
  futa-nifi-lsc:
    environment:
      - NIFI_WEB_HTTP_PORT=9000
    image: apache/nifi:1.8.0
    volumes:
      - ./jdbc_driver:/opt/jdbc_driver
      - ./checkin_files:/opt/checkin_files
      - ./truststore:/opt/truststore
    ports:
      - "9000:9000"

Pour plus d'informations, lisez cet article ici .


0 commentaires

4
votes

Une mise à jour de mon côté. Apache Nifi a changé ses répertoires après la 1.8.0. Vous devez donc utiliser ce qui suit:

volumes:
      - ./nifi_state:/opt/nifi/nifi-current/state
      - ./nifi_db:/opt/nifi/nifi-current/database_repository
      - ./nifi_flowfile:/opt/nifi/nifi-current/flowfile_repository
      - ./nifi_content:/opt/nifi/nifi-current/content_repository
      - ./nifi_provenance:/opt/nifi/nifi-current/provenance_repository   


0 commentaires

1
votes

MODIFICATION FINALE: Après de nombreux tests et essais, le seul moyen que j'ai trouvé pour persister Nifi avec docker swarm a été le suivant:

Étape 1: créer le volume nifi_data

version: "3.7"
services:
  nifi:
    image: apache/nifi:1.9.2
    ports:
      - target: 8080
        published: 9090
        protocol: tcp
        mode: host
    environment:
      - NIFI_WEB_HTTP_HOST=0.0.0.0
      - NIFI_HOME=/home/nifi
      - NIFI_LOG_DIR=/home/nifi/logs

    volumes:
      - nifi_data:/home/nifi

volumes:
  nifi_data:
    external: true

Étape 2: Démarrez la pile avec la configuration suivante

docker stack rm nifi

Étape 3: Entrez le conteneur

$ cd /opt/nifi/nifi-current
$ cp -r ./* /home/nifi

Étape 4: Copiez le courant dans la maison

$ docker exec -it <container_id> bash

Étape 5: Supprimer la pile déployée

version: "3.7"
services:
  nifi:
    image: apache/nifi:1.9.2
    ports:
      - target: 8080
        published: 9090
        protocol: tcp
        mode: host
    environment:
      - NIFI_WEB_HTTP_HOST=0.0.0.0
      #- NIFI_HOME=/home/nifi
      #- NIFI_LOG_DIR=/home/nifi/logs

    volumes:
      - nifi_data:/home/nifi

volumes:
  nifi_data:
    external: true

Étape 6: Déployer la pile avec la configuration suivante (juste supprimée le #)

$ docker volume create nifi_data


0 commentaires

0
votes
version: '3.7'

services:

  zookeeper:  # the configuration manager
    hostname: zookeeper
    container_name: zookeeper
    image: 'bitnami/zookeeper:latest'
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes

  nifi:
    image: apache/nifi:latest
    ports:
      - 8080 # Unsecured HTTP Web Port
    environment:
      - NIFI_WEB_HTTP_PORT=8080
      - NIFI_CLUSTER_IS_NODE=true
      - NIFI_CLUSTER_NODE_PROTOCOL_PORT=8082
      - NIFI_ZK_CONNECT_STRING=zookeeper:2181
      - NIFI_ELECTION_MAX_WAIT=1 min
    volumes:
      - ./nifi/state:/opt/nifi/nifi-current/state
      - ./nifi/db:/opt/nifi/nifi-current/database_repository
      - ./nifi/flowfile:/opt/nifi/nifi-current/flowfile_repository
      - ./nifi/content:/opt/nifi/nifi-current/content_repository
      - ./nifi/provenance:/opt/nifi/nifi-current/provenance_repository
      - ./nifi/logs:/opt/nifi/nifi-current/logs


1 commentaires

Veuillez ajouter une explication