【发布时间】:2021-10-14 17:34:24
【问题描述】:
我想将kafka与elk stack一起使用,其中filebeat从文件中读取日志并将数据发送到kafka,然后将其发送到logstash。我正在使用 docker-compose 文件运行 kafka。
我设法通过使用 kafka 的默认端口 9092 来运行它,但问题是我的组织已经在端口 9092 上运行了一些其他服务。所以我在我的 docker-compose 中使用了 9095 作为主机,并在容器内使用了 9092。
当我尝试在 kafka 中使用 filebeat 和 logstash 时,数据没有进入 logstash。我可以看到 logstash 订阅了我创建的主题,但即使我从控制台生产者发送消息,它也没有获取任何数据。但是当我使用控制台生产者和控制台消费者时,它工作正常。但它不适用于在容器外运行的 logstash 和 filebeat。
这是我用于 kafka 的 docker-compose 文件:
version: "3"
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: zookeeper
ports:
- 2181:2181
kafka:
image: wurstmeister/kafka
container_name: kafka
ports:
- 9095:9092
environment:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9095
KAFKA_ADVERTISED_LISTENERS: INSIDE://172.18.0.3:9092,OUTSIDE://192.168.135.57:9095
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
这里 192.168.135.57 是我的主机地址(我机器的公共 IP),172.18.0.3 是运行 kafka 的 docker 容器的地址。 这是我的 logstash 配置文件:
input {
kafka
{
bootstrap_servers => "192.168.135.57:9095"
topics => "topicname"
}
}
output {
stdout{codec => rubydebug}
elasticsearch {
hosts => "http://localhost:9200"
index => "topic-test"
}
}
这是我在filebeat中用来向kafka发送数据的:
output.kafka:
hosts: ["192.168.135.57:9095"]
topic: "topicname"
我无法弄清楚这条管道有什么问题。我想在主机上的端口 9095(或除 9092 之外的任何其他端口)上运行此 docker-compose。帮助将不胜感激。
【问题讨论】:
-
你的kafka容器端口不应该是
9095:9095吗?使用9095:9092,您需要使用192.168.135.57:9092连接到kafka,因为内部端口9095映射到外部端口9092 -
@leandrojmp 我尝试将 9095:9092 更改为 9095:9095 但仍然无法正常工作。
标签: docker apache-kafka docker-compose logstash