У меня 1 зоопарк, 1 ансамбль Кафки.Я использую пакет kafka-node
npm для подключения к брокеру Kafka, создания и потребления сообщений.Ниже приведен упрощенный релевантный фрагмент, который я использую для работы.
const kafka = require('kafka-node');
const client = new kafka.KafkaClient({kafkaHost: '0.0.0.0:9092',connectTimeout:10000});
let Producer = kafka.Producer;
let producer = new Producer(client);
setTimeout(() => {
producer.on('ready', function () {
console.log("Producer is ready");
});
producer.on('error', function (err) {
console.error("Producer is not ready");
})
}, 5000);
Приведенный выше код не выводит значения и программа прекращает работу.Сценарий не заканчивается.Я изменил значение миллисекунды функции setTimeout
на 0
, и программа выдала Producer is ready
, что показалось мне очень странным.Поэтому я менял это значение несколько раз, и в результате при получении значения функции 7
получается желаемый результат, а при присвоении ему значения 8
происходит остановка программы.Я не понимаю, почему.
Ниже приведены настройки моего zookeeper и Kafka:
version: '3.3'
services:
zookeeper:
image: 'confluentinc/cp-zookeeper:5.0.0'
hostname: zookeeper
ports:
- '2191:2181'
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
kafka-broker:
image: 'confluentinc/cp-kafka:5.0.0'
ports:
- '9092:9092'
- '9083:9093'
depends_on:
- 'zookeeper'
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092,PLAINTEXT2://kafka-broker:9093
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT, PLAINTEXT2:PLAINTEXT
KAFKA_TOPICS: "test_topic"
Я попытался повторить проблему на другом компьютере.На этой машине 12
- это значение, при котором программа «отказывает».Функция producer.send
должна вызываться, как только производитель готов, что другими словами будет означать вызов функции send
внутри функции обратного вызова состояния ready
.Я понял, что состояние ready
сохраняется только в течение нескольких мс.Я уверен, что есть некоторая информация, с которой я не знаком, которая важна в этом случае, но я прочитал документацию пакета kafka-node
и не нашел ничего уместного.