在Flume中将多个接收器分组到接收器组中的优势是什么?

时间:2017-03-02 06:02:08

标签: flume

我读到在水槽组中有两个水槽,如果一个水槽下降,另一个水槽将取代它。但是我看到最多有8个接收器的代理分为4个接收器组。我的问题是:

  • 对于必要的那么多??
  • 您如何估算代理商的最佳汇款数量?

1 个答案:

答案 0 :(得分:0)

我找到了有关该主题的信息,如果有人可以添加其他内容,我们将不胜感激:

接收组和接收处理器

Flume配置框架为每个接收器组实例化一个接收器运行器以运行接收器组。每个接收器组可以包含任意数量的接收器。接收器运行器不断要求接收器组询问其中一个接收器以从其自己的通道读取事件。接收器组通常用于以负载平衡或故障转移方式在层之间发送数据。

重要的是要了解接收器组中的所有接收器同时不活动;其中只有一个是在任何时间点发送数据。因此,不应使用接收器组来更快地清除通道 - 在这种情况下,应简单地将多个接收器设置为在没有接收器组的情况下自行操作,并且应将它们配置为从同一通道读取。

接收器组按以下方式定义:

agent.sinkgroups = sg1 sg2

然后为每个接收器组配置一组接收器,这些接收器是该组的一部分。活动的接收器集中的接收器列表优先于作为接收器组的一部分指定的接收器列表。

agent.sinks = s1 s2 s3 s4
agent.sinkgroups.sg1.sinks = s1 s2
agent.sinkgroups.sg2.sinks = s3 s4

接收器组中的每个接收器必须单独配置。这包括关于接收器从哪个通道读取的配置,它将数据写入哪个主机或群集等等。理想情况下,如果在接收器组中设置了多个接收器,则所有接收器将从同一通道读取 - 这有助于清除当前层中的数据以合理的速度运行,但确保以支持负载平衡和故障转移的方式将数据发送到多台计算机。

对于清除通道比单个接收器组能够做得更快的情况,但是还需要将代理设置为向多个主机发送数据,可以添加多个接收器组,每个接收器组带有类似配置的接收器。这可确保每个代理程序向目标代理程序打开更多连接,同时还允许在需要时将数据推送到多个代理程序。这样可以更快地清除通道,同时确保自动进行负载平衡和故障转移。

接收器处理器是决定在任何时间点哪个接收器处于活动状态的组件。请注意,接收器处理器与接收器不同。接收器运行器实际上运行接收器,而接收器处理器决定哪个接收器应从其通道中拉出事件。当接收器运行器要求接收器组告知其中一个接收器将事件从其通道中拉出并将它们写入下一跳(或存储器)时,接收器处理器是实际选择执行此处理的接收器的组件。

Flume捆绑了两个接收器处理器:负载平衡接收器处理器和故障转移接收器处理器。

负载平衡接收器

具有负载平衡接收器处理器的接收器组,它将从接收器组中的所有接收器中选择一个来处理来自通道的事件。 接收器的选择顺序可以配置为随机或循环。如果顺序设置为随机,则随机选择接收器组中的一个接收器以从其自己的通道中移除事件并将其写出。循环方式:每个进程循环按接收器组定义中指定的顺序调用下一个接收器的进程方法。如果该接收器正在写入失败的代理或写入速度太慢而导致超时的代理,则接收器处理器将选择另一个接收器来写入数据。 负载平衡接收器处理器按以下方式配置:

  

此配置将接收器组设置为使用负载平衡接收器   处理器随机选择s1,s2,s3或s4中的一个。如果其中之一   接收器(或更准确地说,接收器正在发送数据的代理程序)   to)失败,接收器将在退避期间被列入黑名单   从250毫秒开始,然后以指数方式增加,直到   它达到10秒。在此之后,水槽后退10   每次写入失败时的秒数,直到它能够写入数据   成功,此时退避重置为0.如果值   选择器参数的设置为round_robin,要求s1   首先处理数据,然后是s2,然后是s3,然后是s4,再次是s1。

agent.sinks = s1 s2 s3 s4
agent.sinkgroups = sg1
agent.sinkgroups.sg1.sinks = s1 s2 s3 s4
agent.sinkgroups.sg1.processor.type = load_balance
agent.sinkgroups.sg1.processor.selector = random
agent.sinkgroups.sg1.processor.backoff = true
agent.sinkgroups.sg1.processor.selector.maxTimeOut = 10000

此配置意味着在任何时间点只有一个接收器正在从每个代理写入数据。这可以通过添加具有类似配置的负载平衡接收器处理器的多个接收器组来修复。

故障转移接收器

故障转移接收器处理器根据优先级从接收器组中选择接收器。具有最高优先级的接收器写入数据直到其失败,然后拾取组中其他接收器中具有最高优先级的接收器。仅当写入数据的当前接收器失败时,才选择不同的接收器来写入数据。这意味着即使具有最高优先级的代理可能已经失败并重新联机,故障转移接收器处理器也不会使接收器写入该代理,直到当前活动的接收器发生错误。这可确保第二层上的所有代理在没有故障时从每台机器上写入一个接收器,只有在发生故障时,某些机器才能看到更多的传入数据。

如果没有为特定接收器设置优先级,则基于接收器组配置中指定的接收器的顺序确定接收器的优先级。每次接收器无法写入数据时,接收器都被认为已经失败并在短时间内被列入黑名单。此黑名单时间间隔(类似于负载平衡接收器处理器中的退避时间段)随着每次导致失败的连续尝试而增加,直到达到maxpenalty指定的值(以毫秒为单位)。一旦黑名单间隔达到此值,进一步的故障将导致在许多毫秒之后尝试接收器。在此之后接收器成功写入数据后,退避周期将重置为0.请查看以下示例:

agent.sinks = s1 s2 s3 s4
agent.sinkgroups.sg1.sinks = s1 s2 s3 s4
agent.sinkgroups.sg1.processor.type = failover
agent.sinkgroups.sg1.processor.priority.s2 = 100
agent.sinkgroups.sg1.processor.priority.s1 = 90
agent.sinkgroups.sg1.processor.priority.s4 = 110
agent.sinkgroups.sg1.processor.maxpenalty = 10000

来源:https://www.safaribooksonline.com/library/view/using-flume/9781491905326/ch06.html