Apache kafka 卡夫卡生产者读取数据文件

Apache kafka 卡夫卡生产者读取数据文件,apache-kafka,kafka-producer-api,Apache Kafka,Kafka Producer Api,我试图在循环中加载一个数据文件(检查统计数据),而不是卡夫卡中的标准输入。下载卡夫卡后,我执行了以下步骤: 已启动zookeeper: bin/zookeeper-server-start.sh config/zookeeper.properties 已启动的服务器: bin/kafka-server-start.sh config/server.properties 创建了一个名为“测试”的主题: 制片人说: bin/kafka-console-producer.sh --broker-l

我试图在循环中加载一个数据文件(检查统计数据),而不是卡夫卡中的标准输入。下载卡夫卡后,我执行了以下步骤:

已启动zookeeper:

bin/zookeeper-server-start.sh config/zookeeper.properties
已启动的服务器:

bin/kafka-server-start.sh config/server.properties
创建了一个名为“测试”的主题:

制片人说:

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

我想将一个数据文件传递给生产者,消费者可以直接看到,而不是标准输入。或者是否有卡夫卡制作者而不是控制台使用者,我可以使用它们读取数据文件。任何帮助都将不胜感激。谢谢

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

cat ${datafile} | ${kafka_home}/bin/kafka-console-producer.sh --broker-list ${brokerlist} --topic test 
您也可以尝试该实用程序。 Github上的自述文件提供了一些示例

如果您能分享哪种工具最适合您,那就太好了:)

KafkaCat自述的详细信息:

从stdin读取消息,通过快速压缩生成“syslog”主题

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

若始终只有一个文件,那个么只需使用tail命令,然后通过管道将其传输到kafka控制台生成器

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

kafka-console-product.sh\
kafka-console-produce.sh \
  --broker-list localhost:9092 \
  --topic my_topic \
  --new-producer < my_file.txt
--代理列表本地主机:9092\ --主题我的主题\ --新生产者
遵循此链接:

卡夫卡内置了此功能,用于将文件内容传送到制作者(文件源),或将文件内容定向到另一个目标(文件接收器)

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

因此,命令将是:

bin/connect-standalone.sh config/connect-standalone.properties config/connect-file-source.properties

如果您使用Linux或Mac,最简单的方法是:

kafka-console-producer --broker-list localhost:9092 --topic test < messages.txt
kafka控制台生产者——代理列表localhost:9092——主题测试
参考:
下面的命令当然是最简单的方法

kafka-console-producer --broker-list localhost:9092 --topic test < message.txt
kafka控制台生产者——代理列表localhost:9092——主题测试
但有时它无法找到文件。 例如:

C:\kafka_2.11-2.4.0\bin\windows>kafka-console-producer.bat --broker-list localhost:9092 --topic jason-input < C:\data\message.txt
C:\kafka_2.11-2.4.0\bin\windows>kafka-console-producer.bat--代理列表localhost:9092--主题jason输入
您给出了实际路径,但它无法在当前位置找到C,因此它将给出错误:file not found。我们会认为,我们已经给出了实际的路径,所以它将进入根,它将从那里开始路径,但它正在当前位置找到C(根)

解决方案是将..\放入移动到父文件夹的路径中。 例如 您执行的命令如下所示

C:\kafka_2.11-2.4.0\bin\windows>kafka-console-producer.bat --broker-list localhost:9092 --topic jason-input < ..\..\..\data\message.txt
C:\kafka_2.11-2.4.0\bin\windows>kafka-console-producer.bat——代理列表localhost:9092——主题jason输入<..\..\data\message.txt

现在我已进入windows文件夹…\将当前目录移动到bin文件夹,然后再次..\将当前目录移动到kafka。。。。文件夹,然后再次..\将移动到C:。现在我的道路开始了。数据,然后是message.txt

或者,如果您想读取整个文件,然后继续跟踪后续追加的行,您可以使用
tail-f-n+1 file_path
,而不是
cat
。卡夫卡有内置的文件源连接器,它是为这样的任务而设计的:将单个文件读入生产者,以便消费者获取数据。请看下面我的答案。您能给出
config/connect file source.properties
config/connect standalone.properties
的内容示例吗?这里有一个更详细的解释,我尝试了这个答案,但给出了错误:没有找到文件,然后我尝试给出实际路径,如C:\data\messages.txt,但同样的错误在那里。然后我尝试..\在路径中,这意味着父文件夹,但在那里我感到困惑,所以我使用tab there查看那里的文件。哎呀!成功了。它无法找到该文件,因为它正在同一位置搜索。i、 e.我给出了它试图将c搜索到当前位置的路径c:\data\message.txt。所以我需要用父文件夹commant移动它,它是\
C:\kafka_2.11-2.4.0\bin\windows>kafka-console-producer.bat --broker-list localhost:9092 --topic jason-input < ..\..\..\data\message.txt