This is an automated email from the ASF dual-hosted git repository.

yubiao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new 43b20c3cfda [improve] [pip] PIP-356: Support Geo-Replication starts at 
earliest position (#22791)
43b20c3cfda is described below

commit 43b20c3cfda0ca2c70b970161c572bcc19f1745f
Author: fengyubiao <[email protected]>
AuthorDate: Thu May 30 15:12:55 2024 +0800

    [improve] [pip] PIP-356: Support Geo-Replication starts at earliest 
position (#22791)
---
 pip/pip-356.md | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 71 insertions(+)

diff --git a/pip/pip-356.md b/pip/pip-356.md
new file mode 100644
index 00000000000..c922e212ad7
--- /dev/null
+++ b/pip/pip-356.md
@@ -0,0 +1,71 @@
+# PIP-356: Support Geo-Replication starts at earliest position 
+
+# Background knowledge
+
+Replication reads messages from the source cluster, and copies them to the 
remote cluster.
+- Registers a cursor named `pulsar.repl.{remote-cluster}` on the source 
cluster. Replicator reads messages relies on this cursor.
+- Registers a producer on the remote cluster. Replicator writes messages 
relies on this producer.
+
+# Motivation
+
+If you have some older messages to migrate, the steps recommended are below, 
which was described at [pulsar 
doc](https://pulsar.apache.org/docs/3.2.x/administration-geo/#migrate-data-between-clusters-using-geo-replication).
+1. Create the cursor that the replicator will use manually: `pulsar-admin 
topics create-subscription -s pulsar.repl.{remote-cluster} -m earliest <topic>`.
+2. Enable namespace-level/topic-level Geo-Replication. 
+
+The steps recommended are difficultly to use, for example: 
+- Create cursor `pulsar.repl.{remote-cluster}` manually.
+- The namespace/topic was unloaded due to a re-balance.
+  - The broker will remove the `pulsar.repl.{remote-cluster}` automatically 
because the Geo-Replication feature is disabled at this moment.
+- Enable namespace-level/topic-level Geo-Replication, but the cursor that was 
created manually has been deleted, the broker will create a new one with latest 
position, which is not expected.
+
+
+# Goals
+Add an optional config(broker level, namespace level, and topic level) to 
support Geo-Replication starting at the earliest position.
+
+### Configuration
+
+**broker.conf**
+```properties
+# The position that replication task start at, it can be set to "earliest" or 
"latest (default)".
+replicationStartAt=latest
+```
+
+**ServiceConfiguration**
+```java
+@FieldContext(
+    category = CATEGORY_REPLICATION,
+    dynamic = true,
+    doc = "The position that replication task start at, it can be set to 
earliest or latest (default)."
+)
+String replicationStartAt = "latest";
+```
+
+### Public API
+
+**V2/Namespaces.java**
+```java
+@POST
+@Path("/{tenant}/{namespace}/replicationStartAt")
+public void setNamespaceLevelReplicationStartAt(
+    @PathParam("tenant") String tenant,
+    @PathParam("namespace") String namespace,
+    @QueryParam("replicationStartAt") String replicationStartAt) {
+    ...
+    ...
+}
+```
+
+**V2/PersistentTopics.java**
+```java
+@POST
+@Path("/{tenant}/{namespace}/{topic}/replicationStartAt")
+public void setNamespaceLevelReplicationStartAt(
+    @PathParam("tenant") String tenant,
+    @PathParam("namespace") String namespace,
+    @PathParam("topic") @Encoded String encodedTopic,
+    @QueryParam("isGlobal") @DefaultValue("false") boolean isGlobal,
+    @QueryParam("replicationStartAt") String replicationStartAt) {
+    ...
+    ...
+}
+```

Reply via email to