Logstash 未使用 9092 以外的端口从 docker(compose) 中的 kafka 运行 接收数据

Logstash not receiving data from kafka running inside docker(compose) using port other than 9092

我想将 kafka 与 elk stack 一起使用,其中 filebeat 从文件中读取日志并将数据发送到 kafka,然后再将其发送到 logstash。我正在 运行ning kafka 使用 docker-compose 文件。

我设法 运行 通过使用 kafka 的默认端口 9092,但问题是我的组织已经 运行 在端口 9092 上设置了一些其他服务。所以我在中使用了 9095我的 docker-compose 主机和容器内的 9092。

当我尝试将 filebeat 和 logstash 与 kafka 一起使用时,数据没有到达 logstash。我可以看到 logstash 订阅了我创建的主题,但即使我从控制台生产者发送消息,它也没有获取任何数据。但是当我使用 console-producer 和 console-consumer 时,它工作正常。但它不适用于 运行 容器外的 logstash 和 filebeat。

这是我的 docker-kafka 撰写文件:

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 是我的主机地址(public 我机器的 IP),172.18.0.3 是 docker 容器 运行ning kafka 的地址。 这是我的 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"

我不知道这条管道有什么问题。我想 运行 这个 docker-compose 在主机上的端口 9095(或除 9092 以外的任何其他端口)上。帮助将不胜感激。

您仍在将主机上的 9095 映射到通告的 INSIDE 侦听器

您应该使用 9095:9095 映射到 OUTSIDE 侦听器,如果这是其他客户端将连接的