7.4. Kafka MirrorMaker 구성
MirrorMaker를 설정하려면 소스 및 대상(대상) Kafka 클러스터가 실행 중이어야 합니다.
MirrorMaker 2.0과 함께 AMQ Streams를 사용할 수 있지만 이전 버전의 MirrorMaker는 계속 지원됩니다.
7.4.1. MirrorMaker 2.0 구성
MirrorMaker 2.0은 소스 Kafka 클러스터의 메시지를 사용하여 대상 Kafka 클러스터에 씁니다.
MirrorMaker 2.0은 다음과 같은 기능을 사용합니다.
- 소스 클러스터의 데이터를 사용하기 위한 소스 클러스터 구성
- 대상 클러스터로 데이터를 출력하는 대상 클러스터 구성
MirrorMaker 2.0은 클러스터 간 데이터 전송을 관리하는 Kafka Connect 프레임워크를 기반으로 합니다.
소스 및 대상 클러스터의 연결 세부 정보를 포함하여 Kafka Connect 배포를 정의하도록 MirrorMaker 2.0을 구성한 다음 일련의 MirrorMaker 2.0 커넥터를 실행하여 연결을 수행합니다.
MirrorMaker 2.0은 다음 커넥터로 구성됩니다.
MirrorSourceConnector-
소스 커넥터는 소스 클러스터에서 대상 클러스터로 항목을 복제합니다. 또한 ACL을 복제하며
MirrorCheckpointConnector를 실행하는 데 필요합니다. MirrorCheckpointConnector- 체크포인트 커넥터는 오프셋을 주기적으로 추적합니다. 활성화된 경우 소스 클러스터와 대상 클러스터 간의 소비자 그룹 오프셋도 동기화합니다.
MirrorHeartbeatConnector- 하트비트 커넥터는 소스 클러스터와 대상 클러스터 간의 연결을 주기적으로 확인합니다.
User Operator를 사용하여 ACL을 관리하는 경우 커넥터를 통해 ACL을 복제할 수 없습니다.
소스 클러스터에서 대상 클러스터로 데이터를 미러링 하는 프로세스는 비동기식입니다. 각 MirrorMaker 2.0 인스턴스는 하나의 소스 클러스터에서 하나의 대상 클러스터로 데이터를 미러링합니다. 둘 이상의 MirrorMaker 2.0 인스턴스를 사용하여 여러 클러스터 간에 데이터를 미러링할 수 있습니다.
그림 7.1. 두 클러스터에서 복제

기본적으로 소스 클러스터의 새 주제를 10분마다 점검합니다. 소스 커넥터 구성에 refresh.topics.interval.seconds 를 추가하여 빈도를 변경할 수 있습니다.
7.4.1.1. 클러스터 구성
MirrorMaker 2.0은 활성/수동 또는 활성 / 활성 클러스터 구성에서 사용할 수 있습니다.
- 활성/활성 클러스터 구성
- 활성/활성 구성에는 데이터를 양방향으로 복제하는 두 개의 활성 클러스터가 있습니다. 애플리케이션은 클러스터 중 하나를 사용할 수 있습니다. 각 클러스터는 동일한 데이터를 제공할 수 있습니다. 이러한 방식으로 서로 다른 지리적 위치에서 동일한 데이터를 사용할 수 있습니다. 소비자 그룹은 두 클러스터에서 모두 활성화되므로 복제된 항목에 대한 소비자 오프셋은 소스 클러스터와 다시 동기화되지 않습니다.
- 활성/수동 클러스터 구성
- Active/passive 구성에는 활성 클러스터 복제 데이터가 패시브 클러스터에 있습니다. 패시브 클러스터는 state에 남아 있습니다. 시스템 장애가 발생할 경우 데이터 복구에 수동 클러스터를 사용할 수 있습니다.
생산자와 소비자는 활성 클러스터에만 연결됩니다. 각 대상 대상에는 MirrorMaker 2.0 클러스터가 필요합니다.
7.4.1.2. 양방향 복제(활성/활성)
MirrorMaker 2.0 아키텍처는 활성/활성 클러스터 구성에서 양방향 복제를 지원합니다.
각 클러스터는 소스 및 원격 주제의 개념을 사용하여 다른 클러스터의 데이터를 복제합니다. 각 클러스터에 동일한 항목이 저장되므로 원격 주제의 이름이 MirrorMaker 2.0에 의해 소스 클러스터를 나타내기 위해 자동으로 이름이 변경됩니다. 원래 클러스터의 이름이 주제 이름 앞에 추가됩니다.
그림 7.2. 주제 이름 변경

원래 클러스터를 플래그하여 항목이 해당 클러스터로 다시 복제되지 않습니다.
원격 주제를 통한 복제 개념은 데이터 집계가 필요한 아키텍처를 구성할 때 유용합니다. 소비자는 별도의 집계 클러스터를 사용하지 않고도 동일한 클러스터 내의 소스 및 원격 주제를 구독할 수 있습니다.
7.4.1.3. Unidirectional 복제(활성/수동)
MirrorMaker 2.0 아키텍처는 활성/수동 클러스터 구성에서 단방향 복제를 지원합니다.
활성/수동 클러스터 구성을 사용하여 백업을 수행하거나 데이터를 다른 클러스터로 마이그레이션할 수 있습니다. 이 경우 원격 주제의 자동 이름 변경을 수행하지 않을 수 있습니다.
소스 커넥터 구성에 IdentityReplicationPolicy 를 추가하여 자동 이름 변경 사항을 덮어쓸 수 있습니다. 이 구성을 적용하면 주제는 원래 이름을 유지합니다.
MirrorMaker 2.0 구성 표시 YAML의 예
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaMirrorMaker2
metadata:
name: my-mirror-maker2
spec:
version: 3.3.1
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: {}
topicsPattern: ".*"
groupsPattern: "group1|group2|group3"7.4.2. MirrorMaker 구성
이전 버전의 MirrorMaker에서는 생산자와 소비자를 사용하여 클러스터 간에 데이터를 복제합니다.
MirrorMaker는 다음을 사용합니다.
- 소스 클러스터의 데이터를 사용하기 위한 소비자 구성
- 대상 클러스터로 데이터를 출력하기 위한 생산자 구성
소비자 및 생산자 구성에는 인증 및 암호화 설정이 포함됩니다.
include 필드는 소스에서 대상 클러스터로 미러링할 주제를 정의합니다.
키 소비자 구성
- 소비자 그룹 식별자
- 사용된 메시지가 소비자 그룹에 할당되도록 MirrorMaker 소비자의 소비자 그룹 ID입니다.
- 소비자 스트림 수
- 메시지를 병렬로 사용하는 소비자 그룹의 소비자 수를 결정하는 값입니다.
- 커밋 간격 오프셋
- 메시지 사용 및 커밋 사이의 시간을 설정하는 오프셋 커밋 간격입니다.
주요 Producer 구성
- 송신 실패의 취소 옵션
- 메시지 보내기 실패가 무시되는지 또는 MirrorMaker가 종료되고 다시 생성되었는지 여부를 정의할 수 있습니다.
MirrorMaker 구성을 표시하는 YAML의 예
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaMirrorMaker
metadata:
name: my-mirror-maker
spec:
# ...
consumer:
bootstrapServers: my-source-cluster-kafka-bootstrap:9092
groupId: "my-group"
numStreams: 2
offsetCommitInterval: 120000
# ...
producer:
# ...
abortOnSendFailure: false
# ...
include: "my-topic|other-topic"
# ...