web-dev-qa-db-ja.com

ファイルをKafka Producerに書き込む方法

Kafkaで標準入力の代わりに単純なテキストファイルをロードしようとしています。 Kafkaをダウンロードした後、次の手順を実行しました。

Zookeeperを開始しました:

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

起動したサーバー

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

「test」という名前のトピックを作成しました。

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

プロデューサーの実行:

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

消費者が聞いた:

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

標準入力の代わりに、コンシューマが直接見ることができるデータファイルまたは単純なテキストファイルをプロデューサに渡します。どんな助けも本当に感謝されます。ありがとう!

28
Katie

パイプすることができます:

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

見つかった ここ

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

kafka-0.9.0で働いていました

6
prabhugs

少し一般化されているが、単純なファイルではやり過ぎかもしれないいくつかの方法があります

tail

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

説明

  1. tailは、ファイルが大きくなるか、ログが継続的に追加されるにつれて、ファイルの末尾から読み取ります
  2. -n0はoutputlast 0行を示すため、新しい行のみが選択されます
  3. -Fは記述子の代わりに名前でファイルの後に来るため、回転しても機能します

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));
} 

消費

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

説明(from 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