10.9. Kafka MirrorMaker 2 구성


KafkaMirrorMaker2 사용자 정의 리소스의 사양 속성을 업데이트하여 MirrorMaker 2 배포를 구성합니다. MirrorMaker 2는 데이터 사용에 소스 클러스터 구성을 사용하고 데이터 출력에 대한 대상 클러스터 구성을 사용합니다.

MirrorMaker 2는 Kafka Connect 프레임워크를 기반으로 하며 클러스터 간 데이터 전송을 관리하는 커넥터 를 기반으로 합니다.

소스 및 대상 클러스터의 연결 세부 정보를 포함하여 Kafka Connect 배포를 정의하도록 MirrorMaker 2를 구성한 다음 MirrorMaker 2 커넥터 세트를 실행하여 연결을 설정합니다.

MirrorMaker 2는 소스 클러스터와 대상 클러스터 간의 구성 동기화를 지원합니다. MirrorMaker 2 구성에서 소스 주제를 지정합니다. MirrorMaker 2는 소스 주제를 모니터링합니다. MirrorMaker 2는 소스 주제를 탐지하고 변경 사항을 원격 주제로 전파합니다. 변경 사항에는 누락된 주제 및 파티션 생성이 포함될 수 있습니다.

참고

대부분의 경우 로컬 항목에 작성하고 원격 주제를 읽습니다. 원격 항목에서는 쓰기 작업을 방지할 수 없지만 피해야 합니다.

구성은 다음을 지정해야 합니다.

  • 각 Kafka 클러스터
  • 인증을 포함하여 각 클러스터에 대한 연결 정보
  • 복제 흐름 및 방향

    • 클러스터 간 클러스터
    • 주제 주제

Kafka MirrorMaker 2 클러스터 구성 옵션을 자세히 이해하려면 Streams for Apache Kafka 사용자 정의 리소스 API 참조를 참조하십시오.

기본 구성

MirrorMaker 2는 복제 요인과 같은 속성의 기본 구성 값을 제공합니다. 기본값이 변경되지 않은 최소 구성은 다음과 같습니다.

MirrorMaker 2의 최소 구성

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaMirrorMaker2
metadata:
  name: my-mirror-maker2
spec:
  version: 4.0.0
  connectCluster: "my-cluster-target"
  clusters:
  - alias: "my-cluster-source"
    bootstrapServers: my-cluster-source-kafka-bootstrap:9092
  - alias: "my-cluster-target"
    bootstrapServers: my-cluster-target-kafka-bootstrap:9092
  mirrors:
  - sourceCluster: "my-cluster-source"
    targetCluster: "my-cluster-target"
    sourceConnector: {}

mTLS 또는 SASL 인증을 사용하여 소스 및 대상 클러스터에 대한 액세스 제어를 구성할 수 있습니다. 이 절차에서는 소스 및 대상 클러스터에 TLS 암호화 및 mTLS 인증을 사용하는 구성을 보여줍니다.

KafkaMirrorMaker2 리소스의 소스 클러스터에서 복제하려는 주제 및 소비자 그룹을 지정할 수 있습니다. 이 작업을 수행하려면 topicsPatterngroupsPattern 속성을 사용합니다. 이름 목록을 제공하거나 정규식을 사용할 수 있습니다. 기본적으로 topicsPatterngroupsPattern 속성을 설정하지 않으면 모든 주제와 소비자 그룹이 복제됩니다. 정규식으로 ".*" 를 사용하여 모든 주제 및 소비자 그룹을 복제할 수도 있습니다. 그러나 클러스터에 불필요한 추가 로드를 유발하지 않도록 하는 데 필요한 주제 및 소비자 그룹만 지정합니다.

대량의 메시지 처리

많은 양의 메시지를 처리하도록 구성을 조정할 수 있습니다. 자세한 내용은 많은 양의 메시지 처리를 참조하십시오.

KafkaMirrorMaker2 사용자 정의 리소스 구성 예

# Basic configuration (required)
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaMirrorMaker2
metadata:
  name: my-mirror-maker2
# Deployment specifications
spec:
  # Replicas (required)
  replicas: 3 
1

  # Connect cluster name (required)
  connectCluster: "my-cluster-target" 
2

  # Cluster configurations (required)
  clusters: 
3

    - alias: "my-cluster-source" 
4

      # Authentication (optional)
      authentication: 
5

        certificateAndKey:
          certificate: source.crt
          key: source.key
          secretName: my-user-source
        type: tls
      bootstrapServers: my-cluster-source-kafka-bootstrap:9092 
6

      # TLS configuration (optional)
      tls: 
7

        trustedCertificates:
          - pattern: "*.crt"
            secretName: my-cluster-source-cluster-ca-cert
    - alias: "my-cluster-target" 
8

      # Authentication (optional)
      authentication: 
9

        certificateAndKey:
          certificate: target.crt
          key: target.key
          secretName: my-user-target
        type: tls
      bootstrapServers: my-cluster-target-kafka-bootstrap:9092 
10

      # Kafka Connect configuration (optional)
      config: 
11

        config.storage.replication.factor: 1
        offset.storage.replication.factor: 1
        status.storage.replication.factor: 1
      # TLS configuration (optional)
      tls: 
12

        trustedCertificates:
          - pattern: "*.crt"
            secretName: my-cluster-target-cluster-ca-cert
  # Mirroring configurations (required)
  mirrors: 
13

    - sourceCluster: "my-cluster-source" 
14

      targetCluster: "my-cluster-target" 
15

      # Topic and group patterns (required)
      topicsPattern: "topic1|topic2|topic3" 
16

      groupsPattern: "group1|group2|group3" 
17

      # Source connector configuration (required)
      sourceConnector: 
18

        tasksMax: 10 
19

        autoRestart: 
20

          enabled: true
        config:
          replication.factor: 1 
21

          offset-syncs.topic.replication.factor: 1 
22

          sync.topic.acls.enabled: "false" 
23

          refresh.topics.interval.seconds: 60 
24

          replication.policy.class: "org.apache.kafka.connect.mirror.IdentityReplicationPolicy" 
25

      # Heartbeat connector configuration (optional)
      heartbeatConnector: 
26

        autoRestart:
          enabled: true
        config:
          heartbeats.topic.replication.factor: 1 
27

          replication.policy.class: "org.apache.kafka.connect.mirror.IdentityReplicationPolicy"
      # Checkpoint connector configuration (optional)
      checkpointConnector: 
28

        autoRestart:
          enabled: true
        config:
          checkpoints.topic.replication.factor: 1 
29

          refresh.groups.interval.seconds: 600 
30

          sync.group.offsets.enabled: true 
31

          sync.group.offsets.interval.seconds: 60 
32

          emit.checkpoints.interval.seconds: 60 
33

          replication.policy.class: "org.apache.kafka.connect.mirror.IdentityReplicationPolicy"
  # Kafka version (recommended)
  version: 4.0.0 
34

  # Resources requests and limits (recommended)
  resources: 
35

    requests:
      cpu: "1"
      memory: 2Gi
    limits:
      cpu: "2"
      memory: 2Gi
  # Logging configuration (optional)
  logging: 
36

    type: inline
    loggers:
      # Kafka 4.0+ uses Log4j2
      rootLogger.level: INFO
  # Readiness probe (optional)
  readinessProbe: 
37

    initialDelaySeconds: 15
    timeoutSeconds: 5
  # Liveness probe (optional)
  livenessProbe:
    initialDelaySeconds: 15
    timeoutSeconds: 5
  # JVM options (optional)
  jvmOptions: 
38

    "-Xmx": "1g"
    "-Xms": "1g"
  # Custom image (optional)
  image: my-org/my-image:latest 
39

  # Rack awareness (optional)
  rack:
    topologyKey: topology.kubernetes.io/zone 
40

  # Pod template (optional)
  template: 
41

    pod:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: application
                    operator: In
                    values:
                      - postgresql
                      - mongodb
              topologyKey: "kubernetes.io/hostname"
    connectContainer: 
42

      env:
        - name: OTEL_SERVICE_NAME
          value: my-otel-service
        - name: OTEL_EXPORTER_OTLP_ENDPOINT
          value: "http://otlp-host:4317"
  # Tracing configuration (optional)
  tracing:
    type: opentelemetry 
43

1
작업을 실행하는 작업자의 복제본 노드 수입니다.
2
Kafka Connect의 Kafka 클러스터 별칭은 대상 Kafka 클러스터를 지정해야 합니다. Kafka 클러스터는 내부 주제로 Kafka Connect에서 사용합니다.
3
동기화되는 Kafka 클러스터에 대한 사양입니다.
4
소스 Kafka 클러스터의 클러스터 별칭입니다.
5
tls,scram-sha-256,scram-sha-512,일반 또는 oauth 로 지정된 소스 클러스터에 대한 인증입니다. 인증 구성에 대한 자세한 내용은 KafkaMirrorMaker2Spec 스키마 속성을참조하십시오.
6
소스 Kafka 클러스터에 연결하기 위한 부트스트랩 주소입니다. 주소는 < cluster_name>-kafka-bootstrap:<port_number> 형식을 사용합니다. Kafka 클러스터는 Apache Kafka용 Streams에서 관리하거나 OpenShift 클러스터에 배포할 필요가 없습니다.
7
신뢰할 수 있는 인증서가 지정된 보안 내에서 X.509 형식으로 저장된 Kafka 클러스터에 대한 암호화된 연결에 대한 TLS 구성입니다.
8
대상 Kafka 클러스터의 클러스터 별칭입니다.
9
대상 Kafka 클러스터에 대한 인증은 소스 Kafka 클러스터와 동일한 방식으로 구성됩니다.
10
대상 Kafka 클러스터에 연결하기 위한 부트스트랩 주소입니다. 주소는 < cluster_name>-kafka-bootstrap:<port_number> 형식을 사용합니다. Kafka 클러스터는 Apache Kafka용 Streams에서 관리하거나 OpenShift 클러스터에 배포할 필요가 없습니다.
11
Kafka Connect 구성. 표준 Apache Kafka 구성은 Apache Kafka용 Streams에서 직접 관리하지 않는 속성으로 제한될 수 있습니다.
12
대상 Kafka 클러스터의 TLS 암호화는 소스 Kafka 클러스터와 동일한 방식으로 구성됩니다.
13
MirrorMaker 2 커넥터.
14
MirrorMaker 2 커넥터에서 사용하는 소스 클러스터의 클러스터 별칭입니다.
15
MirrorMaker 2 커넥터에서 사용하는 대상 클러스터의 클러스터 별칭입니다.
16
쉼표로 구분된 목록 또는 정규식 패턴으로 정의된 소스 클러스터의 복제를 주제로 지정합니다. 소스 커넥터는 지정된 항목을 복제합니다. 체크포인트 커넥터는 지정된 항목에 대한 오프셋을 추적합니다. 여기에서는 이름으로 세 가지 주제를 요청합니다.
17
쉼표로 구분된 목록 또는 정규식 패턴으로 정의된 소스 클러스터의 소비자 그룹 복제. 체크포인트 커넥터는 지정된 소비자 그룹을 복제합니다. 여기에서는 이름으로 세 개의 소비자 그룹을 요청합니다.
18
원격 주제를 생성하는 MirrorSourceConnector 에 대한 구성입니다. 구성이 기본 구성 옵션을 덮어씁니다.
19
커넥터가 생성할 수 있는 최대 작업 수입니다. 작업은 데이터 복제를 처리하고 병렬로 실행됩니다. 인프라가 처리 오버헤드를 지원하는 경우 이 값을 늘리면 처리량이 향상될 수 있습니다. Kafka Connect는 클러스터 구성원 간에 작업을 배포합니다. 작업자보다 많은 작업이 있는 경우 작업자에 여러 작업이 할당됩니다. 싱크 커넥터의 경우 소비되는 각 주제 파티션에 대해 하나의 작업을 수행하는 것을 목표로 합니다. 소스 커넥터의 경우 병렬로 실행할 수 있는 작업 수도 외부 시스템에 따라 달라질 수 있습니다. 커넥터는 병렬 처리를 수행할 수 없는 경우 최대 작업 수보다 적은 수를 생성합니다.
20
실패한 커넥터 및 작업을 자동으로 다시 시작할 수 있습니다. 기본적으로 재시작 수는 indefinite이지만 maxRestarts 속성을 사용하여 자동 재시작 횟수에 대해 최대값을 설정할 수 있습니다.
21
대상 클러스터에서 생성된 미러링된 항목의 복제 인수입니다.
22
소스 및 대상 클러스터의 오프셋을 매핑하는 MirrorSourceConnector offset-syncs 내부 주제의 복제 인수입니다.
23
ACL 규칙 동기화가 활성화되면 ACL이 동기화된 항목에 적용됩니다. 기본값은 true입니다. 이 기능은 User Operator와 호환되지 않습니다. User Operator를 사용하는 경우 이 속성을 false 로 설정합니다.
24
새 주제의 검사 빈도를 변경하는 선택적 설정입니다. 기본값은 10분마다 확인용입니다.
25
원격 주제의 자동 이름을 재정의하는 정책을 추가합니다. 소스 클러스터 이름이 있는 이름을 보류하는 대신 주제는 원래 이름을 유지합니다. 이 선택적 설정은 활성/수동 백업 및 데이터 마이그레이션에 유용합니다. 모든 커넥터에 대해 속성을 지정해야 합니다. 양방향(active/active) 복제의 경우 DefaultReplicationPolicy 클래스를 사용하여 원격 주제의 이름을 자동으로 변경하고 모든 커넥터의 replication.policy.separator 속성을 지정하여 사용자 지정 구분자를 추가합니다.
26
연결 검사를 수행하는 MirrorHeartbeatConnector 에 대한 구성입니다. 구성이 기본 구성 옵션을 덮어씁니다.
27
대상 클러스터에서 생성된 하트비트 주제의 복제 요인입니다.
28
오프셋을 추적하는 MirrorCheckpointConnector 에 대한 구성입니다. 구성이 기본 구성 옵션을 덮어씁니다.
29
대상 클러스터에서 생성된 체크포인트 주제의 복제 요인입니다.
30
새 소비자 그룹의 점검 빈도를 변경하는 선택적 설정입니다. 기본값은 10분마다 확인용입니다.
31
활성/수동 구성의 복구에 유용한 소비자 그룹 오프셋을 동기화하는 선택적 설정입니다. 동기화는 기본적으로 활성화되어 있지 않습니다.
32
소비자 그룹 오프셋의 동기화가 활성화된 경우 동기화 빈도를 조정할 수 있습니다.
33
오프셋 추적의 검사 빈도를 조정합니다. 오프셋 동기화의 빈도를 변경하는 경우 이러한 검사의 빈도를 조정해야 할 수도 있습니다.
34
Kafka Connect 및 MirrorMaker 2 버전은 항상 동일합니다.
35
지원되는 리소스(현재 cpumemory ) 예약 요청 및 사용할 수 있는 최대 리소스를 지정합니다.
36
지정된 Kafka Connect 로거 및 로그 수준이 직접(인라인) 또는 ConfigMap 을 통해 간접적으로(외부)됩니다. 사용자 정의 Log4j 구성은 ConfigMaplog4j2.properties 키 아래에 배치해야 합니다. 로그 수준은 INFO,ERROR,WARN,TRACE,DEBUG,FATAL 또는 OFF 로 설정할 수 있습니다.
37
컨테이너를 다시 시작할 시기(라이브)와 컨테이너가 트래픽을 허용할 시기(준비)를 확인할 상태 점검입니다.
38
Kafka MirrorMaker를 실행하는 VM(가상 머신)의 성능을 최적화하는 JVM 구성 옵션입니다.
39
ADVANCED OPTION: 특수 상황에서만 권장되는 컨테이너 이미지 구성입니다.
40
SPECIALIZED OPTION: 배포에 대한 Rack 인식 구성입니다. 이는 지역이 아닌 동일한 위치 내의 배포를 위한 특수 옵션입니다. 리더 복제본 대신 커넥터가 가장 가까운 복제본에서 사용할 수 있도록 하려면 이 옵션을 사용합니다. 경우에 따라 가장 가까운 복제본에서 소비하면 네트워크 사용률을 개선하거나 비용을 절감할 수 있습니다. topologyKey 는 랙 ID가 포함된 노드 레이블과 일치해야 합니다. 이 구성에 사용된 예제에서는 표준 topology.kubernetes.io/zone 레이블을 사용하는 영역을 지정합니다. 가장 가까운 복제본에서 사용하려면 Kafka 브로커 구성에서 RackAwareReplicaSelector 를 활성화합니다.
41
템플릿 사용자 지정. 여기에서 Pod는 유사성 방지를 사용하여 예약되므로 이름이 동일한 노드에 Pod가 예약되지 않습니다.
42
환경 변수는 분산 추적에 대해 설정됩니다.
43
OpenTelemetry를 사용하여 분산 추적을 활성화합니다.

10.9.1. 활성/활성 또는 활성/패시브 모드 구성

MirrorMaker 2를 활성/패시브 또는 활성 / 활성 클러스터 구성에서 사용할 수 있습니다.

활성/활성 클러스터 구성
활성/활성 구성에는 데이터를 양방향으로 복제하는 두 개의 활성 클러스터가 있습니다. 애플리케이션은 둘 중 하나의 클러스터를 사용할 수 있습니다. 각 클러스터는 동일한 데이터를 제공할 수 있습니다. 이렇게 하면 서로 다른 지리적 위치에서 동일한 데이터를 사용할 수 있습니다. 소비자 그룹이 두 클러스터에서 모두 활성화되므로 복제된 항목에 대한 소비자 오프셋은 소스 클러스터와 다시 동기화되지 않습니다.
활성/수동 클러스터 구성
활성/수동 구성에는 수동 클러스터에 데이터를 복제하는 활성 클러스터 복제가 있습니다. 패시브 클러스터는 대기 상태로 유지됩니다. 시스템 장애 시 데이터 복구에 수동 클러스터를 사용할 수 있습니다.

생산자와 소비자는 활성 클러스터에만 연결할 것으로 예상됩니다. 각 대상 대상에 MirrorMaker 2 클러스터가 필요합니다.

10.9.1.1. 양방향 복제(활성/활성)

MirrorMaker 2 아키텍처는 활성/활성 클러스터 구성에서 양방향 복제를 지원합니다.

각 클러스터는 소스원격 주제의 개념을 사용하여 다른 클러스터의 데이터를 복제합니다. 각 클러스터에 동일한 항목이 저장되므로 원격 주제는 MirrorMaker 2로 이름이 자동으로 변경되어 소스 클러스터를 나타냅니다. 원래 클러스터의 이름 앞에 주제 이름 앞에 추가됩니다.

그림 10.1. 주제 이름 변경

MirrorMaker 2 양방향 아키텍처

원래 클러스터에 플래그를 지정하면 주제가 해당 클러스터로 다시 복제되지 않습니다.

원격 주제를 통한 복제 개념은 데이터 집계가 필요한 아키텍처를 구성할 때 유용합니다. 소비자는 별도의 집계 클러스터 없이도 동일한 클러스터 내의 소스 및 원격 주제를 구독할 수 있습니다.

10.9.1.2. Unidirectional replication (active/passive)

MirrorMaker 2 아키텍처는 활성/수동 클러스터 구성에서 비방향 복제를 지원합니다.

활성/수동 클러스터 구성을 사용하여 백업을 수행하거나 데이터를 다른 클러스터로 마이그레이션할 수 있습니다. 이 경우 원격 주제의 자동 이름 변경을 원하지 않을 수 있습니다.

소스 커넥터 구성에 IdentityReplicationPolicy 를 추가하여 자동 이름 변경을 덮어쓸 수 있습니다. 이 구성을 적용하면 주제는 원래 이름을 유지합니다.

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 문서 정보

Legal Notice

Theme

© 2026 Red Hat
맨 위로 이동