2.4. Kafka MirrorMaker 2 클러스터 구성
KafkaMirrorMaker2 리소스를 사용하여 Kafka MirrorMaker 2 배포를 구성합니다. MirrorMaker 2는 데이터 센터 내 또는 여러 Kafka 클러스터 간에 데이터를 복제합니다.
4.2.132절. “KafkaMirrorMaker2 스키마 참조” KafkaMirrorMaker2 리소스의 전체 스키마를 설명합니다.
MirrorMaker 2 리소스 구성은 이전 버전의 MirrorMaker와 다릅니다. MirrorMaker 2를 사용하도록 선택한 경우 현재 레거시 지원이 없으므로 모든 리소스를 새 형식으로 수동으로 변환해야 합니다.
2.4.1. MirrorMaker 2를 사용하여 데이터 복제 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 전체의 데이터 복제에서는 다음이 필요한 시나리오를 지원합니다.
- 시스템 장애가 발생할 경우 데이터 복구
- 분석을 위한 데이터 집계
- 특정 클러스터에 대한 데이터 액세스 제한
- 대기 시간을 개선하기 위해 특정 위치에서 데이터 제공
2.4.1.1. MirrorMaker 2 구성 링크 복사링크가 클립보드에 복사되었습니다!
MirrorMaker 2는 소스 Kafka 클러스터의 메시지를 사용하여 대상 Kafka 클러스터에 씁니다.
MirrorMaker 2 사용:
- 소스 클러스터의 데이터를 사용하기 위한 소스 클러스터 구성
- 대상 클러스터로 데이터를 출력하는 대상 클러스터 구성
MirrorMaker 2는 Kafka Connect 프레임워크를 기반으로 하며 클러스터 간 데이터 전송을 관리하는 커넥터 입니다.
소스 및 대상 클러스터의 연결 세부 정보를 포함하여 Kafka Connect 배포를 정의하도록 MirrorMaker 2를 구성한 다음 일련의 MirrorMaker 2 커넥터를 실행하여 연결을 수행합니다.
MirrorMaker 2는 다음 커넥터로 구성됩니다.
MirrorSourceConnector-
소스 커넥터는 소스 클러스터에서 대상 클러스터로 항목을 복제합니다. 또한 ACL을 복제하며
MirrorCheckpointConnector를 실행하는 데 필요합니다. MirrorCheckpointConnector- 체크포인트 커넥터는 오프셋을 주기적으로 추적합니다. 활성화된 경우 소스 클러스터와 대상 클러스터 간의 소비자 그룹 오프셋도 동기화합니다.
MirrorHeartbeatConnector- 하트비트 커넥터는 소스 클러스터와 대상 클러스터 간의 연결을 주기적으로 확인합니다.
User Operator를 사용하여 ACL을 관리하는 경우 커넥터를 통해 ACL을 복제할 수 없습니다.
소스 클러스터에서 대상 클러스터로 데이터를 미러링 하는 프로세스는 비동기식입니다. 각 MirrorMaker 2 인스턴스는 하나의 소스 클러스터에서 하나의 대상 클러스터로 데이터를 미러링합니다. 둘 이상의 MirrorMaker 2 인스턴스를 사용하여 여러 클러스터 간에 데이터를 미러링할 수 있습니다.
그림 2.1. 두 클러스터에서 복제
기본적으로 소스 클러스터의 새 주제를 10분마다 점검합니다. 소스 커넥터 구성에 refresh.topics.interval.seconds 를 추가하여 빈도를 변경할 수 있습니다.
2.4.1.1.1. 클러스터 구성 링크 복사링크가 클립보드에 복사되었습니다!
MirrorMaker 2는 활성/수동 또는 활성 / 활성 클러스터 구성에서 사용할 수 있습니다.
- 활성/활성 클러스터 구성
- 활성/활성 구성에는 데이터를 양방향으로 복제하는 두 개의 활성 클러스터가 있습니다. 애플리케이션은 클러스터 중 하나를 사용할 수 있습니다. 각 클러스터는 동일한 데이터를 제공할 수 있습니다. 이러한 방식으로 서로 다른 지리적 위치에서 동일한 데이터를 사용할 수 있습니다. 소비자 그룹은 두 클러스터에서 모두 활성화되므로 복제된 항목에 대한 소비자 오프셋은 소스 클러스터와 다시 동기화되지 않습니다.
- 활성/수동 클러스터 구성
- Active/passive 구성에는 활성 클러스터 복제 데이터가 패시브 클러스터에 있습니다. 패시브 클러스터는 state에 남아 있습니다. 시스템 장애가 발생할 경우 데이터 복구에 수동 클러스터를 사용할 수 있습니다.
생산자와 소비자는 활성 클러스터에만 연결됩니다. 각 대상 대상에는 MirrorMaker 2 클러스터가 필요합니다.
2.4.1.1.2. 양방향 복제(활성/활성) 링크 복사링크가 클립보드에 복사되었습니다!
MirrorMaker 2 아키텍처는 활성/활성 클러스터 구성에서 양방향 복제를 지원합니다.
각 클러스터는 소스 및 원격 주제의 개념을 사용하여 다른 클러스터의 데이터를 복제합니다. 각 클러스터에 동일한 항목이 저장되므로 원격 주제의 이름을 MirrorMaker 2가 소스 클러스터를 나타내기 위해 자동으로 변경합니다. 원래 클러스터의 이름이 주제 이름 앞에 추가됩니다.
그림 2.2. 주제 이름 변경
원래 클러스터를 플래그하여 항목이 해당 클러스터로 다시 복제되지 않습니다.
원격 주제를 통한 복제 개념은 데이터 집계가 필요한 아키텍처를 구성할 때 유용합니다. 소비자는 별도의 집계 클러스터를 사용하지 않고도 동일한 클러스터 내의 소스 및 원격 주제를 구독할 수 있습니다.
2.4.1.1.3. Unidirectional 복제(활성/수동) 링크 복사링크가 클립보드에 복사되었습니다!
MirrorMaker 2 아키텍처는 활성/수동 클러스터 구성에서 단방향 복제를 지원합니다.
활성/수동 클러스터 구성을 사용하여 백업을 수행하거나 데이터를 다른 클러스터로 마이그레이션할 수 있습니다. 이 경우 원격 주제의 자동 이름 변경을 수행하지 않을 수 있습니다.
소스 커넥터 구성에 IdentityReplicationPolicy 를 추가하여 자동 이름 변경 사항을 덮어쓸 수 있습니다. 이 구성을 적용하면 주제는 원래 이름을 유지합니다.
2.4.1.2. 주제 구성 동기화 링크 복사링크가 클립보드에 복사되었습니다!
MirrorMaker 2는 소스 클러스터와 대상 클러스터 간의 주제 구성 동기화를 지원합니다. MirrorMaker 2 구성에 소스 주제를 지정합니다. MirrorMaker 2는 소스 주제를 모니터링합니다. MirrorMaker 2는 변경 사항을 감지하여 소스 주제의 원격 항목에 전파합니다. 변경 사항에는 누락된 주제 및 파티션을 자동으로 생성하는 작업이 포함될 수 있습니다.
대부분의 경우 로컬 항목에 작성하고 원격 주제에서 읽습니다. 원격 주제에서 쓰기 작업을 방지할 수는 없지만 피해야 합니다.
2.4.1.3. 오프셋 추적 링크 복사링크가 클립보드에 복사되었습니다!
MirrorMaker 2는 내부 주제를 사용하는 소비자 그룹에 대한 오프셋을 추적합니다.
offset-syncs주제-
offset-syncs주제는 레코드 메타데이터에서 복제된 주제 파티션에 대한 소스 및 대상 오프셋을 매핑합니다. 체크포인트주제-
체크포인트항목은 각 소비자 그룹에서 복제된 주제 파티션에 대해 소스 및 대상 클러스터에 마지막으로 커밋된 오프셋을 매핑합니다.
MirrorMaker 2에서 내부적으로 사용했기 때문에 이러한 주제와 직접 상호 작용하지 않습니다.
MirrorCheckpointConnector 는 오프셋 추적을 위한 체크포인트 를 출력합니다. 체크포인트 항목에 대한 오프셋은 구성을 통해 사전 결정된 간격으로 추적됩니다. 두 항목 모두 장애 조치의 올바른 오프셋 위치에서 복제를 완전히 복원할 수 있도록 합니다.
offset-syncs 주제의 위치는 기본적으로 소스 클러스터입니다. offset-syncs.topic.location 커넥터 구성을 사용하여 이를 대상 클러스터로 변경할 수 있습니다. 주제가 포함된 클러스터에 대한 읽기/쓰기 액세스 권한이 필요합니다. 대상 클러스터를 offset-syncs 주제의 위치로 사용하면 소스 클러스터에 대한 읽기 액세스 권한만 있는 경우에도 MirrorMaker 2를 사용할 수 있습니다.
2.4.1.4. 소비자 그룹 오프셋 동기화 링크 복사링크가 클립보드에 복사되었습니다!
__consumer_offsets 주제에서는 각 소비자 그룹에 대해 커밋된 오프셋에 대한 정보를 저장합니다. 오프셋 동기화는 소스 클러스터의 소비자 그룹에 대한 소비자 오프셋을 대상 클러스터의 소비자 오프셋 주제로 주기적으로 전송합니다.
오프셋 동기화는 활성/수동 구성에서 특히 유용합니다. 활성 클러스터가 다운되면 소비자 애플리케이션은 수동(standby) 클러스터로 전환하고 마지막으로 전송된 오프셋 위치에서 가져올 수 있습니다.
주제 오프셋 동기화를 사용하려면 checkpoint 커넥터 구성에 sync.group.offsets.enabled 를 추가하고 속성을 true 로 설정하여 동기화를 활성화합니다. 동기화는 기본적으로 비활성화되어 있습니다.
소스 커넥터에서 IdentityReplicationPolicy 를 사용하는 경우 검사점 커넥터 구성에서도 구성해야 합니다. 이렇게 하면 미러링된 소비자 오프셋이 올바른 항목에 적용됩니다.
소비자 오프셋은 대상 클러스터에서 활성 상태가 아닌 소비자 그룹에 대해서만 동기화됩니다. 소비자 그룹이 대상 클러스터에 있는 경우 동기화를 수행할 수 없으며 UNKNOWN_MEMBER_ID 오류가 반환됩니다.
활성화된 경우 소스 클러스터에서 오프셋의 동기화가 주기적으로 수행됩니다. sync.group.offsets.interval.seconds 및 emit.checkpoints.interval.seconds 를 checkpoint 커넥터 구성에 추가하여 빈도를 변경할 수 있습니다. 속성은 소비자 그룹 오프셋이 동기화되는 빈도와 오프셋 추적에 대해 출력되는 체크포인트 빈도를 초 단위로 지정합니다. 두 속성의 기본값은 60초입니다. 기본적으로 10분마다 수행되는 refresh.groups.interval.seconds 속성을 사용하여 새 소비자 그룹에 대한 검사 빈도를 변경할 수도 있습니다.
동기화는 시간 기반이므로 소비자가 수동 클러스터로 전환하면 메시지가 일부 복제될 수 있습니다.
Java로 작성된 애플리케이션이 있는 경우 RemoteClusterUtils.java 유틸리티를 사용하여 애플리케이션을 통해 오프셋을 동기화할 수 있습니다. 유틸리티는 체크포인트 주제에서 소비자 그룹에 대한 원격 오프셋을 가져옵니다.
2.4.1.5. 하트비트 커넥터 사용 시기 결정 링크 복사링크가 클립보드에 복사되었습니다!
하트비트 커넥터는 하트비트를 내보내 소스와 대상 Kafka 클러스터 간의 연결을 확인합니다. 내부 하트비트 주제는 소스 클러스터에서 복제되므로 하트비트 커넥터가 소스 클러스터에 연결되어 있어야 합니다. 하트비트 주제는 대상 클러스터에 위치하므로 다음을 수행할 수 있습니다.
- 데이터를 미러링하는 모든 소스 클러스터 식별
- 미러링 프로세스의 활성 및 대기 시간 확인
이는 어떤 이유로든 프로세스가 중단되지 않았거나 중지되었는지 확인하는 데 도움이 됩니다. 하트비트 커넥터는 Kafka 클러스터 간 미러링 프로세스를 모니터링하는 데 유용한 도구가 될 수 있지만 항상 사용할 필요는 없습니다. 예를 들어 배포에 네트워크 대기 시간이 짧거나 적은 수의 주제가 있는 경우 로그 메시지 또는 기타 모니터링 도구를 사용하여 미러링 프로세스를 모니터링하는 것이 좋습니다. 하트비트 커넥터를 사용하지 않도록 결정한 경우 MirrorMaker 2 구성에서 생략합니다.
2.4.2. 커넥터 구성 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 클러스터 간 데이터 동기화를 오케스트레이션하는 내부 커넥터에 대한 Mirrormaker 2 커넥터 구성을 사용합니다.
다음 표에서는 커넥터 속성과 이를 사용하도록 구성하는 커넥터에 대해 설명합니다.
| 속성 | sourceConnector | checkpointConnector | heartbeatConnector |
|---|---|---|---|
| ✓ | ✓ | ✓ |
| ✓ | ✓ | ✓ |
| ✓ | ✓ | ✓ |
| ✓ | ✓ | |
| ✓ | ✓ | |
| ✓ | ✓ | |
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ | ||
| ✓ |
2.4.3. 커넥터 생산자 및 소비자 구성 링크 복사링크가 클립보드에 복사되었습니다!
MirrorMaker 2 커넥터는 내부 생산자와 소비자를 사용합니다. 필요한 경우 이러한 생산자와 소비자를 구성하여 기본 설정을 재정의할 수 있습니다.
예를 들어 소스 프로듀서의 batch.size 를 늘리고 대상 Kafka 클러스터에 주제를 보내 대량의 메시지를 더 잘 수용할 수 있습니다.
생산자 및 소비자 구성 옵션은 MirrorMaker 2 구현에 따라 달라지며 변경될 수 있습니다.
다음 표에는 각 커넥터의 생산자와 소비자와 구성을 추가할 수 있는 위치에 대해 설명합니다.
| 유형 | 설명 | 설정 |
|---|---|---|
| 프로듀서 | 주제 메시지를 대상 Kafka 클러스터로 보냅니다. 대량의 데이터를 처리할 때 이 생산자의 구성을 튜닝하는 것이 좋습니다. |
|
| 프로듀서 |
복제된 주제 파티션에 대한 소스 및 대상 오프셋을 매핑하는 |
|
| 소비자 | 소스 Kafka 클러스터에서 주제 메시지를 검색합니다. |
|
| 유형 | 설명 | 설정 |
|---|---|---|
| 프로듀서 | 소비자 오프셋 체크포인트를 내보냅니다. |
|
| 소비자 |
|
|
offset-syncs.topic.location 을 target 으로 설정하여 대상 Kafka 클러스터를 offset-syncs 주제의 위치로 사용할 수 있습니다.
| 유형 | 설명 | 설정 |
|---|---|---|
| 프로듀서 | 하트비트를 내보냅니다. |
|
다음 예제에서는 생산자 및 소비자를 구성하는 방법을 보여줍니다.
커넥터 생산자 및 소비자 구성의 예
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaMirrorMaker2
metadata:
name: my-mirror-maker2
spec:
version: 3.4.0
# ...
mirrors:
- sourceCluster: "my-cluster-source"
targetCluster: "my-cluster-target"
sourceConnector:
tasksMax: 5
config:
producer.override.batch.size: 327680
producer.override.linger.ms: 100
producer.request.timeout.ms: 30000
consumer.fetch.max.bytes: 52428800
# ...
checkpointConnector:
config:
producer.override.request.timeout.ms: 30000
consumer.max.poll.interval.ms: 300000
# ...
heartbeatConnector:
config:
producer.override.request.timeout.ms: 30000
# ...
2.4.4. 최대 작업 수 지정 링크 복사링크가 클립보드에 복사되었습니다!
Connectors는 Kafka 내부 및 외부에서 데이터를 이동하는 작업을 생성합니다. 각 커넥터는 작업을 실행하는 작업자 Pod 그룹에 분산된 하나 이상의 작업으로 구성됩니다. 많은 수의 파티션을 복제하거나 많은 수의 소비자 그룹의 오프셋을 동기화할 때 작업 수를 늘리면 성능 문제가 발생할 수 있습니다.Increase the number of tasks can help with performance issues when replicating a large number of partitions or synchronizing the offsets of a large number of consumer groups.
작업은 병렬로 실행됩니다. 작업자에는 하나 이상의 작업이 할당됩니다. 단일 작업은 하나의 작업자 Pod에서 처리하므로 작업보다 더 많은 작업자 Pod가 필요하지 않습니다. 작업자보다 많은 작업이 있는 경우 작업자는 여러 작업을 처리합니다.
tasksMax 속성을 사용하여 MirrorMaker 구성에서 최대 커넥터 작업 수를 지정할 수 있습니다. 최대 작업 수를 지정하지 않으면 기본 설정은 단일 작업입니다.
하트비트 커넥터는 항상 단일 작업을 사용합니다.
소스 및 체크포인트 커넥터에 대해 시작된 작업 수는 가능한 최대 작업 수와 tasksMax 의 값 사이에서 더 낮은 값입니다. 소스 커넥터의 경우 가능한 최대 작업 수는 소스 클러스터에서 복제되는 각 파티션에 대해 하나씩입니다. 체크포인트 커넥터의 경우 가능한 최대 작업 수는 소스 클러스터에서 복제되는 각 소비자 그룹마다 하나씩입니다. 최대 작업 수를 설정하는 경우 프로세스를 지원하는 파티션 수와 하드웨어 리소스를 고려하십시오.
인프라에서 처리 오버헤드를 지원하는 경우 작업 수를 늘리면 처리량과 대기 시간이 향상될 수 있습니다. 예를 들어 작업을 추가하면 많은 파티션 또는 소비자 그룹이 있는 경우 소스 클러스터를 폴링하는 데 걸리는 시간이 줄어듭니다.
소스 커넥터의 작업 수를 늘리면 파티션 수가 많을 때 유용합니다.
소스 커넥터의 작업 수 늘리기
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaMirrorMaker2
metadata:
name: my-mirror-maker2
spec:
# ...
mirrors:
- sourceCluster: "my-cluster-source"
targetCluster: "my-cluster-target"
sourceConnector:
tasksMax: 10
# ...
검사점 커넥터에 대한 작업 수를 늘리면 많은 수의 소비자 그룹이 있을 때 유용합니다.Increase the number of tasks for the checkpoint connector is useful when you have a large number of consumer groups.
체크포인트 커넥터에 대한 작업 수 늘리기
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaMirrorMaker2
metadata:
name: my-mirror-maker2
spec:
# ...
mirrors:
- sourceCluster: "my-cluster-source"
targetCluster: "my-cluster-target"
checkpointConnector:
tasksMax: 10
# ...
기본적으로 MirrorMaker 2는 10분마다 새 소비자 그룹을 확인합니다. refresh.groups.interval.seconds 구성을 조정하여 빈도를 변경할 수 있습니다. 더 낮게 조정할 때 주의하십시오. 더 자주 검사하면 성능에 부정적인 영향을 미칠 수 있습니다.
2.4.4.1. 커넥터 작업 확인 링크 복사링크가 클립보드에 복사되었습니다!
Prometheus 및 Grafana를 사용하여 배포를 모니터링하는 경우 MirrorMaker 2 성능을 확인할 수 있습니다. AMQ Streams와 함께 제공되는 MirrorMaker 2 Grafana 대시보드 예제에서는 작업 및 대기 시간과 관련된 다음 메트릭을 보여줍니다.
- 작업 수
- 복제 대기 시간
- 동기화 대기 시간 오프셋
2.4.5. ACL 규칙 동기화 링크 복사링크가 클립보드에 복사되었습니다!
User Operator를 사용하지 않는 경우 원격 항목에 대한 ACL 액세스가 가능합니다.
User Operator 없이 AclAuthorizer 를 사용하는 경우 브로커에 대한 액세스를 관리하는 ACL 규칙도 원격 항목에 적용됩니다. 소스 주제를 읽을 수 있는 사용자는 동등한 원격을 읽을 수 있습니다.
OAuth 2.0 권한 부여는 이러한 방식으로 원격 항목에 대한 액세스를 지원하지 않습니다.
2.4.6. Kafka MirrorMaker 2 구성 링크 복사링크가 클립보드에 복사되었습니다!
KafkaMirrorMaker2 리소스의 속성을 사용하여 Kafka MirrorMaker 2 배포를 구성합니다. MirrorMaker 2를 사용하여 Kafka 클러스터 간 데이터를 동기화합니다.
구성은 다음을 지정해야 합니다.
- 각 Kafka 클러스터
- 인증을 포함한 각 클러스터에 대한 연결 정보
복제 흐름 및 방향
- 클러스터로
- 주제 관련 주제
MirrorMaker의 이전 버전이 계속 지원됩니다. 이전 버전에 대해 구성된 리소스를 사용하려면 MirrorMaker 2에서 지원하는 형식으로 업데이트해야 합니다.
MirrorMaker 2는 복제 요소와 같은 속성에 대한 기본 구성 값을 제공합니다. 기본값이 변경되지 않은 최소 구성은 다음 예와 같습니다.
MirrorMaker 2에 대한 최소 구성
apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaMirrorMaker2
metadata:
name: my-mirror-maker2
spec:
version: 3.4.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 리소스의 소스 클러스터에서 복제할 주제 및 소비자 그룹을 지정할 수 있습니다. topicsPattern 및 groupsPattern 속성을 사용하여 이 작업을 수행합니다. 이름 목록을 제공하거나 정규식을 사용할 수 있습니다. 기본적으로 topicsPattern 및 groupsPattern 속성을 설정하지 않으면 모든 주제 및 소비자 그룹이 복제됩니다. 정규식으로 ".*" 를 사용하여 모든 주제와 소비자 그룹을 복제할 수도 있습니다. 그러나 클러스터에서 불필요한 추가 부하가 발생하지 않도록 하는 데 필요한 주제와 소비자 그룹만 지정하십시오.
대량의 메시지 처리
대량의 메시지를 처리하도록 구성을 조정할 수 있습니다. 자세한 내용은 대량 의 메시지 처리를 참조하십시오.
사전 요구 사항
- AMQ Streams가 실행 중
- 소스 및 대상 Kafka 클러스터 사용 가능
절차
KafkaMirrorMaker2리소스의spec속성을 편집합니다.구성할 수 있는 속성은 다음 예제 구성에 표시되어 있습니다.
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaMirrorMaker2 metadata: name: my-mirror-maker2 spec: version: 3.4.01 replicas: 32 connectCluster: "my-cluster-target"3 clusters:4 - alias: "my-cluster-source"5 authentication:6 certificateAndKey: certificate: source.crt key: source.key secretName: my-user-source type: tls bootstrapServers: my-cluster-source-kafka-bootstrap:90927 tls:8 trustedCertificates: - certificate: ca.crt secretName: my-cluster-source-cluster-ca-cert - alias: "my-cluster-target"9 authentication:10 certificateAndKey: certificate: target.crt key: target.key secretName: my-user-target type: tls bootstrapServers: my-cluster-target-kafka-bootstrap:909211 config:12 config.storage.replication.factor: 1 offset.storage.replication.factor: 1 status.storage.replication.factor: 1 tls:13 trustedCertificates: - certificate: ca.crt secretName: my-cluster-target-cluster-ca-cert mirrors:14 - sourceCluster: "my-cluster-source"15 targetCluster: "my-cluster-target"16 sourceConnector:17 tasksMax: 1018 autoRestart:19 enabled: true config: replication.factor: 120 offset-syncs.topic.replication.factor: 121 sync.topic.acls.enabled: "false"22 refresh.topics.interval.seconds: 6023 replication.policy.separator: "."24 replication.policy.class: "org.apache.kafka.connect.mirror.IdentityReplicationPolicy"25 heartbeatConnector:26 autoRestart: enabled: true config: heartbeats.topic.replication.factor: 127 checkpointConnector:28 autoRestart: enabled: true config: checkpoints.topic.replication.factor: 129 refresh.groups.interval.seconds: 60030 sync.group.offsets.enabled: true31 sync.group.offsets.interval.seconds: 6032 emit.checkpoints.interval.seconds: 6033 replication.policy.class: "org.apache.kafka.connect.mirror.IdentityReplicationPolicy" topicsPattern: "topic1|topic2|topic3"34 groupsPattern: "group1|group2|group3"35 resources:36 requests: cpu: "1" memory: 2Gi limits: cpu: "2" memory: 2Gi logging:37 type: inline loggers: connect.root.logger.level: INFO readinessProbe:38 initialDelaySeconds: 15 timeoutSeconds: 5 livenessProbe: initialDelaySeconds: 15 timeoutSeconds: 5 jvmOptions:39 "-Xmx": "1g" "-Xms": "1g" image: my-org/my-image:latest40 rack: topologyKey: topology.kubernetes.io/zone41 template:42 pod: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: application operator: In values: - postgresql - mongodb topologyKey: "kubernetes.io/hostname" connectContainer:43 env: - name: OTEL_SERVICE_NAME value: my-otel-service - name: OTEL_EXPORTER_OTLP_ENDPOINT value: "http://otlp-host:4317" tracing: type: opentelemetry44 externalConfiguration:45 env: - name: AWS_ACCESS_KEY_ID valueFrom: secretKeyRef: name: aws-creds key: awsAccessKey - name: AWS_SECRET_ACCESS_KEY valueFrom: secretKeyRef: name: aws-creds key: awsSecretAccessKey- 1
- Kafka Connect 및 Mirror 2.0 버전 2.0은 항상 동일합니다.
- 2
- 작업을 실행하는 작업자 의 복제본 노드 수입니다.
- 3
- Kafka Connect의 Kafka 클러스터 별칭 - 대상 Kafka 클러스터를 지정해야 합니다. Kafka 클러스터는 내부 항목에 대해 Kafka Connect에서 사용합니다.
- 4
- 동기화되는 Kafka 클러스터의 사양 입니다.
- 5
- 소스 Kafka 클러스터의 클러스터 별칭 입니다.
- 6
- 7
- 소스 Kafka 클러스터에 연결하기 위한 부트스트랩 서버 입니다.
- 8
- 소스 Kafka 클러스터의 X.509 형식으로 저장되는 TLS 인증서의 키 이름을 사용한 TLS 암호화 입니다. 인증서가 동일한 보안에 저장된 경우 여러 번 나열할 수 있습니다.
- 9
- 대상 Kafka 클러스터의 클러스터 별칭 입니다.
- 10
- 대상 Kafka 클러스터에 대한 인증은 소스 Kafka 클러스터와 동일한 방식으로 구성됩니다.
- 11
- 대상 Kafka 클러스터에 연결하기 위한 부트스트랩 서버 입니다.
- 12
- Kafka Connect 구성. 표준 Apache Kafka 구성을 제공하여 AMQ Streams에서 직접 관리하지 않는 속성으로 제한될 수 있습니다.
- 13
- 대상 Kafka 클러스터에 대한 TLS 암호화는 소스 Kafka 클러스터와 동일한 방식으로 구성됩니다.
- 14
- 15
- MirrorMaker 2 커넥터에서 사용하는 소스 클러스터의 클러스터 별칭 입니다.
- 16
- MirrorMaker 2 커넥터에서 사용하는 대상 클러스터의 클러스터 별칭 입니다.
- 17
- 원격 주제를 생성하는
MirrorSourceConnector구성입니다. 구성이 기본 구성 옵션을 덮어씁니다. - 18
- 커넥터가 생성할 수 있는 최대 작업 수입니다. 작업은 데이터 복제를 처리하고 병렬로 실행합니다. 인프라에서 처리 오버헤드를 지원하는 경우 이 값을 늘리면 처리량이 향상될 수 있습니다. Kafka Connect는 클러스터 멤버 간에 작업을 배포합니다. 작업자보다 많은 작업이 있는 경우 작업자에는 여러 작업이 할당됩니다. 싱크 커넥터의 경우 소비된 각 주제 파티션에 대해 하나의 작업이 있어야 합니다. 소스 커넥터의 경우 병렬로 실행할 수 있는 작업 수도 외부 시스템에 따라 달라질 수 있습니다. 커넥터는 병렬 처리를 수행할 수 없는 경우 최대 작업 수보다 적은 수를 생성합니다.
- 19
- 실패한 커넥터 및 작업의 자동 재시작을 활성화합니다. 재시작 횟수는 최대 7개까지 수행되며, 이 후에는 수동으로 다시 시작해야 합니다.
- 20
- 대상 클러스터에서 생성된 미러링된 항목의 복제 요인입니다.
- 21
- 소스 및 대상 클러스터
의 오프셋을매핑하는MirrorSourceConnector오프셋의 복제 요인입니다. - 22
- ACL 규칙 동기화 가 활성화되면 ACL이 동기화된 항목에 적용됩니다. 기본값은
true입니다. 이 기능은 User Operator와 호환되지 않습니다. User Operator를 사용하는 경우 이 속성을false로 설정합니다. - 23
- 새 항목에 대한 검사 빈도를 변경하는 선택적 설정입니다. 기본값은 10분마다 점검을 위한 것입니다.
- 24
- 원격 주제 이름 변경에 사용되는 구분자를 정의합니다.
- 25
- 원격 주제의 자동 이름 변경을 재정의하는 정책을 추가합니다. 소스 클러스터 이름 앞에 이름 앞에 추가하지 않고 주제에서 원래 이름을 유지합니다. 이 선택적 설정은 활성/수동 백업 및 데이터 마이그레이션에 유용합니다. 주제 오프셋 동기화를 구성하려면 이 속성도
checkpointConnector.config에 대해 설정해야 합니다. - 26
- 연결 확인을 수행하는
MirrorHeartbeatConnector구성입니다. 구성이 기본 구성 옵션을 덮어씁니다. - 27
- 대상 클러스터에서 생성된 하트비트 항목에 대한 복제 요인입니다.
- 28
- 오프셋을 추적하는
MirrorCheckpointConnector구성입니다. 구성이 기본 구성 옵션을 덮어씁니다. - 29
- 대상 클러스터에서 생성된 체크포인트 항목에 대한 복제 요인입니다.
- 30
- 새 소비자 그룹에 대한 검사 빈도를 변경하는 선택적 설정입니다. 기본값은 10분마다 점검을 위한 것입니다.
- 31
- 활성/수동 구성에서 복구에 유용한 소비자 그룹 오프셋을 동기화하는 선택적 설정입니다. 동기화는 기본적으로 활성화되어 있지 않습니다.
- 32
- 소비자 그룹 오프셋의 동기화가 활성화된 경우 동기화 빈도를 조정할 수 있습니다.
- 33
- 오프셋 추적에 대한 검사 빈도를 조정합니다. 오프셋 동기화의 빈도를 변경하는 경우 이러한 검사의 빈도를 조정해야 할 수도 있습니다.
- 34
- 쉼표로 구분된 목록 또는 정규식 패턴으로 정의된 소스 클러스터의 주제 복제 주제 복제 . 소스 커넥터는 지정된 주제를 복제합니다. 검사점 커넥터는 지정된 항목에 대한 오프셋을 추적합니다. 여기에서는 이름으로 세 가지 주제를 요청합니다.
- 35
- 쉼표로 구분된 목록 또는 정규식 패턴으로 정의된 소스 클러스터의 소비자 그룹 복제입니다. 검사점 커넥터는 지정된 소비자 그룹을 복제합니다. 여기에서는 이름별로 세 개의 소비자 그룹을 요청합니다.
- 36
- 37
- 지정된 Kafka Connect 로거 및 로그 수준은 ConfigMap을 통해 직접 (
인라인) 또는 간접적으로(외부)합니다. 사용자 지정 ConfigMap은log4j.properties또는log4j2.properties키에 배치해야 합니다. Kafka Connectlog4j.rootLogger로거의 경우 로그 수준을 INFO, ERROR, WARN, TRACE, DEBUG, FATAL 또는 OFF로 설정할 수 있습니다. - 38
- 컨테이너(liveness)를 다시 시작할 시기와 컨테이너가 트래픽을 수락할 수 있는 시기(가용성)를 확인할 수 있는 상태 점검 입니다.
- 39
- Kafka Mirror Maker를 실행하는 VM(가상 머신)의 성능을 최적화하는 JVM 구성 옵션입니다.
- 40
- ADVANCED OPTION : 컨테이너 이미지 구성.이는 특별한 경우에만 권장됩니다.
- 41
- SPECIALIZED OPTION: 배포에 대한 인식 인식 구성입니다. 이는 리전이 아닌 동일한 위치 내의 배포를 위한 특수 옵션입니다. 리더 복제본이 아닌 가장 가까운 복제본에서 커넥터를 소비하려면 이 옵션을 사용합니다. 경우에 따라 가장 가까운 복제본에서 소비하면 네트워크 사용률을 향상시키거나 비용을 줄일 수 있습니다.
topologyKey는 rack ID가 포함된 노드 레이블과 일치해야 합니다. 이 구성에 사용된 예제에서는 표준topology.kubernetes.io/zone레이블을 사용하여 영역을 지정합니다. 가장 가까운 복제본에서 사용하려면 Kafka 브로커 구성에서RackAwareReplicaSelector를 활성화합니다. - 42
- 템플릿 사용자 지정. 여기에서 Pod는 유사성 방지로 예약되므로 Pod는 동일한 호스트 이름이 있는 노드에 예약되지 않습니다.
- 43
- 환경 변수는 분산 추적을 위해 설정됩니다.
- 44
- OpenTelemetry를 사용하여 분산 추적을 활성화합니다.
- 45
- Kafka MirrorMaker에 환경 변수로 마운트된 OpenShift Secret의 외부 구성 구성 공급자 플러그인을 사용하여 외부 소스에서 구성 값을 로드할 수도 있습니다.
리소스를 생성하거나 업데이트합니다.
oc apply -f MIRRORMAKER-CONFIGURATION-FILE
2.4.7. Kafka MirrorMaker 2 배포 보안 링크 복사링크가 클립보드에 복사되었습니다!
이 절차에서는 MirrorMaker 2 배포를 보호하는 데 필요한 구성을 간략하게 설명합니다.
소스 Kafka 클러스터 및 대상 Kafka 클러스터에 대한 별도의 구성이 필요합니다. 또한 소스 및 대상 Kafka 클러스터에 연결하는 데 필요한 인증 정보를 제공하기 위해 별도의 사용자 구성이 필요합니다.
Kafka 클러스터의 경우 OpenShift 클러스터 외부의 연결에 대해 OpenShift 클러스터 및 외부 리스너 내 보안 연결을 위해 내부 리스너를 지정합니다.
인증 및 권한 부여 메커니즘을 구성할 수 있습니다. 소스 및 대상 Kafka 클러스터에 대해 구현된 보안 옵션은 MirrorMaker 2에 대해 구현된 보안 옵션과 호환되어야 합니다.
클러스터 및 사용자 인증 자격 증명을 생성한 후 보안 연결을 위해 MirrorMaker 구성에 지정합니다.
이 절차에서는 Cluster Operator에서 생성한 인증서가 사용되지만 자체 인증서를 설치하여 교체할 수 있습니다. 외부 CA(인증 기관)에서 관리하는 Kafka 리스너 인증서를 사용하도록 리스너를 구성할 수도 있습니다.
시작하기 전에
이 절차를 시작하기 전에 AMQ Streams에서 제공하는 구성 파일 예제 를 살펴보십시오. 여기에는 mTLS 또는 SCRAM-SHA-512 인증을 사용하여 MirrorMaker 2 배포를 보호하는 예제가 포함됩니다. 예제에서는 OpenShift 클러스터 내에서 연결하기 위한 내부 리스너를 지정합니다.
예제에서는 소스 및 대상 Kafka 클러스터에서 작업을 허용하는 MirrorMaker 2에 필요한 모든 ACL을 포함하여 전체 승인을 위한 구성을 제공합니다.
사전 요구 사항
- AMQ Streams가 실행 중
- 소스 및 대상 클러스터의 별도의 네임스페이스
이 절차에서는 Topic Operator를 사용하려면 소스 및 대상 Kafka 클러스터가 별도의 네임스페이스에 설치되어 있다고 가정합니다. Topic Operator는 지정된 네임스페이스에서 단일 클러스터만 감시합니다.
클러스터를 네임스페이스로 분리하면 네임스페이스 외부에서 액세스할 수 있도록 클러스터 시크릿을 복사해야 합니다. MirrorMaker 구성에서 시크릿을 참조해야 합니다.
절차
두 개의
Kafka리소스를 구성합니다. 하나는 소스 Kafka 클러스터를 보호하고 하나는 대상 Kafka 클러스터를 보호합니다.인증을 위한 리스너 구성을 추가하고 권한 부여를 활성화할 수 있습니다.
이 예에서 내부 리스너는 TLS 암호화 및 mTLS 인증을 사용하는 Kafka 클러스터에 대해 구성됩니다. Kafka
간단한인증이 활성화됩니다.TLS 암호화 및 mTLS 인증을 사용하는 소스 Kafka 클러스터 구성의 예
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: my-source-cluster spec: kafka: version: 3.4.0 replicas: 1 listeners: - name: tls port: 9093 type: internal tls: true authentication: type: tls authorization: type: simple config: offsets.topic.replication.factor: 1 transaction.state.log.replication.factor: 1 transaction.state.log.min.isr: 1 default.replication.factor: 1 min.insync.replicas: 1 inter.broker.protocol.version: "3.4" storage: type: jbod volumes: - id: 0 type: persistent-claim size: 100Gi deleteClaim: false zookeeper: replicas: 1 storage: type: persistent-claim size: 100Gi deleteClaim: false entityOperator: topicOperator: {} userOperator: {}TLS 암호화 및 mTLS 인증을 사용하는 대상 Kafka 클러스터 구성의 예
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: my-target-cluster spec: kafka: version: 3.4.0 replicas: 1 listeners: - name: tls port: 9093 type: internal tls: true authentication: type: tls authorization: type: simple config: offsets.topic.replication.factor: 1 transaction.state.log.replication.factor: 1 transaction.state.log.min.isr: 1 default.replication.factor: 1 min.insync.replicas: 1 inter.broker.protocol.version: "3.4" storage: type: jbod volumes: - id: 0 type: persistent-claim size: 100Gi deleteClaim: false zookeeper: replicas: 1 storage: type: persistent-claim size: 100Gi deleteClaim: false entityOperator: topicOperator: {} userOperator: {}별도의 네임스페이스에서
Kafka리소스를 생성하거나 업데이트합니다.oc apply -f <kafka_configuration_file> -n <namespace>Cluster Operator는 리스너를 생성하고 클러스터 및 클라이언트 CA(인증 기관) 인증서를 설정하여 Kafka 클러스터 내에서 인증을 활성화합니다.
인증서는 <
cluster_name> -cluster-ca-cert에서 생성됩니다.소스 Kafka 클러스터의 사용자 및 대상 Kafka 클러스터의 사용자용으로 하나씩 두 개의
KafkaUser리소스를 구성합니다.-
해당 소스 및 대상 Kafka 클러스터와 동일한 인증 및 권한 부여 유형을 구성합니다. 예를 들어 소스 Kafka 클러스터의
Kafka구성에서tls인증 및간단한권한 부여 유형을 사용한 경우KafkaUser구성에서 동일하게 사용합니다. 소스 및 대상 Kafka 클러스터에서 작업을 허용하도록 MirrorMaker 2에 필요한 ACL을 구성합니다.
ACL은 내부 MirrorMaker 커넥터와 기본 Kafka Connect 프레임워크에서 사용합니다.
mTLS 인증에 대한 소스 사용자 구성 예
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaUser metadata: name: my-source-user labels: strimzi.io/cluster: my-source-cluster spec: authentication: type: tls authorization: type: simple acls: # MirrorSourceConnector - resource: # Not needed if offset-syncs.topic.location=target type: topic name: mm2-offset-syncs.my-target-cluster.internal operations: - Create - DescribeConfigs - Read - Write - resource: # Needed for every topic which is mirrored type: topic name: "*" operations: - DescribeConfigs - Read # MirrorCheckpointConnector - resource: type: cluster operations: - Describe - resource: # Needed for every group for which offsets are synced type: group name: "*" operations: - Describe - resource: # Not needed if offset-syncs.topic.location=target type: topic name: mm2-offset-syncs.my-target-cluster.internal operations: - ReadmTLS 인증에 대한 대상 사용자 구성 예
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaUser metadata: name: my-target-user labels: strimzi.io/cluster: my-target-cluster spec: authentication: type: tls authorization: type: simple acls: # Underlying Kafka Connect internal topics to store configuration, offsets, or status - resource: type: group name: mirrormaker2-cluster operations: - Read - resource: type: topic name: mirrormaker2-cluster-configs operations: - Create - Describe - DescribeConfigs - Read - Write - resource: type: topic name: mirrormaker2-cluster-status operations: - Create - Describe - DescribeConfigs - Read - Write - resource: type: topic name: mirrormaker2-cluster-offsets operations: - Create - Describe - DescribeConfigs - Read - Write # MirrorSourceConnector - resource: # Needed for every topic which is mirrored type: topic name: "*" operations: - Create - Alter - AlterConfigs - Write # MirrorCheckpointConnector - resource: type: cluster operations: - Describe - resource: type: topic name: my-source-cluster.checkpoints.internal operations: - Create - Describe - Read - Write - resource: # Needed for every group for which the offset is synced type: group name: "*" operations: - Read - Describe # MirrorHeartbeatConnector - resource: type: topic name: heartbeats operations: - Create - Describe - Write참고type을tls-external로 설정하여 User Operator 외부에서 발급한 인증서를 사용할 수 있습니다. 자세한 내용은 4.2.97절. “KafkaUserSpecschema reference”의 내용을 참조하십시오.-
해당 소스 및 대상 Kafka 클러스터와 동일한 인증 및 권한 부여 유형을 구성합니다. 예를 들어 소스 Kafka 클러스터의
소스 및 대상 Kafka 클러스터에 대해 생성한 각 네임스페이스에서
KafkaUser리소스를 생성하거나 업데이트합니다.oc apply -f <kafka_user_configuration_file> -n <namespace>User Operator는 선택한 인증 유형을 기반으로 클라이언트(MirrorMaker)와 클라이언트 인증에 사용되는 보안 인증 정보를 나타내는 사용자를 생성합니다.
User Operator는
KafkaUser리소스와 동일한 이름으로 새 시크릿을 생성합니다. 보안에는 mTLS 인증을 위한 개인 키와 공개 키가 포함되어 있습니다. 공개 키는 클라이언트 CA에서 서명한 사용자 인증서에 포함됩니다.인증 세부 정보를 사용하여
KafkaMirrorMaker2리소스를 구성하여 소스 및 대상 Kafka 클러스터에 연결합니다.TLS 암호화 및 mTLS 인증을 사용하는 MirrorMaker 2 구성의 예
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaMirrorMaker2 metadata: name: my-mirror-maker-2 spec: version: 3.4.0 replicas: 1 connectCluster: "my-target-cluster" clusters: - alias: "my-source-cluster" bootstrapServers: my-source-cluster-kafka-bootstrap:9093 tls:1 trustedCertificates: - secretName: my-source-cluster-cluster-ca-cert certificate: ca.crt authentication:2 type: tls certificateAndKey: secretName: my-source-user certificate: user.crt key: user.key - alias: "my-target-cluster" bootstrapServers: my-target-cluster-kafka-bootstrap:9093 tls:3 trustedCertificates: - secretName: my-target-cluster-cluster-ca-cert certificate: ca.crt authentication:4 type: tls certificateAndKey: secretName: my-target-user certificate: user.crt key: user.key config: # -1 means it will use the default replication factor configured in the broker config.storage.replication.factor: -1 offset.storage.replication.factor: -1 status.storage.replication.factor: -1 mirrors: - sourceCluster: "my-source-cluster" targetCluster: "my-target-cluster" sourceConnector: config: replication.factor: 1 offset-syncs.topic.replication.factor: 1 sync.topic.acls.enabled: "false" heartbeatConnector: config: heartbeats.topic.replication.factor: 1 checkpointConnector: config: checkpoints.topic.replication.factor: 1 sync.group.offsets.enabled: "true" topicsPattern: "topic1|topic2|topic3" groupsPattern: "group1|group2|group3"대상 Kafka 클러스터와 동일한 네임스페이스에서
KafkaMirrorMaker2리소스를 생성하거나 업데이트합니다.oc apply -f <mirrormaker2_configuration_file> -n <namespace_of_target_cluster>
2.4.8. Kafka MirrorMaker 2 커넥터 다시 시작 수행 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 OpenShift 주석을 사용하여 Kafka MirrorMaker 2 커넥터의 재시작을 수동으로 트리거하는 방법을 설명합니다.
사전 요구 사항
- Cluster Operator가 실행 중입니다.
절차
다시 시작하려는
Kafka MirrorMaker 2커넥터를 제어하는 KafkaMirrorMaker2 사용자 정의 리소스의 이름을 찾습니다.oc get KafkaMirrorMaker2KafkaMirrorMaker2 사용자 정의 리소스에서 다시 시작할
Kafka MirrorMaker 2커넥터의 이름을 찾습니다.oc describe KafkaMirrorMaker2 KAFKAMIRRORMAKER-2-NAME커넥터를 다시 시작하려면 OpenShift에서
KafkaMirrorMaker2리소스에 주석을 답니다. 이 예에서oc annotate는my-source->my-target.MirrorSourceConnector라는 커넥터를 다시 시작합니다.oc annotate KafkaMirrorMaker2 KAFKAMIRRORMAKER-2-NAME "strimzi.io/restart-connector=my-source->my-target.MirrorSourceConnector"다음 조정이 수행될 때까지 기다립니다(기본적으로 2분 마다).
조정 프로세스에서 주석을 탐지한 한 Kafka MirrorMaker 2 커넥터가 재시작됩니다. 재시작 요청이 승인되면
KafkaMirrorMaker2사용자 정의 리소스에서 주석이 제거됩니다.
2.4.9. Kafka MirrorMaker 2 커넥터 작업 재시작 수행 링크 복사링크가 클립보드에 복사되었습니다!
다음 절차에서는 OpenShift 주석을 사용하여 Kafka MirrorMaker 2 커넥터 작업 재시작을 수동으로 트리거하는 방법을 설명합니다.
사전 요구 사항
- Cluster Operator가 실행 중입니다.
절차
다시 시작하려는
Kafka MirrorMaker 2커넥터를 제어하는 KafkaMirrorMaker2 사용자 정의 리소스의 이름을 찾습니다.oc get KafkaMirrorMaker2Kafka MirrorMaker 2 커넥터의 이름과
KafkaMirrorMaker2사용자 정의 리소스에서 다시 시작할 작업의 ID를 찾습니다. 작업 ID는 0부터 시작하는 음수가 아닌 정수입니다.oc describe KafkaMirrorMaker2 KAFKAMIRRORMAKER-2-NAME커넥터 작업을 다시 시작하려면 OpenShift에서
KafkaMirrorMaker2리소스에 주석을 답니다. 이 예에서oc annotaterestarts 작업 0 of a connector namedmy-source->my-target.MirrorSourceConnector:oc annotate KafkaMirrorMaker2 KAFKAMIRRORMAKER-2-NAME "strimzi.io/restart-connector-task=my-source->my-target.MirrorSourceConnector:0"다음 조정이 수행될 때까지 기다립니다(기본적으로 2분 마다).
조정 프로세스에서 주석을 탐지한 한 Kafka MirrorMaker 2 커넥터 작업이 재시작됩니다. 재시작 작업 요청이 수락되면 주석이
KafkaMirrorMaker2사용자 정의 리소스에서 제거됩니다.