2017-10-06 22 views
1

J'essaie d'utiliser le fichier comme producteur de kafka. Le fichier source augmente continuellement (disons 20 enregistrements/lignes par seconde). Ci-dessous un poste similaire à mon problème:Comment utiliser un fichier en croissance en tant que producteur Apache Kafka et lire uniquement les données nouvellement ajoutées

How to write a file to Kafka Producer

Mais dans ce cas, est lu le dossier entier et ajouté au sujet Kafka chaque fois qu'une nouvelle ligne est insérée dans le fichier. Je souhaite que seules les lignes nouvellement ajoutées soient envoyées au sujet (si le fichier contient déjà 10 lignes et que 4 autres lignes y sont ajoutées, seules ces 4 lignes doivent être envoyées au sujet).

Existe-t-il un moyen d'y parvenir?

Autres solutions essayées:

  1. Apache en utilisant le type flume source comme 'spooldir'. Mais cela ne servait à rien car il lit les données de nouveaux fichiers ajoutés au répertoire et non lorsque les données sont ajoutées à un fichier déjà lu.

  2. Aussi nous avons essayé avec flume type de source comme 'exec' et commande comme 'queue -F/chemin/file-name'. Cela aussi ne semble pas fonctionner.

Suggestions pour l'utilisation de tout autre outil est également accueilli comme mon objectif est de lire les données du fichier en temps réel (ie. J'ai besoin des données dès qu'il est inséré dans le fichier).

+0

Avez-vous essayé [FileSource Connector] (https://docs.confluent.io/current/connect/connect-filestream/filestream_connector.html) de Kafka Connect? –

+0

Merci Chin Huang. Je n'étais pas au courant du connecteur. Ca a marché :) – Sindhu

Répondre

0

Vous avez le choix parmi plusieurs options, selon vos besoins.

Kafka Connect

Comme indiqué par Chin Huang au-dessus du connecteur FileSource de Kafka Connect devrait être en mesure de faire ce que vous voulez sans installer de logiciel supplémentaire. Consultez le Connect Quickstart pour obtenir des conseils sur la façon de le faire fonctionner, ils ont en fait un exemple pour lire un fichier dans Kafka.

Logstash

Logstash est l'option classique pour quelque chose comme ça, avec sa sortie Kafka il fera tout ce que vous voulez faire, pour un ou plusieurs fichiers Muliple. La configuration suivante devrait vous donner à peu près ce que vous voulez.

input { 
    file { 
    path => "/path/to/your/file" 
    } 
output { 
    kafka { 
     bootstrap_servers => "127.0.0.1:9092" 
     topic_id => "topicname" 
    } 
} 

Filebeat

Filebeat est assez similaire à Logstash, il offre moins de fonctionnalités que si vous souhaitez effectuer un traitement supplémentaire des données lues à partir du fichier. En outre, il est écrit en Go au lieu de Java, de sorte que l'empreinte sur la machine de son fonctionnement devrait être plus petit. Ce qui suit doit être une configuration minimale pour vous aider à démarrer (de la mémoire, vous devrez peut-être ajouter un paramètre ou deux si elles sont obligatoires):

filebeat.prospectors: 
- type: log 
    paths: 
    - /path/to/your/file 

output.kafka: 
    hosts: ["127.0.0.1:9092"] 
    topic: 'topicname' 

Flume

Si vous voulez revoir votre option Flume, jetez un oeil à la TaildirSource, je ne l'ai pas utilisé, mais il semble que cela devrait aller très bien à votre cas d'utilisation.

+0

Toutes les solutions proposées ont fonctionné pour moi :) Merci beaucoup :) – Sindhu