Migrating to MirrordSplitConfig
All queue services now share a single configuration resource, MirrordSplitConfig. Earlier versions of mirrord used a different, broker-specific resource for each service. Those legacy resources are deprecated but still fully supported - the operator reads them on the fly and drives the split through the same unified flow, so existing setups keep working with no change.
This page shows how to move each legacy resource to MirrordSplitConfig. We recommend migrating so all your queue splitting configuration lives in one place. New setups should start with MirrordSplitConfig directly (see each broker's own page).
MirrordSplitConfig requires mirrord operator 3.170.0 or later. On earlier operators only the legacy resources are available.
You do not have to migrate everything at once. The operator accepts a mix of legacy resources and MirrordSplitConfig objects, so you can migrate one workload at a time.
Amazon SQS
Earlier versions of mirrord (<3.170.0) used the MirrordWorkloadQueueRegistry resource with queueType: SQS.
Here is the same configuration in the deprecated and the new format, side by side.
Deprecated MirrordWorkloadQueueRegistry:
apiVersion: queues.mirrord.metalbear.co/v1alpha
kind: MirrordWorkloadQueueRegistry
metadata:
name: meme-app-q-registry
namespace: meme
spec:
consumer:
name: meme-app
workloadType: Deployment
container: main
queues:
meme-queue:
queueType: SQS
nameSource:
envVar: INCOMING_MEME_QUEUE_NAME
tags:
tool: mirrord
sns: true
ad-queue:
queueType: SQS
nameSource:
envVar: AD_QUEUE_NAMEEquivalent MirrordSplitConfig (plus a MirrordPropertyList for the per-queue options):
Field mapping:
MirrordWorkloadQueueRegistry (deprecated)
MirrordSplitConfig (NEW)
spec.consumer.name / workloadType
spec.targetRef.name / kind (with apiVersion)
spec.consumer.container
appConfig.queue[].containers
spec.queues.<key>
spec.queues[].id
queueType: SQS
kind: sqs
nameSource.envVar
appConfig.queue[].env
nameSource.regexPattern
appConfig.queue[].envLike
fallbackName
appConfig.queue[].fallback
namesFromJsonMap: true
appConfig.queue[].valueSelector: ".[]"
Per-queue options. In the old format sns, s3Event, and tags were set inline on each queue. Now they live in a MirrordPropertyList, and the queue links to it through queueConfig. A queue with none of these options (like ad-queue above) needs no queueConfig and no MirrordPropertyList.
Old inline field
MirrordPropertyList property
sns: true
sns: "true"
s3Event: true
s3_event: "true"
tags: {...}
tags (JSON object string)
To migrate:
Create the new
MirrordSplitConfig. For any queue that had inlinesns,s3Event, ortags, create aMirrordPropertyListwith those options and point the queue'squeueConfigat it.Start a session and verify messages are split as expected.
Delete the old
MirrordWorkloadQueueRegistry.
Kafka
Earlier versions of mirrord (<3.170.0) used two resources to configure Kafka splitting: MirrordKafkaTopicsConsumer (which queues to split and how to find their names) and MirrordKafkaClientConfig (the Kafka client connection). The new clientConfig field transparently falls back to a MirrordKafkaClientConfig of the same name in the operator's namespace, so you can migrate the topics consumer first and the client config later.
Here is the same configuration in the deprecated and the new format, side by side.
Deprecated MirrordKafkaTopicsConsumer + MirrordKafkaClientConfig:
Equivalent MirrordSplitConfig + MirrordPropertyList:
Field mapping:
MirrordKafkaTopicsConsumer + MirrordKafkaClientConfig (deprecated)
MirrordSplitConfig (NEW)
consumerApiVersion / consumerKind / consumerName
spec.targetRef.apiVersion / kind / name
topics[].id
spec.queues[].id
topics[].nameSources[].directEnvVar
appConfig.topic[] (variable -> env, container -> containers, fallback -> fallback)
topics[].groupIdSources
appConfig.groupId[]
topics[].applicationIdSources
appConfig.appId[]
topics[].clientConfig (a MirrordKafkaClientConfig)
spec.queues[].clientConfig (a MirrordPropertyList in the target namespace, or the same legacy name as a fallback)
consumerRestartTimeout
spec.restart.timeout
splitTtl
spec.drainTimeout
The MirrordKafkaClientConfig properties map one-to-one onto MirrordPropertyList properties. The only difference is the namespace: a MirrordPropertyList lives in the target's namespace, while MirrordKafkaClientConfig lives in the operator's namespace.
To migrate:
Create a
MirrordPropertyListin the target's namespace with your Kafka client properties (or keep your existingMirrordKafkaClientConfig- the newclientConfigfalls back to it by name).Create the new
MirrordSplitConfigusing the mapping above.Start a session and verify messages are split as expected.
Once you are confident, delete the old
MirrordKafkaTopicsConsumer(andMirrordKafkaClientConfig, if you moved its properties into aMirrordPropertyList).
RabbitMQ
Earlier versions of mirrord (<3.170.0) used the MirrordWorkloadQueueRegistry resource with queueType: RMQ.
Here is the same configuration in the deprecated and the new format, side by side.
Deprecated MirrordWorkloadQueueRegistry:
Equivalent MirrordSplitConfig (the meme-rmq-cluster MirrordPropertyList is unchanged):
Field mapping:
MirrordWorkloadQueueRegistry (deprecated)
MirrordSplitConfig (NEW)
spec.consumer.name / workloadType
spec.targetRef.name / kind (with apiVersion)
spec.consumer.container
appConfig.queue[].containers
spec.queues.<key>
spec.queues[].id
queueType: RMQ
kind: rmq
clusterProperties
clientConfig
queueProperties
queueConfig
nameSource.envVar
appConfig.queue[].env
nameSource.regexPattern
appConfig.queue[].envLike
fallbackName
appConfig.queue[].fallback
namesFromJsonMap: true
appConfig.queue[].valueSelector: ".[]"
exchangeSource
appConfig.exchange
clusterProperties and queueProperties already pointed to a MirrordPropertyList by name; clientConfig and queueConfig point to the same MirrordPropertyList the same way. These rows are just renames - there is no new resource to create.
To migrate:
Create the new
MirrordSplitConfigusing the mapping above. Your existingMirrordPropertyListcluster declaration is reused as-is.Start a session and verify messages are split as expected.
Delete the old
MirrordWorkloadQueueRegistry.
Last updated
Was this helpful?

