内存队列

编辑

默认情况下,Logstash 在管道阶段(输入 → 管道工作线程)之间使用内存中有界队列来缓冲事件。如果 Logstash 遇到临时的机器故障,内存队列的内容将会丢失。临时的机器故障是指 Logstash 或其主机异常终止,但能够重新启动的情况。

内存队列的优点

编辑

如果相对于数据弹性,您更看重吞吐量,那么内存队列可能是一个不错的选择。

  • 配置更简单
  • 管理和维护更简单
  • 吞吐量更快

内存队列的局限性

编辑
  • 在异常终止时可能丢失数据
  • 不能很好地处理突然的数据爆发,在这种情况下需要额外的容量来让 Logstash 赶上进度

考虑使用持久队列来避免这些局限性。

内存队列大小

编辑

内存队列的大小不是直接配置的。相反,它取决于您如何调整 Logstash。

它的上限由 pipeline.workers (默认值:CPU 数量) 乘以 pipeline.batch.size (默认值:125) 个事件定义。这个值称为“正在处理计数”,它决定了每个内存队列中可以容纳的最大事件数。

将工作线程数翻倍或将批处理大小翻倍都会有效地使内存队列的容量(和内存使用量)翻倍。两者都翻倍将会使容量(和使用量)翻四倍

每个管道都有自己的队列。

有关调整 pipeline.batch.sizepipeline.workers 的影响的更多信息,请参阅 调整和分析 Logstash 管道性能

如果您需要吸收突发流量,请考虑改用持久队列。持久队列与磁盘上分配的容量绑定。

影响队列大小的设置

编辑

这些值可以在 logstash.ymlpipelines.yml 中配置。

pipeline.batch.size
在发送到过滤器 + 工作线程之前,从输入中检索的事件数。默认值为 125。
pipelines.workers
将并行执行管道的过滤器 + 输出阶段的工作线程数。此值默认为主机 CPU 核心数。

背压

编辑

当队列已满时,Logstash 会对输入施加背压,以阻止数据流入 Logstash。这种机制有助于 Logstash 控制输入阶段的数据流速率,而不会使 Elasticsearch 等输出不堪重负。

每个输入独立处理背压。