+1

Thanks,
Baodi Shi

mattison chao <[email protected]> 于2026年3月17日周二 11:24写道:
>
> +1
>
> - Mattison
>
> On Tue, 17 Mar 2026 at 06:50, Matteo Merli <[email protected]> wrote:
>
> > https://github.com/apache/pulsar/pull/25329
> >
> > # PIP-462: Remove Etcd metadata store backend
> >
> > ## Motivation
> >
> > Apache Pulsar supports multiple metadata store backends through the
> > pluggable `MetadataStore` interface introduced in PIP-45. One of these
> > backends is Etcd, implemented via the `jetcd` client library. While
> > the Etcd backend has been available since the metadata store
> > abstraction was introduced, it has seen very limited adoption in
> > production environments.
> >
> > Maintaining Etcd support imposes several costs on the project:
> >
> > 1. **Dependency burden**: The `jetcd-core` library pulls in a large
> > transitive dependency tree (gRPC, Netty, Vert.x, and others) that
> > conflicts with dependencies used elsewhere in Pulsar. This required
> > creating a dedicated shading module (`jetcd-core-shaded`) with
> > relocations for `io.vertx` and `io.netty` packages.
> >
> > 2. **Distribution size**: The shaded jetcd JAR and its transitive
> > dependencies increase both the Pulsar tarball and Docker image size
> > significantly, even for users who never use Etcd.
> >
> > 3. **Library maintenance concerns**: The `jetcd` library is not
> > actively maintained, making it increasingly risky to depend on for a
> > production metadata backend. Security patches and compatibility
> > updates may lag behind.
> >
> > 4. **Maintenance overhead**: The `EtcdMetadataStore` implementation,
> > `EtcdSessionWatcher`, and associated test infrastructure must be
> > maintained, tested, and considered in every metadata store interface
> > change.
> >
> > 5. **Strategic direction**: Both ZooKeeper and Oxia are fully
> > supported and battle-tested metadata store backends. Oxia is a
> > purpose-built metadata store designed for Pulsar with superior
> > operational characteristics, and the community's future efforts are
> > focused there. Maintaining a third, unused backend dilutes this focus.
> >
> > Given that Etcd is not used in production deployments, adds
> > significant distribution size, relies on a poorly maintained client
> > library, and competes for attention with the strategically preferred
> > Oxia backend, removing it simplifies the project and reduces the
> > maintenance surface area.
> >
> > ## Goals
> >
> > ### In Scope
> >
> > - Remove the `EtcdMetadataStore` and `EtcdSessionWatcher`
> > implementation classes from `pulsar-metadata`
> > - Remove the `EtcdMetadataStoreProvider` registration from
> > `MetadataStoreFactoryImpl`
> > - Remove the `jetcd-core-shaded` shading module entirely
> > - Remove `jetcd-core` and `jetcd-test` dependency declarations from
> > the root `pom.xml`
> > - Remove Etcd-specific tests (`EtcdMetadataStoreTest`)
> > - Remove or update any documentation references to Etcd as a supported
> > backend
> > - Provide a clear error message if a user configures an `etcd:`
> > metadata store URL, guiding them to use ZooKeeper or Oxia instead
> >
> > ### Out of Scope
> >
> > - Changes to ZooKeeper or Oxia metadata store implementations
> > - Changes to the `MetadataStore` interface or plugin system
> >
> > ## High Level Design
> >
> > The removal is a straightforward deletion of code and dependencies:
> >
> > 1. **Implementation removal**: Delete `EtcdMetadataStore.java` and
> > `EtcdSessionWatcher.java` from `pulsar-metadata`.
> >
> > 2. **Provider deregistration**: Remove the Etcd provider from
> > `MetadataStoreFactoryImpl`. Add a check that produces a clear error
> > message when an `etcd:` URL is configured, informing operators that
> > Etcd is no longer supported and recommending ZooKeeper or Oxia.
> >
> > 3. **Module removal**: Delete the `jetcd-core-shaded` module and
> > remove it from the root `pom.xml` modules list.
> >
> > 4. **Dependency cleanup**: Remove `jetcd-core`, `jetcd-test`, and
> > `jetcd-core-shaded` dependency declarations from the root `pom.xml`
> > dependency management section. Remove these dependencies from
> > `pulsar-metadata/pom.xml`.
> >
> > 5. **Test removal**: Delete `EtcdMetadataStoreTest.java`.
> >
> > ## Detailed Design
> >
> > ### Implementation Classes
> >
> > The following source files will be deleted:
> > -
> > `pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/EtcdMetadataStore.java`
> > (includes inner `EtcdMetadataStoreProvider` class)
> > -
> > `pulsar-metadata/src/main/java/org/apache/pulsar/metadata/impl/EtcdSessionWatcher.java`
> >
> > ### Factory Update
> >
> > In `MetadataStoreFactoryImpl`, the Etcd provider registration will be
> > removed from `loadProviders()`. A runtime check will be added so that
> > if a user configures `metadataStoreUrl=etcd:...`, the broker fails
> > fast with a clear error:
> >
> > ```
> > Etcd metadata store backend has been removed in Pulsar 5.0.
> > Please use ZooKeeper (zk:) or Oxia (oxia:) as your metadata store.
> > See PIP-462 for details.
> > ```
> >
> > ### Module Removal
> >
> > The `jetcd-core-shaded/` directory will be deleted entirely, and the
> > `<module>jetcd-core-shaded</module>` entry will be removed from the
> > root `pom.xml`.
> >
> > ### Dependency Removal
> >
> > The following entries will be removed from the root `pom.xml`:
> >
> > From `<dependencyManagement>`:
> > - `io.etcd:jetcd-core`
> > - `io.etcd:jetcd-test`
> > - `org.apache.pulsar:jetcd-core-shaded`
> >
> > From `pulsar-metadata/pom.xml`:
> > - `org.apache.pulsar:jetcd-core-shaded` (compile dependency)
> > - `io.etcd:jetcd-test` (test dependency)
> >
> > ### Test Removal
> >
> > The following test file will be deleted:
> > -
> > `pulsar-metadata/src/test/java/org/apache/pulsar/metadata/impl/EtcdMetadataStoreTest.java`
> >
> > ## Public-facing Changes
> >
> > ### Configuration
> >
> > The `metadataStoreUrl` and `configurationMetadataStoreUrl`
> > configuration keys will no longer accept `etcd:` URLs. Attempting to
> > start a broker, proxy, or other Pulsar component with an Etcd metadata
> > URL will result in a clear error message at startup.
> >
> > ### Binary Protocol
> >
> > No changes.
> >
> > ### CLI
> >
> > No changes. CLI tools that accept metadata store URLs (e.g., `pulsar
> > initialize-cluster-metadata`) will reject `etcd:` URLs with a
> > descriptive error.
> >
> > ### Metrics
> >
> > No changes.
> >
> > ## General Notes
> >
> > The `MetadataStore` plugin system (PIP-45) remains fully intact. If
> > there is community interest in continuing Etcd support, it can be
> > maintained as an external plugin outside the core Pulsar repository,
> > without any changes to the Pulsar codebase.
> >
> > ### Related PIPs
> >
> > - PIP-45: Pluggable metadata interface (introduced the MetadataStore
> > abstraction and Etcd backend)
> > - PIP-454: Metadata Store Migration Framework (provides migration path
> > for users needing to switch backends)
> >
> >
> >
> > --
> > Matteo Merli
> > <[email protected]>
> >

Reply via email to