The original PIP-63 doc in 
https://github.com/apache/pulsar/wiki/PIP-63%3A-Readonly-Topic-Ownership-Support
 have talked about the motivation and key changes to implement this proposal.


After submitting the PR (https://github.com/apache/pulsar/pull/11960), I have 
learned that it's not quite user-friendly to consumers if we expose the concept 
of readonly-namespace to clients, thanks to @penghui, @chenhang, etc.


Here is a new way to use this feature. And two diagrams for the cluster state 
change are in the attached files, please check them out.


For example, given a cluster called "my-cluster" with 2 brokers, 192.168.0.1 
and 192.168.0.2.
It has namespace called "my-tenant/writer-namespace".
And consumers are consuming with service url 
"pulsar://192.168.0.1:6650,192.168.0.2:6650"


Here is the steps to set up readonly namespace on a new broker 
192.168.0.3. 


1. Set up namespace isolation policy "writer-ns-policy" to avoid assigning new 
broker 192.168.0.3 to writer-namespace.


bin/pulsar-admin ns-isolation-policy set \
--auto-failover-policy-type min_available \
--auto-failover-policy-params min_limit=1,usage_threshold=80 \
--namespaces my-tenant/writer-namespace \
--primary 192.168.0.1,192.168.0.2 my-cluster writer-ns-policy


2. Create a namespaces "my-tenant/reader-namespace" and set up 
writerNamespace=my-tenant/writer-namespace


pulsar-admin namespaces create my-tenant/reader-namespace
# This is a new admin command to be added.
pulsar-admin namespaces set-writer-namespace my-tenant/writer-namespace 
my-tenant/reader-namespace


3. Set up namespace isolation policy to assign 192.168.0.3 to reader-namespace.


bin/pulsar-admin ns-isolation-policy set \
--auto-failover-policy-type min_available \
--auto-failover-policy-params min_limit=1,usage_threshold=80 \
--namespaces my-tenant/reader-namespace \
--primary 192.168.0.3 my-cluster reader-ns-policy


4.Update serviceUrl of some of the consumer clients to 
"pulsar://192.168.0.3:6550", and these consumers will consume messages from the 
readonly-namespace in 192.168.0.3
Further more, the serviceUrl can be updated online with 
org.apache.pulsar.client.api.ServiceUrlProvider.


Most importantly, we will not expose the readonly-namespace to consumer users, 
and no other configuration is needed to achive this.
Once admin sets up the readonly namespace, they can update serviceUrl on their 
own with some external service governance mechanism. 
So it's transparent to consumers.




---
Thanks,
Haiting Jiang (Github: Jason918)

Reply via email to