嗨,我目前正在使用Docker设置Kafka.我已设法使用已发布的汇合图像设置Zookeeper和Kafka,请参阅以下docker-compose文件:
version: '2' services: zookeeper: image: confluentinc/cp-zookeeper:3.2.0 container_name: zookeeper hostname: zookeeper ports: - "2181:2181" environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 restart: always kafka: image: confluentinc/cp-kafka:3.2.0 hostname: kafka container_name: kafka depends_on: - zookeeper ports: - '9092:9092' environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181' KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.99.100:9092 LISTENERS: PLAINTEXT://0.0.0.0:9092 restart: always kafka-rest: image: confluentinc/cp-kafka-rest:3.2.0 container_name: kafka-rest depends_on: - kafka ports: - '8082:8082' environment: KAFKA_REST_ZOOKEEPER_CONNECT: 'zookeeper:2181' KAFKA_REST_LISTENERS: http://kafka-rest:8082 KAFKA_REST_SCHEMA_REGISTRY_URL: http://schema-registry:8081 KAFKA_REST_HOST_NAME: kafka-rest restart: always schema-registry: image: confluentinc/cp-schema-registry:3.2.0 container_name: schema-registry depends_on: - kafka ports: - '8081' environment: SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL: 'zookeeper:2181' SCHEMA_REGISTRY_HOST_NAME: schema-registry SCHEMA_REGISTRY_LISTENERS: http://schema-registry:8081 restart: always connect: image: confluentinc/cp-kafka-connect:3.2.0 container_name: kafka-connect depends_on: - zookeeper - kafka - schema-registry ports: - "8083:8083" restart: always environment: CONNECT_BOOTSTRAP_SERVERS: 'kafka:9092' CONNECT_REST_ADVERTISED_HOST_NAME: connect CONNECT_REST_PORT: 8083 CONNECT_GROUP_ID: compose-connect-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: io.confluent.connect.avro.AvroConverter CONNECT_KEY_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8081 CONNECT_VALUE_CONVERTER: io.confluent.connect.avro.AvroConverter CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8081 CONNECT_INTERNAL_KEY_CONVERTER: org.apache.kafka.connect.json.JsonConverter CONNECT_INTERNAL_VALUE_CONVERTER: org.apache.kafka.connect.json.JsonConverter CONNECT_ZOOKEEPER_CONNECT: "zookeeper:2181"
现在我已经设法通过正确地将advertised.listener属性设置为PLAINTEXT:// {DOCKER_MACHINE_IP}:9092来正确地将Kafka容器暴露给我的非dockerized应用程序,但正如您所看到的,我还添加了其他汇合应用程序到扩展我的Kafka设置(Kafka REST,Schema-Registry).由于advertised.listener属性,它们无法再连接到我的Kafka实例.
我可以将它更改为正确的容器主机名 - > PLAINTEXT:// kafka:9092然后我失去了使用我的其他应用程序再次访问kafka实例的能力.有没有简单的方法来解决这个问题?
奥马尔(Omar),也许您已经解决了问题,但是为了将来参考,即使在Windows上,汉斯·杰斯珀森(Hans Jespersen)的评论也对我有用。
以管理员C:\Windows\System32\drivers\etc\hosts
身份打开并添加以下行,以将kafka代理公开为localhost。
127.0.0.1 broker
我的docker-compose.yml
文件如下所示:
--- version: '2' services: zookeeper: image: confluentinc/cp-zookeeper hostname: zookeeper extra_hosts: - "moby:127.0.0.1" ports: - "2181:2181" environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 broker: image: confluentinc/cp-kafka hostname: broker extra_hosts: - "moby:127.0.0.1" depends_on: - zookeeper ports: - '9092:9092' environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181' KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://broker:9092' KAFKA_DEFAULT_REPLICATION_FACTOR: 1 schema_registry: image: confluentinc/cp-schema-registry hostname: schema_registry # extra_hosts: # - "moby:127.0.0.1" depends_on: - zookeeper - broker ports: - '8081:8081' environment: SCHEMA_REGISTRY_HOST_NAME: schema_registry SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL: 'zookeeper:2181' kafka-rest: image: confluentinc/cp-kafka-rest container_name: kafka-rest extra_hosts: - "moby:127.0.0.1" depends_on: - zookeeper - broker ports: - '8082:8082' environment: KAFKA_REST_ZOOKEEPER_CONNECT: 'zookeeper:2181' KAFKA_REST_LISTENERS: http://kafka-rest:8082 KAFKA_REST_SCHEMA_REGISTRY_URL: http://schema-registry:8081 KAFKA_REST_HOST_NAME: kafka-rest
或者,也可以公开笔记本电脑的当前IP地址(使用ipconfig / all),但是这样做的缺点是,每当网络更改时,我也必须更改docker-compose.yml
文件。