web-dev-qa-db-fra.com

Comment écrire un fichier dans Kafka Producer

J'essaie de charger un fichier texte simple au lieu d'une entrée standard dans Kafka. Après avoir téléchargé Kafka, j'ai exécuté les étapes suivantes:

Zookeeper a commencé:

bin/zookeeper-server-start.sh config/zookeeper.properties

Serveur démarré

bin/kafka-server-start.sh config/server.properties

Création d'un sujet nommé "test":

bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test

Ran le producteur:

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test 
Test1
Test2

Écouté par le consommateur:

bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
Test1
Test2

Au lieu de l'entrée Standard, je souhaite transmettre au producteur un fichier de données ou même un simple fichier texte, que le consommateur peut consulter directement. Toute aide serait vraiment appréciée. Merci!

28
Katie

Vous pouvez l'acheminer dans:

kafka-console-producer.sh --broker-list localhost:9092 --topic my_topic
--new-producer < my_file.txt

Trouvé ici .

À partir de 0.9.0:

kafka-console-producer.sh --broker-list localhost:9092 --topic my_topic < my_file.txt
63
Balázs Németh
$ kafka-console-producer.sh --broker-list localhost:9092 --topic my_topic < my_file.txt

a travaillé pour moi dans Kafka-0.9.0

6
prabhugs

Voici quelques moyens qui sont un peu plus généralisés mais peuvent être exagérés pour un fichier simple

tail

tail -n0 -F my_file.txt | kafka-console-producer.sh --broker-list localhost:9092 --topic my_topic

Explication

  1. tail lit à partir de la fin du fichier à mesure qu'il grandit ou que des journaux y sont ajoutés en permanence
  2. -n0 indique les dernières lignes de sortie 0, seule la nouvelle ligne est sélectionnée
  3. -F suit le fichier nom par nom plutôt que le descripteur, donc il fonctionne même s'il est pivoté

syslog-ng

options {                                                                                                                             
    flush_lines (0);                                                                                                                
    time_reopen (10);                                                                                                               
    log_fifo_size (1000);                                                                                                          
    long_hostnames (off);                                                                                                           
    use_dns (no);                                                                                                                   
    use_fqdn (no);                                                                                                                  
    create_dirs (no);                                                                                                               
    keep_hostname (no);                                                                                                             
};

source s_file {
    file("path to my-file.txt" flags(no-parse));
}


destination loghost {
    tcp("*.*.*.*" port(5140));
} 

consommant

nc -k -l 5140 | kafka-console-producer.sh --broker-list localhost:9092 --topic my_topic

Explication (de man nc)

-k' Forces nc to stay listening for another connection after its current connection is completed. It is an error to use this option without the -l option.

-l' Used to specify that nc should listen for an incoming connection rather than initiate a connection to a remote Host. It is an error to use this option in conjunction with the -p, -s, or -z options. Additionally, any timeouts specified with the -w option are ignored.

Ref

Syslog-ng

4
Confused
echo "Hello" | kafka-console-producer.sh --broker-list localhost:9092 --topic my_topic
1
Dheeraj R