使用 Node js 上的这段代码,我创建了简单的测试数据来生成消息:
const kafka = require('kafka-node');
// Create a Kafka client with the Kafka broker's hostname (kafka) and port (9092)
const client = new kafka.KafkaClient({ kafkaHost: '0.0.0.0:9092', connectTimeout: 5000 }); // 5000 milliseconds = 5 seconds
// Create a Kafka producer using the client
const producer = new kafka.Producer(client);
// Handle producer ready event
producer.on('ready', () => {
console.log('Kafka producer is ready');
});
// Handle producer error event
producer.on('error', (err) => {
console.error('Error with Kafka producer:', err);
});
// Example usage: send a message to a Kafka topic
const payload = {
topic: 'test-topic',
messages: 'Hello Kafka!'
};
// Send the message
producer.send([payload], (err, data) => {
if (err) {
console.error('Error sending message:', err);
} else {
console.log('Message sent:', data);
}
});
// 当我 docker ps 时
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS Names
4fabb4858464 wurstmeister/kafka "start-kafka.sh" 2 months ago Up 13 hours 0.0.0.0:9092->9092/tcp, :::9092->9092/tcp laradock_kafka_1
a648aff4197b laradock_zookeeper "/docker-entrypoint.…" 2 months ago Up 13 hours 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, :::2181->2181/tcp, 8080/tcp laradock_zookeeper_1
运行代码时会返回错误和日志
Kafka producer is ready
Error sending message: TimeoutError: Request timed out after 30000ms
at new TimeoutError (/home/rns/Documents/project-js/new-kafka-task/node_modules/kafka-node/lib/errors/TimeoutError.js:6:9)
at Timeout._onTimeout (/home/rns/Documents/project-js/new-kafka-task/node_modules/kafka-node/lib/kafkaClient.js:1012:16)
at listOnTimeout (internal/timers.js:554:17)
at processTimers (internal/timers.js:497:7)
任何人都可以帮助我的问题吗?
我没有用 wurstmeister/kafka 进行测试。但是您的 node.js 代码可以使用这个 docker-compose 文件。您只需将端口更改为29092
const client = new kafka.KafkaClient({ kafkaHost: '0.0.0.0:29092', connectTimeout: 5000 });
docker-compose.yml
version: "3.9"
services:
zookeeper:
image: confluentinc/cp-zookeeper:7.3.3
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
kafka:
image: confluentinc/cp-kafka:7.3.3
depends_on:
- zookeeper
ports:
- "29092:29092"
environment:
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://127.0.0.1:29092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT