Dear Pulsar Community,

Initial Oxia [1] support has been added to the Apache Pulsar Helm
chart master branch. Thanks to Yuwei Sung for the initial
implementation!

Apache Pulsar has supported the Oxia based Metadata store plugin since
Pulsar 3.3.0 with PIP-335 [2].
PIP-45 Pluggable metadata interface [3] related PRs #12770 [4] and
#13296 [5] introduced changes in Pulsar and BookKeeper configuration
for Pulsar so that Pulsar Metadata driver is used for metadata
operations in the BookKeeper client (in broker) and in the BookKeeper
server (the bookies). These changes have been included in Pulsar since
2.10.0.
When the Oxia Metadata store plugin was added, it also made it
possible to use Oxia as the Metadata store for BookKeeper.

One of the known gaps with the Pulsar Metadata store usage with Pulsar
Functions is that the default package storage implementation in
Pulsar, 
org.apache.pulsar.packages.management.storage.bookkeeper.BookKeeperPackagesStorage,
doesn't support other metadata stores than Zookeeper when storing
packages to BookKeeper storage. Since the only other available
PackagesStorage implementation is a file-based one in Pulsar, there's
not currently a suitable option to be used for Pulsar Helm chart
deployments with Oxia as the Metadata store.
It would be great to have a PackagesStorage implementation for Pulsar
Functions in the Helm chart that can be used when Oxia is used as the
Metadata store.

Enabling Oxia in the Apache Pulsar Helm chart requires disabling the
Zookeeper component (components.zookeeper=false) and enabling the Oxia
component (components.oxia=true).

There is no tool for migrating a cluster from Zookeeper to Oxia yet.
Having an offline tool would be the first step. Later, there could be
ways to do online migrations, but that would require significant
development efforts.

I would like to welcome you to test Oxia with Apache Pulsar and
BookKeeper and then make contributions to the Apache Pulsar Helm chart
and Pulsar documentation around using Oxia with Pulsar.

To test Oxia with Apache Pulsar 4.0.0 and BookKeeper, you can use the
following instructions, assuming you have Helm and kubectl installed
and connected to a Kubernetes cluster:

git clone https://github.com/apache/pulsar-helm-chart
cd pulsar-helm-chart
helm dependency update ./charts/pulsar
helm install pulsar --namespace pulsar --create-namespace
./charts/pulsar --set affinity.anti_affinity=false --values
.ci/clusters/values-oxia.yaml

Setting affinity.anti_affinity=false disables the anti-affinity
feature that Pulsar uses to spread the BookKeeper, Oxia, and Zookeeper
pods across different nodes. Disabling it is required for single-node
testing, for example, with Minikube, Docker Desktop k8s, Rancher
Desktop k8s, Podman Desktop k8s, etc.

The .ci/clusters/values-oxia.yaml file contains the values used for
Oxia testing in GitHub Actions CI for Apache Pulsar, so it is a good
starting point for testing Oxia in your local single-node Kubernetes
cluster.

I'm looking forward to your feedback!

-Lari

1 - https://github.com/streamnative/oxia
2 - 
https://github.com/apache/pulsar/blob/master/pip/pip-335%20Oxia%20metadata%20plugin.md
3 - https://github.com/apache/pulsar/wiki/PIP-45%3A-Pluggable-metadata-interface
4 - https://github.com/apache/pulsar/pull/12770
5 - https://github.com/apache/pulsar/pull/13296

Reply via email to