Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Source cluster permissions (mirror principal):

RPC

Component

ACL Operation

ACL Resource

Purpose

FetchMFTReadTopicData replication
MetadataMMMDescribeTopicTopic discovery and leader tracking
DescribeConfigsMMMDescribeTopicTopic configuration sync
ListGroupsMMMDescribeGroupConsumer group offset sync
OffsetFetchMMMDescribeGroupConsumer group offset sync
DescribeAclsMMMDescribeClusterACL synchronization
LastMirroredOffsetsMMMClusterActionClusterLog truncation during failback
ApiVersionsMMM

Feature negotiation
ListOffsetsMFTDescribeTopicOffset bounds discovery
OffsetsForLeaderEpochMFTDescribeTopicLeader epoch validation for truncation

Destination cluster permissions:

RPC

Component

ACL Operation

ACL Resource

Purpose

CreateMirrorControllerCreateClusterMirrorCreate a new cluster mirror
AddTopicsToMirrorControllerAlterClusterMirrorAdd topics to an existing mirror
RemoveTopicsFromMirrorControllerAlterClusterMirrorRemove topics from a mirror (failover)
PauseMirrorTopicsControllerAlterClusterMirrorPause replication for topics
ResumeMirrorTopicsControllerAlterClusterMirrorResume replication for topics
ListMirrorsBrokerDescribeClusterMirrorList configured mirrors
DescribeMirrorsBrokerDescribeClusterMirrorDescribe mirror state and lag
DescribeConfigsBrokerDescribeConfigsClusterMirrorDescribe mirror configuration
IncrementalAlterConfigsControllerAlterConfigsClusterMirrorModify mirror configuration
WriteMirrorStatesMCClusterActionClusterPersist partition state to coordinator
ReadMirrorStatesMCClusterActionClusterRead partition state from coordinator
LastMirroredOffsetsBrokerClusterActionClusterQuery last mirrored offset for truncation
FindCoordinatorBrokerClusterActionClusterLocate mirror coordinator for a partition
CreatePartitionsMMMinter-broker principalimplicitScale partitions to match source
OffsetCommitMMMinter-broker principalimplicitSync consumer group offsets
CreateAclsMMMinter-broker principalimplicitSync ACLs from source
DeleteAclsMMMinter-broker principalimplicitRemove stale ACLs

An operator can grant ClusterMirror:*:CREATE,ALTER,DESCRIBE for full mirror management, or scope it to specific mirrors like ClusterMirror:prod-dr:DESCRIBE for read-only monitoring of a single mirror, without granting any broker-level privileges. Inter-broker coordinator RPCs (WriteMirrorStates, ReadMirrorStates, LastMirroredOffsets, FindCoordinator with CoordinatorType.MIRROR) require CLUSTER_ACTION on the Cluster resource, as they are only issued by the broker service account. MMM issues CreatePartitions, OffsetCommit, CreateAcls, DeleteAcls locally using the inter-broker principal, bypassing normal ACL checks. This is by design but means the mirror feature implicitly holds ALTER on topics, groups, and ACLs within the destination cluster.

...

A new entity type is added for  in the message generator to provide schema-level type validation for mirror name fields:

Code Block
public enum EntityType {
    // ... existing types ...
    @JsonProperty("mirrorName")
    MIRROR_NAME(FieldType.StringFieldType.INSTANCE); // New type
}

ResourceType

A new resource type is added to the ResourceType enum to enable per-mirror authorization:

Code Block
public enum ResourceType {
    // ... existing types ...
    /**
     * A cluster mirror.
     */
    CLUSTER_MIRROR((byte) 8); // New type

CreateMirror

Allows users to create a mirror and supply its configuration. When the broker receives the request, it validates that the mirror name is not already in use, contains only permitted characters, and does not end with the ".removed" suffix. Once validated, the request is forwarded to the controller, which persists the configuration in the metadata log.

...