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. 두 클러스터에서 복제

MirrorMaker 2 복제

기본적으로 소스 클러스터의 새 주제를 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. 주제 이름 변경

MirrorMaker 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.secondsemit.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 커넥터 구성을 사용합니다.

다음 표에서는 커넥터 속성과 이를 사용하도록 구성하는 커넥터에 대해 설명합니다.

Expand
표 2.2. MirrorMaker 2 커넥터 구성 속성
속성sourceConnectorcheckpointConnectorheartbeatConnector
admin.timeout.ms
새 주제 탐지와 같은 관리자 작업에 대한 타임아웃입니다. 기본값은 60000 (1분)입니다.

replication.policy.class
원격 주제 이름 지정 규칙을 정의하는 정책입니다. 기본값은 org.apache.kafka.connect.mirror.DefaultReplicationPolicy 입니다.

replication.policy.separator
대상 클러스터에서 이름 지정에 사용되는 구분 기호입니다. 기본값은 . (dot)입니다.

consumer.poll.timeout.ms
소스 클러스터를 폴링할 때 제한 시간입니다. 기본값은 1000 (1초)입니다.

 
offset-syncs.topic.location
소스 (기본값) 또는 대상 클러스터일 수 있는 offset-syncs 주제의 위치입니다.

 
topic.filter.class
항목을 필터링하여 복제할 주제를 선택합니다. 기본값은 org.apache.kafka.connect.mirror.DefaultTopicFilter 입니다.

 
config.property.filter.class
topic 필터를 사용하여 복제할 주제 구성 속성을 선택합니다. 기본값은 org.apache.kafka.connect.mirror.DefaultConfigPropertyFilter 입니다.

  
config.properties.exclude
복제해서는 안 되는 주제 구성 속성입니다. 쉼표로 구분된 속성 이름 및 정규식을 지원합니다.

  
offset.lag.max
원격 파티션이 동기화되기 전에 최대 허용 가능(동기화되지 않음) 오프셋이 지연됩니다. 기본값은 100 입니다.

  
offset-syncs.topic.replication.factor
내부 오프셋 동기화 항목에 대한 복제 요인입니다. 기본값은 3 입니다.

  
refresh.topics.enabled
새 주제와 파티션에 대한 검사를 활성화합니다. 기본값은 true 입니다.

  
refresh.topics.interval.seconds
주제 새로 고침 빈도입니다. 기본값은 600 (10분)입니다.

  
replication.factor
새 주제의 복제 요인입니다. 기본값은 2 입니다.

  
sync.topic.acls.enabled
소스 클러스터의 ACL 동기화를 활성화합니다. 기본값은 true 입니다. User Operator와 호환되지 않습니다.

  
sync.topic.acls.interval.seconds
ACL 동기화 빈도입니다. 기본값은 600 (10분)입니다.

  
sync.topic.configs.enabled
소스 클러스터에서 주제 구성의 동기화를 활성화합니다. 기본값은 true 입니다.

  
sync.topic.configs.interval.seconds
주제 구성 동기화의 빈도입니다. 기본값 600 (10분).

  
checkpoints.topic.replication.factor
내부 체크포인트 항목에 대한 복제 요인입니다. 기본값은 3 입니다.
 

 
emit.checkpoints.enabled
대상 클러스터와 소비자 오프셋의 동기화를 활성화합니다. 기본값은 true 입니다.
 

 
emit.checkpoints.interval.seconds
소비자 오프셋 동기화의 빈도입니다. 기본값은 60 (1분)입니다.
 

 
group.filter.class
복제할 소비자 그룹을 선택하는 그룹 필터입니다. 기본값은 org.apache.kafka.connect.mirror.DefaultGroupFilter 입니다.
 

 
refresh.groups.enabled
새 소비자 그룹에 대한 검사를 활성화합니다. 기본값은 true 입니다.
 

 
refresh.groups.interval.seconds
소비자 그룹 새로 고침 빈도입니다. 기본값은 600 (10분)입니다.
 

 
sync.group.offsets.enabled
대상 클러스터 __consumer_offsets 항목에 대한 소비자 그룹 오프셋의 동기화를 활성화합니다. 기본값은 false 입니다.
 

 
sync.group.offsets.interval.seconds
소비자 그룹 오프셋 동기화의 빈도입니다. 기본값은 60 (1분)입니다.
 

 
emit.heartbeats.enabled
대상 클러스터에서 연결 검사를 활성화합니다. 기본값은 true 입니다.
  

emit.heartbeats.interval.seconds
연결 확인 빈도입니다. 기본값은 1 (1초)입니다.
  

heartbeats.topic.replication.factor
내부 하트비트 주제의 복제 요소. 기본값은 3 입니다.
  

2.4.3. 커넥터 생산자 및 소비자 구성

MirrorMaker 2 커넥터는 내부 생산자와 소비자를 사용합니다. 필요한 경우 이러한 생산자와 소비자를 구성하여 기본 설정을 재정의할 수 있습니다.

예를 들어 소스 프로듀서의 batch.size 를 늘리고 대상 Kafka 클러스터에 주제를 보내 대량의 메시지를 더 잘 수용할 수 있습니다.

중요

생산자 및 소비자 구성 옵션은 MirrorMaker 2 구현에 따라 달라지며 변경될 수 있습니다.

다음 표에는 각 커넥터의 생산자와 소비자와 구성을 추가할 수 있는 위치에 대해 설명합니다.

Expand
표 2.3. 소스 커넥터 생산자 및 소비자
유형설명설정

프로듀서

주제 메시지를 대상 Kafka 클러스터로 보냅니다. 대량의 데이터를 처리할 때 이 생산자의 구성을 튜닝하는 것이 좋습니다.

mirrors.sourceConnector.config: producer.override.*

프로듀서

복제된 주제 파티션에 대한 소스 및 대상 오프셋을 매핑하는 offset-syncs 항목에 씁니다.

mirrors.sourceConnector.config: producer.*

소비자

소스 Kafka 클러스터에서 주제 메시지를 검색합니다.

mirrors.sourceConnector.config: consumer.*

Expand
표 2.4. 체크포인트 커넥터 생산자 및 소비자
유형설명설정

프로듀서

소비자 오프셋 체크포인트를 내보냅니다.

mirrors.checkpointConnector.config: producer.override.*

소비자

offset-syncs 주제를 로드합니다.

mirrors.checkpointConnector.config: consumer.*

참고

offset-syncs.topic.locationtarget 으로 설정하여 대상 Kafka 클러스터를 offset-syncs 주제의 위치로 사용할 수 있습니다.

Expand
표 2.5. Heartbeat 커넥터 생산자
유형설명설정

프로듀서

하트비트를 내보냅니다.

mirrors.heartbeatConnector.config: producer.override.*

다음 예제에서는 생산자 및 소비자를 구성하는 방법을 보여줍니다.

커넥터 생산자 및 소비자 구성의 예

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

대량의 메시지 처리

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

사전 요구 사항

  • AMQ Streams가 실행 중
  • 소스 및 대상 Kafka 클러스터 사용 가능

절차

  1. KafkaMirrorMaker2 리소스의 spec 속성을 편집합니다.

    구성할 수 있는 속성은 다음 예제 구성에 표시되어 있습니다.

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaMirrorMaker2
    metadata:
      name: my-mirror-maker2
    spec:
      version: 3.4.0 
    1
    
      replicas: 3 
    2
    
      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:9092 
    7
    
        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:9092 
    11
    
        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: 10 
    18
    
          autoRestart: 
    19
    
            enabled: true
          config:
            replication.factor: 1 
    20
    
            offset-syncs.topic.replication.factor: 1 
    21
    
            sync.topic.acls.enabled: "false" 
    22
    
            refresh.topics.interval.seconds: 60 
    23
    
            replication.policy.separator: "." 
    24
    
            replication.policy.class: "org.apache.kafka.connect.mirror.IdentityReplicationPolicy" 
    25
    
        heartbeatConnector: 
    26
    
          autoRestart:
            enabled: true
          config:
            heartbeats.topic.replication.factor: 1 
    27
    
        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"
        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:latest 
    40
    
      rack:
        topologyKey: topology.kubernetes.io/zone 
    41
    
      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: opentelemetry 
    44
    
      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
    mTLS,토큰 기반 OAuth, SASL 기반 SCRAM -256/SCRAM-SHA -512, 또는 PLAIN 으로 지정된 소스 클러스터에 대한 인증입니다.
    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
    지원되는 리소스 예약, 현재 cpumemory 및 사용할 수 있는 최대 리소스를 지정하는 제한입니다.
    37
    지정된 Kafka Connect 로거 및 로그 수준은 ConfigMap을 통해 직접 (인라인) 또는 간접적으로(외부)합니다. 사용자 지정 ConfigMap은 log4j.properties 또는 log4j2.properties 키에 배치해야 합니다. Kafka Connect log4j.rootLogger 로거의 경우 로그 수준을 INFO, ERROR, WARN, TRACE, DEBUG, FATAL 또는 OFF로 설정할 수 있습니다.
    38
    컨테이너(liveness)를 다시 시작할 시기와 컨테이너가 트래픽을 수락할 수 있는 시기(가용성)를 확인할 수 있는 상태 점검 입니다.
    39
    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의 외부 구성 구성 공급자 플러그인을 사용하여 외부 소스에서 구성 값을 로드할 수도 있습니다.
  2. 리소스를 생성하거나 업데이트합니다.

    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 구성에서 시크릿을 참조해야 합니다.

절차

  1. 두 개의 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: {}

  2. 별도의 네임스페이스에서 Kafka 리소스를 생성하거나 업데이트합니다.

    oc apply -f <kafka_configuration_file> -n <namespace>

    Cluster Operator는 리스너를 생성하고 클러스터 및 클라이언트 CA(인증 기관) 인증서를 설정하여 Kafka 클러스터 내에서 인증을 활성화합니다.

    인증서는 < cluster_name> -cluster-ca-cert 에서 생성됩니다.

  3. 소스 Kafka 클러스터의 사용자 및 대상 Kafka 클러스터의 사용자용으로 하나씩 두 개의 KafkaUser 리소스를 구성합니다.

    1. 해당 소스 및 대상 Kafka 클러스터와 동일한 인증 및 권한 부여 유형을 구성합니다. 예를 들어 소스 Kafka 클러스터의 Kafka 구성에서 tls 인증 및 간단한 권한 부여 유형을 사용한 경우 KafkaUser 구성에서 동일하게 사용합니다.
    2. 소스 및 대상 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:
              - Read

    mTLS 인증에 대한 대상 사용자 구성 예

    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

    참고

    typetls-external 로 설정하여 User Operator 외부에서 발급한 인증서를 사용할 수 있습니다. 자세한 내용은 4.2.97절. “KafkaUserSpec schema reference”의 내용을 참조하십시오.

  4. 소스 및 대상 Kafka 클러스터에 대해 생성한 각 네임스페이스에서 KafkaUser 리소스를 생성하거나 업데이트합니다.

    oc apply -f <kafka_user_configuration_file> -n <namespace>

    User Operator는 선택한 인증 유형을 기반으로 클라이언트(MirrorMaker)와 클라이언트 인증에 사용되는 보안 인증 정보를 나타내는 사용자를 생성합니다.

    User Operator는 KafkaUser 리소스와 동일한 이름으로 새 시크릿을 생성합니다. 보안에는 mTLS 인증을 위한 개인 키와 공개 키가 포함되어 있습니다. 공개 키는 클라이언트 CA에서 서명한 사용자 인증서에 포함됩니다.

  5. 인증 세부 정보를 사용하여 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"

    1
    소스 Kafka 클러스터의 TLS 인증서입니다. 별도의 네임스페이스에 있는 경우 Kafka 클러스터의 네임스페이스에서 클러스터 보안을 복사합니다.
    2
    TLS 메커니즘 을 사용하여 소스 Kafka 클러스터에 액세스하는 사용자 인증입니다.
    3
    대상 Kafka 클러스터의 TLS 인증서입니다.
    4
    대상 Kafka 클러스터에 액세스하기 위한 사용자 인증입니다.
  6. 대상 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가 실행 중입니다.

절차

  1. 다시 시작하려는 Kafka MirrorMaker 2 커넥터를 제어하는 KafkaMirrorMaker2 사용자 정의 리소스의 이름을 찾습니다.

    oc get KafkaMirrorMaker2
  2. KafkaMirrorMaker2 사용자 정의 리소스에서 다시 시작할 Kafka MirrorMaker 2 커넥터의 이름을 찾습니다.

    oc describe KafkaMirrorMaker2 KAFKAMIRRORMAKER-2-NAME
  3. 커넥터를 다시 시작하려면 OpenShift에서 KafkaMirrorMaker2 리소스에 주석을 답니다. 이 예에서 oc annotatemy-source->my-target.MirrorSourceConnector라는 커넥터를 다시 시작합니다.

    oc annotate KafkaMirrorMaker2 KAFKAMIRRORMAKER-2-NAME "strimzi.io/restart-connector=my-source->my-target.MirrorSourceConnector"
  4. 다음 조정이 수행될 때까지 기다립니다(기본적으로 2분 마다).

    조정 프로세스에서 주석을 탐지한 한 Kafka MirrorMaker 2 커넥터가 재시작됩니다. 재시작 요청이 승인되면 KafkaMirrorMaker2 사용자 정의 리소스에서 주석이 제거됩니다.

2.4.9. Kafka MirrorMaker 2 커넥터 작업 재시작 수행

다음 절차에서는 OpenShift 주석을 사용하여 Kafka MirrorMaker 2 커넥터 작업 재시작을 수동으로 트리거하는 방법을 설명합니다.

사전 요구 사항

  • Cluster Operator가 실행 중입니다.

절차

  1. 다시 시작하려는 Kafka MirrorMaker 2 커넥터를 제어하는 KafkaMirrorMaker2 사용자 정의 리소스의 이름을 찾습니다.

    oc get KafkaMirrorMaker2
  2. Kafka MirrorMaker 2 커넥터의 이름과 KafkaMirrorMaker2 사용자 정의 리소스에서 다시 시작할 작업의 ID를 찾습니다. 작업 ID는 0부터 시작하는 음수가 아닌 정수입니다.

    oc describe KafkaMirrorMaker2 KAFKAMIRRORMAKER-2-NAME
  3. 커넥터 작업을 다시 시작하려면 OpenShift에서 KafkaMirrorMaker2 리소스에 주석을 답니다. 이 예에서 oc annotate restarts 작업 0 of a connector named my-source->my-target.MirrorSourceConnector:

    oc annotate KafkaMirrorMaker2 KAFKAMIRRORMAKER-2-NAME "strimzi.io/restart-connector-task=my-source->my-target.MirrorSourceConnector:0"
  4. 다음 조정이 수행될 때까지 기다립니다(기본적으로 2분 마다).

    조정 프로세스에서 주석을 탐지한 한 Kafka MirrorMaker 2 커넥터 작업이 재시작됩니다. 재시작 작업 요청이 수락되면 주석이 KafkaMirrorMaker2 사용자 정의 리소스에서 제거됩니다.

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

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

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

Red Hat 소개

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

Theme

© 2026 Red Hat
맨 위로 이동