Package org.apache.pulsar.broker.service
Class AbstractReplicator
java.lang.Object
org.apache.pulsar.broker.service.AbstractReplicator
- Direct Known Subclasses:
NonPersistentReplicator,PersistentReplicator
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final org.apache.pulsar.client.impl.Backoffprotected final BrokerServiceprotected final org.apache.pulsar.client.impl.PulsarClientImplprotected final Stringprotected org.apache.pulsar.client.impl.ProducerImplprotected final org.apache.pulsar.client.api.ProducerBuilder<byte[]>protected final intprotected final Stringstatic final Stringprotected final org.apache.pulsar.client.impl.PulsarClientImplprotected final Stringprotected static final AtomicReferenceFieldUpdater<AbstractReplicator,AbstractReplicator.State> protected final String -
Constructor Summary
ConstructorsConstructorDescriptionAbstractReplicator(String topicName, String replicatorPrefix, String localCluster, String remoteCluster, BrokerService brokerService, org.apache.pulsar.client.impl.PulsarClientImpl replicationClient) -
Method Summary
Modifier and TypeMethodDescriptionprotected CompletableFuture<Void>protected abstract voiddisconnect(boolean failIfHasBacklog) protected abstract longstatic StringgetRemoteCluster(String remoteCursor) static StringgetReplicatorName(String replicatorPrefix, String cluster) protected abstract org.apache.bookkeeper.mledger.PositiongetState()protected booleanprotected abstract voidreadEntries(org.apache.pulsar.client.api.Producer<byte[]> producer) remove()voidstatic CompletableFuture<Void>validatePartitionedTopicAsync(String topic, BrokerService brokerService) Replication can't be started on root-partitioned-topic to avoid producer startup conflict.
-
Field Details
-
brokerService
-
topicName
-
localCluster
-
remoteCluster
-
replicationClient
protected final org.apache.pulsar.client.impl.PulsarClientImpl replicationClient -
client
protected final org.apache.pulsar.client.impl.PulsarClientImpl client -
producer
protected volatile org.apache.pulsar.client.impl.ProducerImpl producer -
REPL_PRODUCER_NAME_DELIMITER
- See Also:
-
producerQueueSize
protected final int producerQueueSize -
producerBuilder
protected final org.apache.pulsar.client.api.ProducerBuilder<byte[]> producerBuilder -
backOff
protected final org.apache.pulsar.client.impl.Backoff backOff -
replicatorPrefix
-
STATE_UPDATER
protected static final AtomicReferenceFieldUpdater<AbstractReplicator,AbstractReplicator.State> STATE_UPDATER
-
-
Constructor Details
-
AbstractReplicator
public AbstractReplicator(String topicName, String replicatorPrefix, String localCluster, String remoteCluster, BrokerService brokerService, org.apache.pulsar.client.impl.PulsarClientImpl replicationClient) throws org.apache.pulsar.broker.PulsarServerException - Throws:
org.apache.pulsar.broker.PulsarServerException
-
-
Method Details
-
readEntries
protected abstract void readEntries(org.apache.pulsar.client.api.Producer<byte[]> producer) -
getReplicatorReadPosition
protected abstract org.apache.bookkeeper.mledger.Position getReplicatorReadPosition() -
getNumberOfEntriesInBacklog
protected abstract long getNumberOfEntriesInBacklog() -
disableReplicatorRead
protected abstract void disableReplicatorRead() -
getRemoteCluster
-
startProducer
public void startProducer() -
closeProducerAsync
-
disconnect
-
disconnect
-
remove
-
isWritable
protected boolean isWritable() -
getRemoteCluster
-
getReplicatorName
-
validatePartitionedTopicAsync
public static CompletableFuture<Void> validatePartitionedTopicAsync(String topic, BrokerService brokerService) Replication can't be started on root-partitioned-topic to avoid producer startup conflict.eg: if topic : persistent://prop/cluster/ns/my-topic is a partitioned topic with 2 partitions then broker explicitly creates replicator producer for: "my-topic-partition-1" and "my-topic-partition-2". However, if broker tries to start producer with root topic "my-topic" then client-lib internally creates individual producers for "my-topic-partition-1" and "my-topic-partition-2" which creates conflict with existing replicator producers.
Therefore, replicator can't be started on root-partition topic which can internally create multiple partitioned producers.- Parameters:
topic-brokerService-
-
getState
-