2016-02-13 185 views
0

我想加载数据文件在循环(检查统计),而不是在卡夫卡的标准输入。下载卡夫卡之后,我执行以下步骤:卡夫卡生产者读取数据文件

开始饲养员:

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 

而不是标准的投入,我想将数据文件传递,它们可以直接被消费者看到的生产者。或者是否有任何kafka制作者而不是控制台消费者使用我可以读取数据文件。任何帮助真的会被赞赏。谢谢!

回答

1

您可以通过cat读取数据文件并将其传输到kafka-console-producer.sh。

cat ${datafile} | ${kafka_home}/bin/kafka-console-producer.sh --broker-list ${brokerlist} --topic test 
+1

或者,如果你想阅读整个文件,然后继续拖尾随后追加行,你会使用'尾-f -n +1 file_path',而不是“猫”。 –

+0

Kafka具有内置的文件源连接器,用于这种类型的任务:将单个文件读入生产者以供消费者吸取数据。请参阅下面的答案。 – FaithReaper

0

您也可以尝试kafkacat实用程序。 在Github上的自述文件提供的例子

这将是巨大的,如果你能分享其工具的工作最适合你的:)从KafkaCat自述

详情:

从标准输入读取邮件,产生于“系统日志“随着清脆的压缩话题

$ tail -f /var/log/syslog | kafkacat -b mybroker -t syslog -z snappy 
1

如果总是有一个单一的文件,你可以使用tail命令,然后将其管道卡夫卡控制台制造商。

但是,如果在满足某些条件时将创建新文件,则可能需要使用apache.commons.io.monitor来监视创建的新文件,然后重复上述操作。

+0

logstash或filebeat可能会更好 –

0

卡夫卡具有此内置File Stream Connector,对于一个文件的内容输送至生产商(文件源),或指示文件内容到另一个目的地(文件接收器)。

我们有bin/connect-standalone.sh从可以在config/connect-file-source.propertiesconfig/connect-standalone.properties中配置的文件读取。

于是命令将是:

bin/connect-standalone.sh config/connect-standalone.properties config/connect-file-source.properties 
相关问题