Так где же установка. 2 составных файла, скоро будет 4. Все не может жить в одном и том же составном файле, потому что он распределен между проектами. Итак, что поражает меня, так это то, что, если я добавлю базовый ngnix-сервер в свой докер-компоновщик kafka, я смогу просто подключить к нему мое приложение-узел ... Но я не могу подключиться к kafka ... Если я запускаю приложение узла вне докера, я могу нормально подключиться к kafka ... Не знаю, почему я не могу подключиться к kafka.
# Micro Services that connect to kafka
version: '3.5'
services:
grouping:
build:
dockerfile: grouping.docker
context: .
container_name: grouping
ports:
- "8080:8080"
networks:
- kafka-network
- notifications-network
sending:
build:
dockerfile: sending.docker
context: .
container_name: sending
ports:
- "8081:8081"
networks:
- kafka-network
- notifications-network
depends_on:
- grouping
networks:
kafka-network:
external: true
notifications-network:
driver: bridge
name: notifications-network
# Kafka
version: '3.5'
services:
zookeeper:
image: "confluentinc/cp-zookeeper"
container_name: zookeeper
ports:
- "2181:2181"
networks:
- kafka-network
- notifications-network
environment:
ZOOKEEPER_CLIENT_PORT: 2181
kafka:
image: "confluentinc/cp-kafka"
container_name: kafka
ports:
- "9092:9092"
networks:
- kafka-network
- notifications-network
depends_on:
- zookeeper
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
web:
image: nginx
command: [nginx-debug, '-g', 'daemon off;']
container_name: web
ports:
- "1337:80"
networks:
- kafka-network
networks:
kafka-network:
driver: bridge
name: kafka-network
notifications-network:
external: true
Используя kafka-node
с config
и я подключаюсь вот так
const kafkaConfig = config.get('kafka');
const kafkaClient = new kafka.KafkaClient({kafkaHost: kafkaConfig.host});
const consumer = bluebird.promisifyAll(new kafka.Consumer(kafkaClient, [{topic: kafkaConfig.topic}], {autoCommit: false}), {multiArgs: true});
Я пробовал:
kafkaConfig.host = 'kafka:9092'
kafkaConfig.host = 'http://kafka:9092'
kafkaConfig.host = 'kafka'
kafkaConfig.host = 'http://kafka'
Что мне не хватает? Это должно быть что-то простое, верно?
Сеть Docker ls показывает:
NETWORK ID NAME DRIVER SCOPE
ee3aceffe54b bridge bridge local
b05926fff0ed host host local
18c96f1f6d2d kafka-network bridge local
391880718a8b none null local
19e81dea1d65 notifications-network bridge local
Используя запрос, я могу подключиться к группированию, отправке и веб-службам из службы группировки или отправки.
const request = require('request');
request.get('http://sending:8081', (err, res) => logger.info('Got from sending:', err, res && res.body));
request.get('http://grouping:8080', (err, res) => logger.info('Got from grouping:', err, res && res.body));
request.get('http://web', (err, res) => logger.info('Got from kafka web:', err, res && res.body));
// Returns a peer reset connection error, which is different from the not found error.
request.get('http://kafka:9092', (err, res) => logger.info('Got from kafka web:', err, res && res.body));
Просто обновление:
Таким образом, веб-сервис находится в сети kafka, другие мои сервисы могут подключиться к нему, и они могут даже попытаться отправить соединение на kafka, но kafka не имеет веб-сервиса и сбрасывает одноранговый узел. Так что они могут разговаривать с Кафкой, но Кафка не работает так, как предполагалось. Я также получаю сообщение об ошибке Broker not available
, когда мой клиент kafka пытается установить соединение внутри контейнера Docker.