{
  "id": "redis/pubsub-subscriber-queue-full",
  "signature": "ERR Client: subscriber queue full - dropping message",
  "signature_zh": "ERR 客户端：订阅者队列已满 - 丢弃消息",
  "regex": "ERR Client: subscriber queue full - dropping message",
  "domain": "redis",
  "category": "resource_error",
  "subcategory": null,
  "root_cause": "A Pub/Sub subscriber client's output buffer is full, causing Redis to drop messages to prevent the client from being disconnected.",
  "root_cause_type": "generic",
  "root_cause_zh": "发布/订阅订阅者客户端的输出缓冲区已满，导致 Redis 丢弃消息以防止客户端断开连接。",
  "versions": [
    {
      "version": "Redis 6.2.0",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    },
    {
      "version": "Redis 7.0.0",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    },
    {
      "version": "Redis 7.2.0",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    }
  ],
  "os_specific": {},
  "dead_ends": [
    {
      "action": "",
      "why_fails": "Setting an unlimited buffer can cause Redis to run out of memory, leading to OOM kills or performance degradation.",
      "fail_rate": 0.85,
      "condition": "",
      "sources": []
    },
    {
      "action": "",
      "why_fails": "Disabling processing does not address the queue full issue; the client will still fail to consume messages fast enough.",
      "fail_rate": 0.6,
      "condition": "",
      "sources": []
    },
    {
      "action": "",
      "why_fails": "A single subscriber handling many channels increases message volume per client, worsening the queue full condition.",
      "fail_rate": 0.7,
      "condition": "",
      "sources": []
    }
  ],
  "workarounds": [
    {
      "action": "Increase the client output buffer limit for Pub/Sub clients: CONFIG SET client-output-buffer-limit pubsub 32mb 8mb 60. This provides more headroom for message bursts.",
      "success_rate": 0.85,
      "how": "Increase the client output buffer limit for Pub/Sub clients: CONFIG SET client-output-buffer-limit pubsub 32mb 8mb 60. This provides more headroom for message bursts.",
      "condition": "",
      "sources": []
    },
    {
      "action": "Implement backpressure in the subscriber: use a message queue (e.g., Redis list) to buffer messages asynchronously. Example in Python: import redis; r = redis.Redis(); pubsub = r.pubsub(); pubsub.subscribe('channel'); for msg in pubsub.listen(): r.rpush('buffer', msg['data'])",
      "success_rate": 0.9,
      "how": "Implement backpressure in the subscriber: use a message queue (e.g., Redis list) to buffer messages asynchronously. Example in Python: import redis; r = redis.Redis(); pubsub = r.pubsub(); pubsub.subscribe('channel'); for msg in pubsub.listen(): r.rpush('buffer', msg['data'])",
      "condition": "",
      "sources": []
    },
    {
      "action": "Add more subscriber instances to distribute the load: run multiple worker processes each subscribing to a subset of channels.",
      "success_rate": 0.8,
      "how": "Add more subscriber instances to distribute the load: run multiple worker processes each subscribing to a subset of channels.",
      "condition": "",
      "sources": []
    }
  ],
  "workarounds_zh": [
    "Increase the client output buffer limit for Pub/Sub clients: CONFIG SET client-output-buffer-limit pubsub 32mb 8mb 60. This provides more headroom for message bursts.",
    "Implement backpressure in the subscriber: use a message queue (e.g., Redis list) to buffer messages asynchronously. Example in Python: import redis; r = redis.Redis(); pubsub = r.pubsub(); pubsub.subscribe('channel'); for msg in pubsub.listen(): r.rpush('buffer', msg['data'])",
    "Add more subscriber instances to distribute the load: run multiple worker processes each subscribing to a subset of channels."
  ],
  "transition_graph": {
    "leads_to": [],
    "preceded_by": [],
    "frequently_confused_with": []
  },
  "official_doc_url": "https://redis.io/docs/latest/develop/interact/pubsub/",
  "official_doc_section": null,
  "error_code": "ERM",
  "verification_tier": "ai_generated",
  "confidence": 0.86,
  "fix_success_rate": 0.8,
  "resolvable": "true",
  "first_seen": "2024-05-20",
  "last_confirmed": "2024-06-01",
  "last_updated": "2024-06-01",
  "evidence_count": 1,
  "tags": [],
  "locale": "en",
  "aliases": []
}