积压
为了避免积压,Fluent Bit 在引擎中实现了一种限制输入插件可摄取的数据量的机制,这是通过配置参数 Mem_Buf_Limit 来实现的。
{% hint style=”info” %}
如缓冲概念部分中所述,Fluent Bit 提供了用于数据处理的混合模式: 和 filesystem
(可选的)。
是始终可用的,并且可以通过 Mem_Buf_Limit 参数进行限制。如果您的插件由于配置而受到限制,并且系统处于积压的情况下,则在刷新内存中的数据块之前,您将无法提取更多数据。
如果除了 t 之外,输入插件还定义了 filesystem
的 (如中所述),则在达到限制时,所有新数据将安全地存储在文件系统中。
{% endhint %}
默认情况下,此选项是禁用的,并且可以应用于所有输入插件。让我们使用以下场景来说明其行为:
- Mem_Buf_Limit 设置为 1MB
- 输入插件尝试追加 700KB 的数据
- 输出插件后端(HTTP 服务)关闭
- 引擎调度程序将在 10 秒后重试将数据刷入输出插件
- 输入插件尝试追加 500KB 的数据
此时,引擎将允许将这 500KB 数据追加到引擎中: 总共有 1.2MB。这些选项在达到限制之前以宽容模式工作,但是超出限制会执行以下操作:
- 阻塞输入插件的本地缓冲区(不能再追加数据)
几秒钟后,如果调度程序能够将最初的 700KB 数据刷入后端输出或在重试后丢弃了这些数据,则数据的内存将被释放,并且内部将发生以下操作:
- 释放数据缓冲区(700KB)后,内部计数器将更新
- 计数器现在设置为 500KB
- 由于 500KB 未超过 Mem_Buf_Limit 设置的 1MB,它将检查输入插件状态
- 如果插件处于 paused 状态 ,它将调用 resume 回调
关于 pause 和 resume 回调
每个插件都是独立的,并非所有插件都实现 pause 和 resume 回调。如前所述,这些回调只是插件的通知机制
实现并保持良好状态的一个插件是 Tail 输入插件。触发 pause 回调时,它将停止其收集器并停止追加数据。直到 resume 触发后,它将重新启用收集器。