You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

配置Apache Pulsar多监听器时绑定失败求助

解决Pulsar Broker端口绑定失败问题

问题根源

你遇到的bind(..) failed: Address in use错误,核心原因是同时配置了advertisedAddressadvertisedListeners——这两个配置在多监听器模式下会冲突,导致Broker尝试重复绑定同一端口,叠加默认broker.conf的端口配置后,最终引发端口占用。

修复步骤

1. 移除冲突配置

删除advertisedAddress=broker这一行,多监听器模式下不需要全局地址配置,每个监听器的访问地址已经在advertisedListeners中明确定义。

2. 调整后的完整Broker配置

修改后的配置确保每个监听器职责清晰、端口无冲突,完全匹配你的访问需求:

broker:
    image: apachepulsar/pulsar:latest
    container_name: broker
    hostname: broker
    restart: on-failure
    networks:
      - pulsar
    environment:
      - metadataStoreUrl=zk:zookeeper:2181
      - zookeeperServers=zookeeper:2181
      - clusterName=cluster-a
      - managedLedgerDefaultEnsembleSize=1
      - managedLedgerDefaultWriteQuorum=1
      - managedLedgerDefaultAckQuorum=1
      - advertisedListeners=internal:pulsar://127.0.0.1:6650,container:pulsar://broker:6652,external:pulsar://192.168.1.113:6654
      - bindAddresses=internal:pulsar://0.0.0.0:6650,container:pulsar://0.0.0.0:6652,external:pulsar://0.0.0.0:6654
      - internalListenerName=internal
      - PULSAR_MEM=-Xms512m -Xmx512m -XX:MaxDirectMemorySize=256m
    depends_on:
      zookeeper:
        condition: service_healthy
      bookie:
        condition: service_started
    ports:
      - "6650:6650"
      - "6652:6652"
      - "6654:6654"
      - "8080:8080"
    command: bash -c "bin/apply-config-from-env.py conf/broker.conf && exec bin/pulsar broker"

3. 监听器访问逻辑验证

  • internal监听器:用于Broker容器内部测试,同时映射到宿主机6650端口,支持宿主机本地客户端访问。
  • container监听器:同一Docker Compose网络内的其他容器,直接通过broker:6652访问Pulsar,无需额外配置。
  • external监听器:外部客户端通过192.168.1.113:6654访问,确保宿主机该端口未被其他进程占用。

额外排查建议

  • 检查宿主机端口占用情况:执行netstat -tulpn | grep 665[024],确认6650、6652、6654端口未被其他服务占用。
  • 清理旧容器缓存:若修改后仍报错,执行docker-compose down -v && docker-compose up -d,彻底重置容器环境。

内容的提问来源于stack exchange,提问作者Red Riding Hood

火山引擎 最新活动