当前位置: 首页 > 知识库问答 >
问题:

无法使用Docker容器中的Kafka代理运行控制台使用者

商昆琦
2023-03-14

我可以从命令行运行Zookeeper和Kafka代理,成功地生成和使用消息。当我使用Zookeeper构建docker容器时,我可以使用从命令行运行的Kafka代理来运行它,再次成功地生成和使用消息。当我将代理放入docker容器中时,消费者和生产者就找不到可以连接到的代理。

我已经检查以确保Zookeeper有一个连接的代理:下面的Zookeeper“dump”命令

echo dump | nc localhost 2181

退货

SessionTracker dump:
Session Sets (3)/(1):
0 expire at Thu May 28 09:53:33 GMT 2020:
0 expire at Thu May 28 09:53:36 GMT 2020:
1 expire at Thu May 28 09:53:39 GMT 2020:
    0x10002dfed700008
ephemeral nodes dump:
Sessions with Ephemerals (1):
0x10002dfed700008:
    /controller
    /brokers/ids/0
Connections dump:
Connections Sets (2)/(2):
0 expire at Thu May 28 09:53:37 GMT 2020:
2 expire at Thu May 28 09:53:47 GMT 2020:
    ip: /172.18.0.1:55656 sessionId: 0x0
    ip: /172.18.0.5:48474 sessionId: 0x10002dfed700008
kafka-topics.sh --list --zookeeper localhost:2181
netstat -plnt

我可以看到我在端口2181和9092上有监听器,如下所示

tcp6       0      0 :::9092                 :::*                    LISTEN      54661/docker-proxy
tcp6       0      0 :::2181                 :::*                    LISTEN      47872/docker-proxy 

但是,当我尝试用命令连接使用者时

kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic aaaa

我有错误

WARN [Consumer clientId=consumer-console-consumer-8228-1, groupId=console-consumer-8228] Bootstrap broker localhost:9092 (id: -1 rack: null) disconnected (org.apache.kafka.clients.NetworkClient)

共有1个答案

艾修筠
2023-03-14

请确保配置以下内容:

KAFKA_LISTENERS: LISTENER_INTERNAL://kafka-host:29092,LISTENER_EXTERNAL://kafka-host:9092
KAFKA_ADVERTISED_LISTENERS: LISTENER_INTERNAL://kafka-host:29092,LISTENER_EXTERNAL://localhost:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: LISTENER_INTERNAL:PLAINTEXT,LISTENER_EXTERNAL:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: LISTENER_INTERNAL

>

  • 现在,在Docker网络中运行的所有客户端都应该使用

    LISTENER_INTERNAL://kafka-host:29092
    

    Docker网络以外的所有客户端都应使用

    LISTENER_EXTERNAL://kafka-host:9092
    

  •  类似资料:
    • 我试图使用apache kafka二进制文件中的kafka控制台生成器生成消息,并在spring boot中使用消费者设置。消费者使用avro模式。 当消息以json格式生成时,我的消费者抛出异常-“无法序列化”。 我找到了一个解决方案,可以使用“ConFluent Platform 7.1”,它有kafka-avro-console-生产者。它支持avro,但它是企业版。 有没有一种方法可以使用

    • 我试图用JUnit5控制台启动器运行一个简单的测试。我试了几个选择,但都不起作用。谁能告诉我哪里出了问题吗? .+--JUnit Jupiter[OK] '--JUnit Vintage[OK] 测试运行在11毫秒后完成[2个容器] [0个容器跳过][2个容器启动] [0个容器中止][2个容器成功] [0个容器失败][0个测试找到] [0个测试跳过][0个测试启动] [0个测试中止][0个测试成功

    • 问题内容: 我正在尝试使用JUnit5控制台启动器运行一个简单的测试。我尝试了几种选择,但是没有用。有人可以告诉我哪里出了问题吗? 给我警告 我试图在目录中运行所有测试,但这似乎找不到测试: 结果是这样的: 。+-JUnit Jupiter [确定] ‘-JUnit Vintage [确定] 11毫秒后测试运行完成[找到2个容器] [跳过0个容器] [0个容器中止] [2个容器成功] [0个容器失

    • 我有一个react-app,它简单地显示hello-world消息,但我喜欢运行应用程序通过docker-container,但有这个问题。在此消息之后,进程停止,没有运行应用程序。 我不能理解我应该做什么,因为我有一个很小的应用程序,在Dockerfile中有基本代码 我需要安装webpack-dev-server吗,我尝试了,但得到了版本错误,如“手动添加服务器”的版本比已经安装的服务器低。所

    • 问题内容: 我正在将Jenkins声明性管道与Docker代理一起使用来构建和测试我的软件,包括使用testcontainer运行集成测试。我可以在开发环境中(不使用Jenkins)运行我的testcontainers测试,但是在Jenkins下它们失败。 testcontainers Ryuk资源获取守护程序不起作用 我可以通过将环境变量设置为来禁用守护进程来解决该问题。但是,某些集成测试仍然反