【问题标题】:Continuously read the appended data from a file in Scala连续从 Scala 文件中读取附加数据
【发布时间】:2018-03-17 19:47:10
【问题描述】:

我正在使用 Kafka 持续监控文件,并且只想从文件中读取附加数据并将其推送到 Kafka 生产者。这是我想要实现的目标:

    val fileName = "abc.txt"
    try {
      val command = "tail -f " + fileName
      val p = Runtime.getRuntime.exec(command)
      for (line <- Source.fromFile(fileName).getLines) {
        val message = line + "\n"
        val producerRecord = new ProducerRecord[String, String]("topicName", message)
      producer.send(producerRecord)

    }
    producer.close()
   }catch {
    case e: Exception => e.printStackTrace()
     }

tail -f 在 Java 中有效,但在 Scala 中无效。我收到以下错误:

java.io.IOException: Cannot run program "tail": CreateProcess error=2, The system cannot find the file specified

如何在 Scala 中实现这一点? 提前致谢!!

【问题讨论】:

  • 为什么要创建p,即“尾”进程,却从不使用它?错误说The system cannot find the file specified。您是否检查过程序是否在可以找到该文件的正确目录中运行?
  • 我的问题是如何在 scala 中使用“p”,因为它是 Java 实现。是的,指定的目录路径中确实包含该文件。
  • 顺便说一句,这段代码已经用 scala 编写了。但是异常处理是java风格的。
  • 通过Java实现我的意思是说我已经使用了java库。
  • 我不明白为什么你不能只使用常规的 Java 方法来消费 p 变量的输出。

标签: scala apache-kafka


【解决方案1】:

我建议你应该为此使用 Kafka 连接器。 Kafka 连接器会将数据从您的文件加载到指定的主题。文件中的任何更改都会直接反映到 Kafka 主题。从该主题中,您可以使用数据。 Refer

【讨论】:

  • 如果文件不断被追加怎么办?它只能读取附加的数据吗?
  • 无论文件中发生什么,它都会反映主题的所有变化。你可以探索一下。 Kafka connect 肯定会简化您的用例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 2015-04-19
  • 1970-01-01
  • 2016-01-11
  • 2021-05-17
  • 1970-01-01
  • 2011-04-17
相关资源
最近更新 更多