Thanks for voting.

+1s binding:
 * Matteo
 * Mattison
 * PengHui
 * Zixuan

+1s non-binding:
 * Tao

The PIP is approved with 4 binding votes and 1 non-binding.

Thanks

--
Matteo Merli
<[email protected]>

On Thu, Mar 19, 2026 at 8:49 PM Zixuan Liu <[email protected]> wrote:
>
> +1 (binding)
>
> Thanks,
> Zixuan
>
> Tao Jiuming <[email protected]> 于2026年3月20日周五 09:55写道:
>
> > +1 nonbinding
> >
> > Matteo Merli <[email protected]>于2026年3月19日 周四06:53写道:
> >
> > > 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