XINFO GROUPS

语法
XINFO GROUPS key
可用版本
Redis 开源版 5.0.0
时间复杂度
O(1)
ACL 类别
@read, @stream, @slow,

此命令返回存储在 <key> 处的流的所有消费者组的列表。

默认情况下,为每个组仅提供以下信息

  • name:消费者组的名称
  • consumers:组中的消费者数量
  • pending:组的待处理条目列表 (PEL) 的长度,这些消息已传递但尚未被确认
  • last-delivered-id:传递给组消费者 的最后一个条目的 ID
  • entries-read:传递给组消费者 的最后一个条目的逻辑“读取计数器”
  • lag:流中仍在等待传递给组消费者 的条目数,如果该数量无法确定,则为 NULL。

消费者组延迟

给定消费者组的延迟是组的 entries_read 和流的 entries_added 之间的条目数量。换句话说,它是尚未传递给组消费者 的条目数量。

此指标的值和趋势有助于对消费者组做出扩缩决策。您可以通过向组中添加更多消费者来解决高延迟值,而低延迟值可能表明您可以从组中移除消费者以进行缩减。

Redis 通过维护两个计数器来报告消费者组的延迟:添加到流中的所有条目数量以及消费者组进行的逻辑读取数量。延迟是这两者之间的差值。

流的计数器(XINFO STREAM 命令的 entries_added 字段)在每次 XADD 时递增 1,并计算流在其生命周期内添加的所有条目。

消费者组的计数器 entries_read 是该组已读取条目的逻辑计数器。重要的是要注意,此计数器仅是一种启发式方法,而不是准确的计数器,因此使用了术语“逻辑”。该计数器试图反映组为了达到其当前的 last-delivered-id 应该读取 的条目数量。entries_read 计数器仅在理想世界中准确,其中消费者组从流的第一个条目开始处理其所有条目(即,处理前没有删除任何条目)。

在以下两种特殊情况下,此机制无法报告延迟

  1. 创建或设置消费者组时使用了任意的最后传递 ID(分别是 XGROUP CREATEXGROUP SETID 命令)。任意 ID 是任何不是流的第一个条目 ID、最后一个条目 ID 或零 ("0-0") ID 的 ID。
  2. 删除(使用 XDEL 或修剪操作)了组的 last-delivered-id 和流的 last-generated-id 之间的一个或多个条目。

在这两种情况下,组的读取计数器都被视为无效,并且返回的值设置为 NULL 以表示当前无法获得延迟信息。

但是,延迟信息只是暂时不可用。随着消费者不断处理消息,它将在正常操作期间自动恢复。一旦消费者组将其流中的最后一条消息传递给其成员,它将被设置为正确的逻辑读取计数器,并且可以恢复对其延迟的跟踪。

示例

> XINFO GROUPS mystream
1)  1) "name"
    2) "mygroup"
    3) "consumers"
    4) (integer) 2
    5) "pending"
    6) (integer) 2
    7) "last-delivered-id"
    8) "1638126030001-0"
    9) "entries-read"
   10) (integer) 2
   11) "lag"
   12) (integer) 0
2)  1) "name"
    2) "some-other-group"
    3) "consumers"
    4) (integer) 1
    5) "pending"
    6) (integer) 0
    7) "last-delivered-id"
    8) "1638126028070-0"
    9) "entries-read"
   10) (integer) 1
   11) "lag"
   12) (integer) 1

RESP2/RESP3 回复

数组回复:消费者组的列表。

历史

  • 自 Redis 7.0.0 版本起:添加了 entries-readlag 字段
为此页面评分
回到顶部 ↑