docker - Filebeat 和 Kafka:客户端已用完可与之交谈的代理
问题描述
我有两台服务器,让我们将它们命名server1
为server2
.
在server1
我有一个正在运行的docker
容器。Kafka
Broker 和 Zookeeper 的端口Kafka
映射到主机。
On server2
I want to installFilebeat
将一些日志消息发送到Kafka
on server1
。它似乎可以建立与经纪人的连接......
[publisher_pipeline_output] pipeline/output.go:143 Connecting to kafka(server1:9092)
[publisher_pipeline_output] pipeline/output.go:151 Connection to kafka(server1:9092) established
...但消息的实际发送失败并显示错误消息:
[kafka] kafka/client.go:317 Kafka (topic=sample-topic): kafka: client has run out of available brokers to talk to (Is your cluster reachable?)
我还尝试kafka-producer-console
从我的(也在 docker 中)运行,server2
并且确实有效!唯一的区别是 myFilebeat
不在docker
容器中运行,而是直接在server2
.
那么我忘记了什么?知道如何进一步调试问题吗?
与ADVERTISED_HOST
运行容器时一样,我确实使用了server1
主机名。
为了澄清:
我正在使用KAfka
(spotify/kafka
https://hub.docker.com/r/spotify/kafka )并像这样运行它:
docker run -p 2181:2181 -p 9092:9092 --name kafka --env ADVERTISED_HOST=server1 --env ADVERTISED_PORT=9092 spotify/kafka
我的Filebeat
配置如下所示:
output.kafka:
hosts: ["server1:9092"]
topic: 'sample-topic'
partition.round_robin:
reachable_only: false
required_acks: 1
compression: gzip
max_message_bytes: 1000000
解决方案
Kafka Broker 和 Zookeeper 的端口映射到主机
对于 Kafka,您需要的不仅仅是端口映射。您还需要将通告的侦听器地址(通告的主机是一个已弃用的属性)设置为运行容器的服务器的外部主机名/IP,以便从另一台机器访问它。您还需要将侦听器地址设为 0.0.0.0
Filebeat 不在 docker 容器中运行,而是直接在 server2 上运行
应该没关系
如果控制台生产者在另一台机器上工作,那么您会期望任何其他 Kafka 客户端也能正常工作
推荐阅读
- python-3.x - Pandas Python groupby多列 - 根据具有特定值的第一列按第2列中的值对行进行排序
- python - 无法使用 plotly 创建 HTML 文件
- node.js - Discord.js 组件
- python - 在 wxPython 中使用 TextCtrl 对 StaticText 进行分组
- python - Keras/Tensorflow 的 CTC 损失;形状不可配置
- python - 我有一个将 .dav 文件发送到我的 ftp 的 DVR 如何在我的 wordpress 站点中将其转换为 mp4?
- angular - 我无法导航到我的关于选项卡在 coursera 上的 Angular js 作业中。为什么?
- mysql - 更新时的Mysql未知列
- r - 为 tibble r 中的每一列创建一个 for 循环
- java - 如何使用 java spring 验证来验证字符串长度?