apache / apache/pulsar-client-cpp
Add cluster-level automatic failover support (AutoClusterFailover)
- Vorherrschende Sprache
- C++
- Sterne
- 71
- Forks
- 90
- Ø Merge
- 2 Std. 33 Min.
- Gemergte PRs (30 T.)
- 3
Beschreibung
**Summary**
The C++ client does not support cluster-level failover — the ability for a Pulsar client to automatically switch from a primary cluster to a secondary cluster when the primary becomes unavailable.
**Context**
The Java client has supported this since Pulsar 2.10 (May 2022) via `AutoClusterFailover` and `ControlledClusterFailover`, both built on the `ServiceUrlProvider` abstraction. The .NET client (Pulsar.Client) has also independently implemented equivalent functionality via `IServiceInfoProvider`. The C++ client still lacks this capability. Since the C++ client is the foundation for several language bindings (Node.js, Python), this gap propagates across multiple client ecosystems. Adding cluster-level failover here would bring the C++ client to parity with Java and unblock the same capability in downstream clients.
**Proposed Behavior**
1. A `ServiceUrlProvider` (or equivalent) abstraction that allows pluggable URL resolution.
2. An `AutoClusterFailover` implementation that:
- Accepts a primary service URL and one or more secondary service URLs.
- Runs a background probe task at a configurable `checkInterval` (default: 30s).
- Switches to the first healthy secondary if the primary is unreachable for longer than `failoverDelay` (default: 30s).
- Switches back to the primary once it recovers and stays healthy for `switchBackDelay` (default: 60s).
- Supports per-cluster authentication and TLS configuration.
**Use Case**
Pulsar deployments with geo-replication across multiple regions need producer clients to automatically failover to a secondary cluster when their local cluster becomes unavailable, without requiring DNS-level failover or application-level detection logic.
Beitragsleitfaden
Rechercherichtung
Beginne mit dem Vergleich der Java-Implementierungen von AutoClusterFailover und ControlledClusterFailover sowie des im Issue erwähnten .NET-Designs von IServiceInfoProvider. Definiere die C++-Abstraktion ServiceUrlProvider und das Failover-Verhalten einschließlich Gesundheitsprüfungen, Verzögerungen, Authentifizierung und TLS; abgeschlossen ist die Aufgabe, wenn der Wechsel von primär zu sekundär und die Wiederherstellung durch Tests abgedeckt sind.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- cpp
- Bereich
- distributed-systems, networking
- Issue-Typ
- Feature
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Ruhig
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100