You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置不同虚拟机上的两个Docker化Kafka集群互见主题?

Kafka跨集群双向主题同步配置方案

要实现两个Kafka集群互相显示对方的主题,核心是完成主题元数据与消息的双向同步,官方推荐使用Kafka MirrorMaker 2.0实现,以下是适配你环境的具体操作步骤:

1. 确认集群网络与基础配置

你已验证过两个集群可互相访问,只需确保每个集群的Kafka服务对外地址配置正确:

  • Windows集群(192.168.2.22)的docker-compose.yml中,修改kafka1服务的环境变量:
    KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9092,PLAINTEXT_HOST://192.168.2.22:9092
    KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,PLAINTEXT_HOST://0.0.0.0:9093
    KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
    
  • Linux集群(192.168.94.130)同理修改:
    KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9092,PLAINTEXT_HOST://192.168.94.130:9092
    KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,PLAINTEXT_HOST://0.0.0.0:9093
    KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
    

修改后重启两个集群的Kafka服务:

# Windows集群执行
docker-compose restart kafka1
# Linux集群执行
docker-compose restart kafka1

2. 部署Kafka Connect(集成MirrorMaker 2插件)

选择Linux集群部署Kafka Connect服务(也可选择Windows集群,只要能访问两个集群即可),在Linux的docker-compose.yml中添加以下服务:

connect:
  image: confluentinc/cp-kafka-connect:7.4.0
  container_name: connect
  depends_on:
    - kafka1
  ports:
    - "8083:8083"
  environment:
    CONNECT_BOOTSTRAP_SERVERS: "192.168.94.130:9092"
    CONNECT_REST_ADVERTISED_HOST_NAME: connect
    CONNECT_GROUP_ID: connect-mirror-group
    CONNECT_CONFIG_STORAGE_TOPIC: docker-connect-configs
    CONNECT_OFFSET_STORAGE_TOPIC: docker-connect-offsets
    CONNECT_STATUS_STORAGE_TOPIC: docker-connect-status
    CONNECT_KEY_CONVERTER: org.apache.kafka.connect.json.JsonConverter
    CONNECT_VALUE_CONVERTER: org.apache.kafka.connect.json.JsonConverter
    CONNECT_KEY_CONVERTER_SCHEMAS_ENABLE: false
    CONNECT_VALUE_CONVERTER_SCHEMAS_ENABLE: false
    CONNECT_INTERNAL_KEY_CONVERTER: "org.apache.kafka.connect.json.JsonConverter"
    CONNECT_INTERNAL_VALUE_CONVERTER: "org.apache.kafka.connect.json.JsonConverter"
    CONNECT_PLUGIN_PATH: "/usr/share/java,/usr/share/confluent-hub-components"
    CONNECT_LOG4J_LOGGERS: org.apache.kafka.connect.runtime.rest=WARN,org.reflections=ERROR

启动Connect服务:

docker-compose up -d connect

3. 创建双向同步连接器

3.1 同步Windows集群主题到Linux集群

执行curl命令创建同步连接器:

curl -X POST -H "Content-Type: application/json" --data '{
  "name": "mirror-windows-to-linux",
  "config": {
    "connector.class": "org.apache.kafka.connect.mirror.MirrorSourceConnector",
    "tasks.max": "1",
    "source.cluster.alias": "windows",
    "source.bootstrap.servers": "192.168.2.22:9092",
    "target.cluster.alias": "linux",
    "target.bootstrap.servers": "192.168.94.130:9092",
    "topics": "my-Windows-Topic-1",
    "topic.prefix": "",
    "sync.topic.configs": "true",
    "sync.topic.acls": "true"
  }
}' http://192.168.94.130:8083/connectors

3.2 同步Linux集群主题到Windows集群

执行curl命令创建反向同步连接器:

curl -X POST -H "Content-Type: application/json" --data '{
  "name": "mirror-linux-to-windows",
  "config": {
    "connector.class": "org.apache.kafka.connect.mirror.MirrorSourceConnector",
    "tasks.max": "1",
    "source.cluster.alias": "linux",
    "source.bootstrap.servers": "192.168.94.130:9092",
    "target.cluster.alias": "windows",
    "target.bootstrap.servers": "192.168.2.22:9092",
    "topics": "my-Linux-Topic",
    "topic.prefix": "",
    "sync.topic.configs": "true",
    "sync.topic.acls": "true"
  }
}' http://192.168.94.130:8083/connectors

4. 验证同步效果

  • 在Windows集群查看主题列表:
docker exec kafka1 kafka-topics --bootstrap-server localhost:9092 --list

应返回my-Windows-Topic-1和my-Linux-Topic

  • 在Linux集群查看主题列表:
docker exec kafka1 kafka-topics --bootstrap-server localhost:9092 --list

应返回my-Linux-Topic和my-Windows-Topic-1

  • 额外测试消息同步:在Windows集群发送消息到my-Windows-Topic-1,在Linux集群消费;在Linux集群发送消息到my-Linux-Topic,在Windows集群消费,确认消息可正常跨集群传递。

关键注意事项

  • 若需同步所有主题,可将topics字段改为.*,但建议明确指定主题以避免不必要的资源消耗。
  • 确保两个集群的Kafka版本一致,避免兼容性问题。
  • 同步主题配置时,若目标集群的默认副本数、分区数与源集群不同,需提前调整目标集群的默认配置,或修改sync.topic.configs参数控制同步范围。

内容的提问来源于stack exchange,提问作者debo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:55:20