无法使用内部和外部侦听器启动debizium-kafka broker


docker run -it --rm --name kafka -p 9092:9092 -p 9094:9094 --link zookeeper:zookeeper --env KAFKA_LISTENERS=LISTENER_INTERNAL://:9092,LISTENER_EXTERNAL://:9094 --env KAFKA_ADVERTISED_LISTENERS=LISTENER_INTERNAL://kafka:9092,LISTENER_EXTERNAL://localhost:9094 --env KAFKA_ALLOW_PLAINTEXT_LISTENER="yes" --env KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=LISTENER_INTERNAL:PLAINTEXT,LISTENER_EXTERNAL:PLAINTEXT --env KAFKA_INTER_BROKER_LISTENER_NAME=LISTENER_INTERNAL  debezium/kafka:1.9

我试图通过debezium的docker形象来启动卡夫卡。我在docker网络内和docker网络外都有KafkaConsumers。

如果我用启动Kafka

--env KAFKA_ADVERTISED_LISTENERS=LISTENER_INTERNAL://:9092,LISTENER_EXTERNAL://localhost:9094

我的外部消费者通过连接到端口9094可以正常工作。

现在,如果LISTENER_INTERNAL设置为:9092,我的docker内部消费者就无法工作。我看到的所有例子都使用docker compose,它们使用LISTENER_INTERNAL://kafka:9092

如果我尝试(原始片段(,那么我会得到以下错误,它们拒绝启动。

java.net.UnknownHostException: kafka
at java.base/java.net.InetAddress$CachedAddresses.get(InetAddress.java:797)
at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1509)
at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1368)
at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1302)
at org.apache.kafka.clients.DefaultHostResolver.resolve(DefaultHostResolver.java:27)
at org.apache.kafka.clients.ClientUtils.resolve(ClientUtils.java:110)
at org.apache.kafka.clients.ClusterConnectionStates$NodeConnectionState.currentAddress(ClusterConnectionStates.java:511)
at org.apache.kafka.clients.ClusterConnectionStates$NodeConnectionState.access$200(ClusterConnectionStates.java:468)
at org.apache.kafka.clients.ClusterConnectionStates.currentAddress(ClusterConnectionStates.java:173)
at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:988)
at org.apache.kafka.clients.NetworkClient.ready(NetworkClient.java:301)
at org.apache.kafka.clients.NetworkClientUtils.awaitReady(NetworkClientUtils.java:64)
at kafka.controller.RequestSendThread.brokerReady(ControllerChannelManager.scala:291)
at kafka.controller.RequestSendThread.doWork(ControllerChannelManager.scala:245)
at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96)

如何告诉docker在启动时使用容器的IP地址或容器的名称,并将其绑定到LISTENER_INTERNAL

您不需要容器的IP地址。

您没有在共享网桥上使用--link(已弃用(或--network

如果你想让Kafka监听所有接口,你可以设置listeners=<PROTOCOL>://0.0.0.0:<port>,但默认情况下,它应该绑定到它的主机名,这不会解决外部客户端的DNS错误

相关文章连接到运行在Docker 中的Kafka

相关内容

  • 没有找到相关文章

最新更新