【发布时间】:2017-11-07 13:46:37
【问题描述】:
我的过程不时创建大量文件,我想将文件从本地目录传输到 HDFS 中的某个位置,而不是使用 NiFi,是否可以在 java 中开发该流程。如果是,请通过提供一些 Java 参考代码来指导我。
请帮帮我!
【问题讨论】:
标签: java apache-kafka kafka-consumer-api kafka-producer-api
我的过程不时创建大量文件,我想将文件从本地目录传输到 HDFS 中的某个位置,而不是使用 NiFi,是否可以在 java 中开发该流程。如果是,请通过提供一些 Java 参考代码来指导我。
请帮帮我!
【问题讨论】:
标签: java apache-kafka kafka-consumer-api kafka-producer-api
你可以做几件事:-
1) 使用 Apache 水槽:- https://www.dezyre.com/hadoop-tutorial/flume-tutorial。这个页面说:-“Apache Flume 是一个分布式系统,用于将文件聚合到一个位置。”这个解决方案应该比使用 kafka 更好,因为它是专门为文件设计的。
2) 编写 Java 代码以 ssh 到您的机器并扫描在特定时间戳之后修改的文件。如果您发现此类文件打开一个输入流并将其保存在您的 Java 代码正在运行的机器上。
3) 或者,您的 java 代码可以在您正在创建文件的机器上运行,您可以扫描在特定时间戳之后创建的文件并将它们移动到任何新机器
4) 如果你只想使用 kafka。您可以编写一个 java 代码来读取文件,找到最新的文件/行并将其发布到 kafka 主题。 Flume 可以开箱即用地完成所有这些工作。
【讨论】:
不知道Kafka中消息大小是否有限制,但是可以在生产者/消费者属性中使用ByteArraySerializer。将您的文件转换为字节,然后在消费者上重建它。
快速搜索我找到了这个
message.max.bytes(默认值:1000000)- 消息的最大大小 经纪人会接受。这必须小于消费者 fetch.message.max.bytes,否则代理将有无法获取的消息 被消费,导致消费者挂起。
【讨论】: