UNPKG

kafka-pub-sub

Version:

Enterprise-grade Kafka publish/subscribe library for Node.js — producer pool, batch sending, DLQ, SSL/SASL, multi-broker, and real-world industry examples.

60 lines (50 loc) 1.73 kB
const fs = require('fs'); const { Kafka, logLevel } = require('kafkajs'); const config = require('./config'); const WinstonLogCreator = require('./winstonKafkaLogger'); const LOG_LEVEL_MAP = { error: logLevel.ERROR, warn: logLevel.WARN, info: logLevel.INFO, debug: logLevel.DEBUG, }; /** * Build optional SSL config from env paths. * Returns false when SSL is disabled, or an object with cert/key/ca if enabled. */ const buildSslConfig = () => { if (!config.kafka_ssl_enabled) return false; const ssl = { rejectUnauthorized: config.kafka_ssl_reject_unauthorized }; if (config.kafka_ssl_ca_path) ssl.ca = [fs.readFileSync(config.kafka_ssl_ca_path, 'utf-8')]; if (config.kafka_ssl_key_path) ssl.key = fs.readFileSync(config.kafka_ssl_key_path, 'utf-8'); if (config.kafka_ssl_cert_path) ssl.cert = fs.readFileSync(config.kafka_ssl_cert_path, 'utf-8'); return ssl; }; /** * Build optional SASL config. * Returns undefined when SASL is not configured. */ const buildSaslConfig = () => { if (!config.kafka_sasl_mechanism) return undefined; return { mechanism: config.kafka_sasl_mechanism, username: config.kafka_sasl_username, password: config.kafka_sasl_password, }; }; const kafka = new Kafka({ clientId: config.kafka_client_id, brokers: config.kafka_broker_urls, // supports multiple brokers ssl: buildSslConfig(), sasl: buildSaslConfig(), logLevel: LOG_LEVEL_MAP[config.kafka_log_level] || logLevel.ERROR, logCreator: WinstonLogCreator, retry: { initialRetryTime: config.kafka_retry_initial_time, retries: config.kafka_retry_count, factor: 2, // exponential back-off multiplier multiplier: 1.5, maxRetryTime: 30000, }, }); module.exports = kafka;