logstash 도커 컨테이너에서 kafka 도커 컨테이너에 연결하려고하는데 항상 다음 메시지가 표시됩니다.
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
자체 컨테이너에서 이를 해결하려고 시도 하므로 오류가 발생합니다.
나는 이것에 대해 여기 에 자세히 썼지 만 본질적으로 이것이 필요합니다.
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
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다