如果无法访问Flume,则向Flume源发送停止信号

hmtdttj4  于 2021-06-04  发布在  Flume
关注(0)|答案(1)|浏览(231)

我正在尝试使用flume将访问日志发送到spark集群。但是有很多限制,迫使我编写一个自定义应用程序(或flume源代码)来读取日志文件。
我要做的是让flume客户端向这个源发送信号,以防它无法将数据写入接收器。因为我们经常有长时间的网络中断,并且在网络恢复之前没有足够的磁盘空间来排队等待磁盘上的失败日志。相反,我想“告诉”源停止读取日志,直到网络启动,然后“告诉”它重新开始。但到目前为止,我还没有看到任何关于文档中错误的回调。
不管怎样,我能在不重新发明轮子的情况下实现这样的场景吗?

a6b3iqyw

a6b3iqyw1#

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

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

flume解析一个文件,并将该文件的行转换为flumeevents,后者被假脱机到通道。这种情况会尽快发生,至少在通道已满之前是如此。如果通道已满,则源将退出,直到通道再次接受记录。您可以通过指定通道可以保存的内存和记录量来控制通道的容量。
avrosink将读取该频道。如果avrosink由于网络中断而无法提交事件,它将停止从通道中消费,从而导致通道已满。
此时,您将在flume的日志文件中看到消息,指示接收器无法跟上源,这是预期的行为,因为您的通道充当(不可靠)接收器的后缓冲区。您不会遇到事件的重复处理,但是如果选择非持久通道类型(如memorychannel),则可能会导致某些事件中断。

相关问题