2.4. Kafka MirrorMaker 集群配置


本章论述了如何在 AMQ Streams 集群中配置 Kafka MirrorMaker 部署,以便在 Kafka 集群间复制数据。

您可以使用带有 MirrorMaker 或 MirrorMaker 2.0 的 AMQ Streams。MirrorMaker 2.0 是最新版本,提供在 Kafka 集群间镜像数据更为有效的方法。

如果使用 MirrorMaker,请配置 KafkaMirrorMaker 资源。

重要

在 Apache Kafka 3.0.0 中已弃用 Kafka MirrorMaker 1 (正如文档中的 imagesMaker),并将在 Apache Kafka 4.0.0 中删除。因此,在 AMQ Streams 中还已弃用了用于部署 Kafka MirrorMaker 1 的 KafkaMirrorMaker 自定义资源。当使用 Apache Kafka 4.0.0 时,KafkaMirrorMaker 资源将从 AMQ Streams 中删除。作为替代方法,在 IdentityReplicationPolicy 中使用 KafkaMirrorMaker2 自定义资源。

以下步骤演示了如何配置资源:

KafkaMirrorMaker 资源的完整 schema 在 KafkaMirrorMaker 模式中描述。

2.4.1. 配置 Kafka MirrorMaker

使用 KafkaMirrorMaker 资源的属性来配置 Kafka MirrorMaker 部署。

您可以使用 TLS 或 SASL 身份验证为制作者和使用者配置访问控制。此流程演示了在使用者和生产端使用 TLS 加密和解密的配置。

先决条件

  • 有关运行的信息 ,请参阅 OpenShift 中的部署和升级 AMQ Streams 指南:

  • 源和目标集群必须可用

流程

  1. 编辑 KafkaMirrorMaker 资源的 spec 属性。

    您可以在以下示例配置中显示您可以配置的属性:

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaMirrorMaker
    metadata:
      name: my-mirror-maker
    spec:
      replicas: 3 
    1
    
      consumer:
        bootstrapServers: my-source-cluster-kafka-bootstrap:9092 
    2
    
        groupId: "my-group" 
    3
    
        numStreams: 2 
    4
    
        offsetCommitInterval: 120000 
    5
    
        tls: 
    6
    
          trustedCertificates:
          - secretName: my-source-cluster-ca-cert
            certificate: ca.crt
        authentication: 
    7
    
          type: tls
          certificateAndKey:
            secretName: my-source-secret
            certificate: public.crt
            key: private.key
        config: 
    8
    
          max.poll.records: 100
          receive.buffer.bytes: 32768
          ssl.cipher.suites: "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" 
    9
    
          ssl.enabled.protocols: "TLSv1.2"
          ssl.protocol: "TLSv1.2"
          ssl.endpoint.identification.algorithm: HTTPS 
    10
    
      producer:
        bootstrapServers: my-target-cluster-kafka-bootstrap:9092
        abortOnSendFailure: false 
    11
    
        tls:
          trustedCertificates:
          - secretName: my-target-cluster-ca-cert
            certificate: ca.crt
        authentication:
          type: tls
          certificateAndKey:
            secretName: my-target-secret
            certificate: public.crt
            key: private.key
        config:
          compression.type: gzip
          batch.size: 8192
          ssl.cipher.suites: "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" 
    12
    
          ssl.enabled.protocols: "TLSv1.2"
          ssl.protocol: "TLSv1.2"
          ssl.endpoint.identification.algorithm: HTTPS 
    13
    
      include: "my-topic|other-topic" 
    14
    
      resources: 
    15
    
        requests:
          cpu: "1"
          memory: 2Gi
        limits:
          cpu: "2"
          memory: 2Gi
      logging: 
    16
    
        type: inline
        loggers:
          mirrormaker.root.logger: "INFO"
      readinessProbe: 
    17
    
        initialDelaySeconds: 15
        timeoutSeconds: 5
      livenessProbe:
        initialDelaySeconds: 15
        timeoutSeconds: 5
      metricsConfig: 
    18
    
       type: jmxPrometheusExporter
       valueFrom:
         configMapKeyRef:
           name: my-config-map
           key: my-key
      jvmOptions: 
    19
    
        "-Xmx": "1g"
        "-Xms": "1g"
      image: my-org/my-image:latest 
    20
    
      template: 
    21
    
        pod:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                - labelSelector:
                    matchExpressions:
                      - key: application
                        operator: In
                        values:
                          - postgresql
                          - mongodb
                  topologyKey: "kubernetes.io/hostname"
        connectContainer: 
    22
    
          env:
            - name: JAEGER_SERVICE_NAME
              value: my-jaeger-service
            - name: JAEGER_AGENT_HOST
              value: jaeger-agent-name
            - name: JAEGER_AGENT_PORT
              value: "6831"
      tracing: 
    23
    
        type: jaeger
    Copy to Clipboard Toggle word wrap
    1
    2
    面向消费者和生成器的 bootstrap 服务器
    3
    4
    5
    6
    TLS 加密,使用密钥名称,其中 TLS 证书存储为消费者或制作者的 X.509 格式。如果证书存储在同一 secret 中,可以多次列出它。
    7
    使用 TLS 机制的用于消费者或生成者的验证(如此处所示),使用 OAuth bearer tokens, 或一个基于 SASL 的 SCRAM-SHA-256/SCRAM-SHA-512PLAIN 机制。
    8
    consumerproducer 的 Kafka 配置选项。
    9
    使用 TLS 版本的特定 密码套件 运行外部监听程序的 SSL 属性
    10
    通过设置为 HTTPS 来启用主机名验证。空字符串禁用验证。
    11
    如果 abortOnSendFailure 属性设为 true,则 Kafka MirrorMaker 将退出,并且容器将因消息的发送失败而重启。
    12
    使用 TLS 版本的特定 密码套件 运行外部监听程序的 SSL 属性
    13
    通过设置为 HTTPS 来启用主机名验证。空字符串禁用验证。
    14
    15
    用于保留 支持的资源、当前 cpu 和内存 的请求,以及指定可消耗的最大资源数量。
    16
    通过 ConfigMap 直接添加(内联)或间接(外部)的指定 日志记录器和日志级别。自定义 ConfigMap 必须放在 log4j.propertieslog4j2.properties 键下。MirrorMaker 有一个名为 mirrormaker.root.logger 的单个日志记录器。您可以将日志级别设置为 INFO、ERROR、WARN、TRACE、DEBUG、FATAL 或 OFF。
    17
    状况检查,了解何时重启容器(持续)以及容器是否可以接受流量(就绪状态)。
    18
    Prometheus metrics,通过引用本例中的 Prometheus JMX JMX exporter 配置的 ConfigMap 来启用。您可以启用指标,而无需进一步配置,使用对 metricsConfig.valueFrom.configMapKeyRef.key 下包含空文件的 ConfigMap 的引用。
    19
    JVM 配置选项,用于优化运行 Kafka MirrorMaker 的虚拟机(VM)性能。
    20
    ADVANCED OPTION: 容器镜像配置,这只在特殊情况下建议。
    21
    模板自定义。这里调度了带有反关联性的 pod,因此不会将 pod 调度到具有相同主机名的节点。
    22
    还使用 Jaeger 为分布式追踪 设置环境变量。
    23
    警告

    abortOnSendFailure 属性设置为 false 时,生产者会尝试在主题中发送下一消息。原始消息可能会丢失,因为没有尝试重新发送失败的信息。

  2. 创建或更新资源:

    oc apply -f <your-file>
    Copy to Clipboard Toggle word wrap

2.4.2. Kafka MirrorMaker 集群资源列表

以下资源由 OpenShift 集群中的 Cluster Operator 创建:

<mirror-maker-name>-mirror-maker
负责创建 Kafka MirrorMaker Pod 的部署。
<mirror-maker-name>-config
ConfigMap,包含 Kafka MirrorMaker 的辅助配置,并被 Kafka 代理 Pod 挂载为卷。
<mirror-maker-name>-mirror-maker
为 Kafka MirrorMaker worker 节点配置的 Pod Disruption Budget。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat