1

我正在尝试使用 Flume 将我的访问日志发送到 Spark 集群。但是有很多限制迫使我编写自定义应用程序(或 Flume 源)来读取日志文件。

我要做的是让 Flume 客户端向这个源发出信号,以防它无法将数据写入接收器。由于我们经常有长时间的网络中断,并且没有足够的磁盘空间来排队磁盘上的失败日志,直到网络备份。相反,我想“告诉”源停止阅读日志,直到网络启动,然后“告诉”它重新开始。但到目前为止,我还没有在文档中看到任何关于错误的回调。

无论如何我可以在不重新发明轮子的情况下实现这种情况吗?

4

1 回答 1

0

好的,现在我们已经澄清了几个问题,这就是实际发生的情况:

Flume Source - SpoolDir or similar -> Channel -> AvroSink (SparkStreaming)

Flume 解析一个文件并将该文件的行转换为 FlumeEvents,这些事件被假脱机到 Channel。这种情况会尽快发生,至少在通道满之前是这样。如果 Channel 已满,则源将后退,直到 Channel 再次接受记录。您可以通过指定通道可以保存的内存和记录数量来控制通道的容量。

AvroSink 将读取该通道。如果 AvroSink 由于网络中断而无法提交事件,它将停止从通道消费,从而导致通道满。

那时您将在 Flume 的日志文件中看到消息,指示接收器无法跟上源,这是预期的行为,因为您的通道充当(不可靠)接收器的后备缓冲区。您不会遇到重复处理事件,但是如果您选择非持久通道类型(例如 MemoryChannel),您可能会丢失一些事件以中断。

于 2015-09-08T16:29:24.337 回答