gpt4 book ai didi

docker - 无法从 logstash docker 容器连接到 kafka docker 容器

转载 作者:行者123 更新时间:2023-12-02 18:10:26 26 4
gpt4 key购买 nike

我正在尝试从 logstash docker 容器连接到 kafka docker 容器,但我总是收到以下消息:

 Connection to node 0 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.

我的docker-compose.yml文件是

version: '3.2'

services:
elasticsearch:
build:
context: elasticsearch/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- type: bind
source: ./elasticsearch/config/elasticsearch.yml
target: /usr/share/elasticsearch/config/elasticsearch.yml
read_only: true
- type: volume
source: elasticsearch
target: /usr/share/elasticsearch/data
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
ELASTIC_PASSWORD: changeme
networks:
- elk
depends_on:
- kafka

logstash:
build:
context: logstash/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- type: bind
source: ./logstash/config/logstash.yml
target: /usr/share/logstash/config/logstash.yml
read_only: true
- type: bind
source: ./logstash/pipeline
target: /usr/share/logstash/pipeline
read_only: true
ports:
- "5000:5000"
- "9600:9600"
links:
- kafka
environment:
LS_JAVA_OPTS: "-Xmx256m -Xms256m"
networks:
- elk
depends_on:
- elasticsearch

kibana:
build:
context: kibana/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- type: bind
source: ./kibana/config/kibana.yml
target: /usr/share/kibana/config/kibana.yml
read_only: true
ports:
- "5601:5601"
networks:
- elk
depends_on:
- elasticsearch

zookeeper:
image: strimzi/kafka:0.11.3-kafka-2.1.0
container_name: zookeeper
command: [
"sh", "-c",
"bin/zookeeper-server-start.sh config/zookeeper.properties"
]
ports:
- "2181:2181"
networks:
- elk
environment:
LOG_DIR: /tmp/logs

kafka:
image: strimzi/kafka:0.11.3-kafka-2.1.0
command: [
"sh", "-c",
"bin/kafka-server-start.sh config/server.properties --override listeners=$${KAFKA_LISTENERS} --override advertised.listeners=$${KAFKA_ADVERTISED_LISTENERS} --override zookeeper.connect=$${KAFKA_ZOOKEEPER_CONNECT}"
]
depends_on:
- zookeeper
ports:
- "9092:9092"
networks:
- elk
environment:
LOG_DIR: "/tmp/logs"
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181

networks:
elk:
driver: bridge

volumes:
elasticsearch:

我的 logstash.conf 文件是

input {
kafka{
bootstrap_servers => "kafka:9092"
topics => ["logs"]
}
}

## Add your filters / logstash plugins configuration here

output {
elasticsearch {
hosts => "elasticsearch:9200"
user => "elastic"
password => "changeme"
}
}

我所有的容器都正常运行,我可以向容器外的 Kafka 主题发送消息。

最佳答案

您需要根据可以从客户端解析的主机名来定义您的监听器。如果监听器是 localhost,则客户端 (logstash) 将尝试从其自己的容器中将其解析为 localhost,因此会出现错误。

我已经详细写过这个 here但本质上你需要这个:

KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092, PLAINTEXT://kafka:29092
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092, PLAINTEXT://kafka:29092

然后 Docker 网络上的任何容器都使用 kafka:29092 访问它,因此 logstash 配置变为

bootstrap_servers => "kafka:29092"

主机本身上的任何客户端继续使用 localhost:9092

您可以在此处查看 Docker Compose 的实际效果:https://github.com/confluentinc/demo-scene/blob/master/build-a-streaming-pipeline/docker-compose.yml#L40

关于docker - 无法从 logstash docker 容器连接到 kafka docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58345987/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com