import fs from 'node:fs'; import path from 'node:path'; import kafka from 'kafka-node'; import { fileURLToPath } from 'node:url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); console.log('--- 环境检查脚本开始 ---'); console.log('当前时间:', new Date().toISOString()); console.log('当前目录 (cwd):', process.cwd()); console.log('脚本目录:', __dirname); // 1. 检查 .env 文件 const pathsToCheck = [ path.resolve(process.cwd(), '.env'), path.resolve(__dirname, '../.env'), path.resolve(__dirname, '../../.env') ]; let envPath = null; for (const p of pathsToCheck) { if (fs.existsSync(p)) { envPath = p; break; } } let envConfig = {}; if (envPath) { console.log('✅ 找到 .env 文件:', envPath); try { const content = fs.readFileSync(envPath, 'utf8'); const lines = content.split(/\r?\n/); lines.forEach(line => { const trimmed = line.trim(); if (!trimmed || trimmed.startsWith('#')) return; const idx = trimmed.indexOf('='); if (idx <= 0) return; const key = trimmed.slice(0, idx).trim(); let val = trimmed.slice(idx + 1).trim(); if ((val.startsWith('"') && val.endsWith('"')) || (val.startsWith("'") && val.endsWith("'"))) { val = val.slice(1, -1); } envConfig[key] = val; }); console.log('已加载环境变量:', Object.keys(envConfig).filter(k => k.startsWith('KAFKA') || k.startsWith('PG') || k.startsWith('REDIS'))); } catch (e) { console.error('❌ 读取 .env 失败:', e.message); } } else { console.warn('⚠️ .env 文件不存在! 将使用系统环境变量或默认值'); } // 2. 确定 Kafka 配置 const brokers = envConfig.KAFKA_BROKERS || process.env.KAFKA_BROKERS || 'localhost:9092'; const topic = envConfig.KAFKA_TOPIC || process.env.KAFKA_TOPIC || 'blwlog4Nodejs-rcu-heartbeat-topic'; console.log('\n--- Kafka 连接配置 ---'); console.log('Brokers:', brokers); console.log('Topic:', topic); // 3. 测试连接 console.log('\n--- 开始连接测试 ---'); try { const client = new kafka.KafkaClient({ kafkaHost: brokers, connectTimeout: 5000, requestTimeout: 5000 }); client.on('ready', () => { console.log('✅ Kafka Client 连接成功 (Ready)'); console.log('正在加载 Topic Metadata...'); client.loadMetadataForTopics([topic], (err, results) => { if (err) { console.error('❌ 获取 Metadata 失败:', err); client.close(); process.exit(1); } console.log('✅ Metadata 获取成功'); // console.log(JSON.stringify(results, null, 2)); const metadata = results[1].metadata; if (metadata[topic]) { console.log(`✅ Topic [${topic}] 存在,分区信息:`); const partitions = metadata[topic]; Object.keys(partitions).forEach(p => { console.log(` - Partition ${p}: Leader ${partitions[p].leader}, Replicas ${partitions[p].replicas}`); }); } else { console.warn(`⚠️ Topic [${topic}] 在 Metadata 中未找到 (可能自动创建中)`); } client.close(() => { console.log('\n测试完成: 网络连接正常'); process.exit(0); }); }); }); client.on('error', (err) => { console.error('❌ Kafka 连接错误:', err); // 不立即退出,等待超时或其他错误 }); // 10秒超时兜底 setTimeout(() => { console.error('❌ 测试超时 (10秒) - 可能是防火墙或网络不通'); process.exit(1); }, 10000); } catch (e) { console.error('❌ 初始化 Kafka Client 异常:', e); }