已连接到组协调器但无法连接到 kafka 节点

Posted

技术标签:

【中文标题】已连接到组协调器但无法连接到 kafka 节点【英文标题】:Connected to a group coordinator but can't connect to kafka node 【发布时间】:2021-07-26 00:26:51 【问题描述】:

我正在尝试设置一个集成测试,其中我有一个 kafka 生产者(quarkus / 标准 kafkaproducer,dockerized)将内容推送到一个主题,然后我的应用程序(quarkus / 反应式消息传递,也是 dockerized)接收它并推送到另一个主题来通知它已收到消息(主题:消息接收)。在我的测试中,我有一个 KafkaContainer

@Container
static KafkaContainer kafka = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:5.5.4"))
        .withNetworkAliases("kafkaNode")
        .withNetwork(CommonNetwork.getInstance())
        .withExposedPorts(9092, 9093);

我的两个 dockerized 应用都运行良好,因为它们都共享同一个网络,发送/接收/发送场景正在运行。但是我在实际测试中遇到了 KafkaConsumer 问题,他应该检查主题 messageReceived 以获取来自我的应用程序的消息。我正在使用以下内容将引导服务器配置添加到我的消费者,这似乎正在工作:

props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, kafka.getBootstrapServers());

它使用来自 testcontainers 的随机 ip 发现组协调器,因此配置必须正确。

Discovered group coordinator localhost:49725 (id: 2147483646 rack: null)

但随后它会尝试连接到以下内容:

Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
Bootstrap broker localhost:9092 (id: -1 rack: null) disconnected

当它应该连接到与组协调器相同的 localhost:49725 时,因为如果我理解正确,我只有一个节点充当代理和组协调器。

我可能做错了什么,但我不知道是什么。可以在这件事上使用一些帮助。谢谢。

【问题讨论】:

【参考方案1】:

我在探索 TestContainers 进行集成测试时遇到了类似的问题。我设法用下面的代码解决了它:

KafkaContainer kafkaContainer = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka:5.4.3"));
        kafkaContainer.setPortBindings(Arrays.asList("9092:9092", "9093:9093", "2181:2181"));
        kafkaContainer.start();
        kafkaContainer.waitingFor(Wait.forListeningPort());

KafkaConsumer 使用以下方式连接:

props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "PLAINTEXT://localhost:9093");

这里的关键是PLAINTEXT://localhost:9093

【讨论】:

感谢您的输入,这可能会解决我的问题,但我希望有一些不需要手动绑定端口的东西。根据我的阅读,这不是一个好的做法,并且可能会导致 CI​​ 环境出现问题,因为这些端口可能会被占用。 好的。所以你可以有自己的逻辑从这个kafka.getBootstrapServers()中取出端口,然后使用PLAINTEXT://localhost:<PORT>

以上是关于已连接到组协调器但无法连接到 kafka 节点的主要内容,如果未能解决你的问题,请参考以下文章

节点无法通过 Docker Compose 连接到 Redis

我们无法在此设备上激活windows,因为无法连接到你的组织的激活服务器。请确保已连接到你的组织服务器,然后重试。如果仍存在激活问题,请联系组织的支持人员,错误代码:ox80070078

远程桌面连接已断开 客户端无法连接。您已连接到这台计算机的控制台。无法建立新的控制台会话。

gitkraken 无法连接到 gitlab 无效参数

无法从android okhttp3连接到节点websocket

我的 Angular 7 组件已连接到数据源,但未显示数据