我正在使用一个解决方案,我在一个主机系统中将Kafka和Confluent部署在两个不同的Docker容器中 . 为了我的测试目的,我需要向Kafka提供一些测试数据 . 所以我正在修改Kafka server.configuration 以修改正在运行的docker容器中的"listeners"和"advertised.listeners"属性,如下所示 .

修改后的属性

listeners = PLAINTEXT://0.0.0.0:9092 advertised.listeners = PLAINTEXT:// GuestHost:9092

注意: - GuestHost是部署Docker容器的主机系统的主机名 .

经过这些修改后,我正在重新启动Kafka容器 . 稍后当我重新启动Confluent时,它会崩溃并显示以下消息 .

confluent_1  | [2018-01-19 07:34:34,480] ERROR Server died unexpectedly:  (io.confluent.kafka.schemaregistry.rest.SchemaRegistryMain:51)
confluent_1  | org.apache.kafka.common.errors.TimeoutException: Timeout expired while fetching topic metadata
confluent_confluent_1 exited with code 1

从错误消息我可以看到Confluent无法从Kafka获取主题元数据,但为什么我无法获取 . 我怀疑Confluent无法使用来宾主机与Kafka通信 .

注意: - 通过将Kafka泊坞窗容器名称设置为advertised.listener主机名,Confluent能够与Kafka通信并且不会崩溃 .

需要一些指针才能使用Guest Host名称从Confluent容器与Kafka Docker容器进行通信 .