如何连续读取Kafka的文件?

时间:2015-12-30 08:50:20

标签: apache-kafka

我是卡夫卡的新手。

我已经尝试了一些文件阅读示例并将其应用于我的项目几周。但是,我的申请似乎没有按照我的意愿运作,所以我要求你的建议。

我的意图是:

  1. Kafka制作人从目录A中读取文件。
  2. Storm会消耗从1开始生成的数据。
  3. 将读取文件移至其他目录。
  4. 条件:

    1. 文件不断发送到目录A。
    2. 这是一个简单的逻辑,但它给我带来了麻烦。

      到目前为止,我已经在我的本地计算机eclipse上创建并测试了Kafka生产者代码。

      我的想法是,因为kafka制作人应继续阅读文件,即使目录A中的所有文件都被读取,该过程也必须保持活跃。 但是,只要目录A中的所有文件都已被读取并发送,它就会终止。

      我在一个包含3个代理的节点上运行Kafka,以下是Producer属性设置。

      Properties props = new Properties();
      
      props.put("metadata.broker.list", "localhost:9092");
      props.put("serializer.class", "kafka.serializer.StringEncoder");
      props.put("producer.type", "sync");
      props.put("request.required.acks", "1");
      

      使用以下命令创建主题。

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

      我认为在卡夫卡的建筑视角下,不断阅读文件是错误的吗? 还是有一种方法我还没找到? 如果有人能回答我的问题,我将非常感激。

2 个答案:

答案 0 :(得分:0)

您应该使用kafka.serializer.DefaultSerializer(二进制) 你如何监视新文件的文件夹? 您可以使用apache.commons.io.monitor之类的内容。看看here

你被困在哪里?你需要解决的问题是什么(错误信息,真的是什么)? 问,因为看起来你想要一个完整的解决方案,这不是SO所提供的。深入研究并询问具体问题,当然也可以发布代码。

答案 1 :(得分:0)

通过使用Kafka Connect

#File connect-standalone.properties

#bootstrap kafka servers
bootstrap.servers=localhost:9092
key.converter=org.apache.kafka.connect.json.JsonConverter
value.converter=org.apache.kafka.connect.json.JsonConverter
key.converter.schemas.enable=false
value.converter.schemas.enable=false

# local file storing offsets and config data
offset.storage.file.filename=/tmp/connect.offsets
offset.flush.interval.ms=10000
plugin.path=C:\\KafkaSetup\\kafka_2.13-2.4.0\\libs

# File myFileConnector.properties 
name=local-file-source
connector.class=org.apache.kafka.connect.file.FileStreamSourceConnector
tasks.max=1
file=C:\\KafkaSetup\\input\\data.txt
topic=aryan_topic

#Command
C:\KafkaSetup\kafka_2.13-2.4.0\bin\windows>connect-standalone.bat C:\\KafkaSetup\\kafka_2.13-2.4.0\\config\\connect-standalone.properties C:\\KafkaSetup\\kafka_2.13-2.4.0\\config\\myFileConnector.properties 

#data.txt contains
Hello By Arun

#Kafka client
C:\KafkaSetup\kafka_2.13-2.4.0\bin\windows>kafka-console-consumer --bootstrap-server 127.0.0.1:9094 --topic aryan_topic
i]3
gh
"Hello By Arun"