From aef7658dc53a213dda273a20109ec4c33de5bec0 Mon Sep 17 00:00:00 2001 From: Anas Khan Date: Wed, 23 Feb 2022 03:51:16 +0530 Subject: [PATCH 01/14] apparent fix --- src/consumer.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/consumer.js b/src/consumer.js index 29dac79..ceed8f8 100644 --- a/src/consumer.js +++ b/src/consumer.js @@ -142,7 +142,6 @@ class KafkaConsumer extends Client { listen(actionOnData) { try { this.consumer.on('data', this._wrapListenCallbackWrapper(actionOnData)); - this.consumer.consume(); } catch (err) { this.error('Consumer encountered error while starting to listen to messages.', err); } From b773d65f39e7005eb1eb4bf0b117a6bd6c210b47 Mon Sep 17 00:00:00 2001 From: Anas Khan Date: Wed, 23 Feb 2022 04:00:28 +0530 Subject: [PATCH 02/14] revert 'apparent fix' --- src/consumer.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/consumer.js b/src/consumer.js index ceed8f8..29dac79 100644 --- a/src/consumer.js +++ b/src/consumer.js @@ -142,6 +142,7 @@ class KafkaConsumer extends Client { listen(actionOnData) { try { this.consumer.on('data', this._wrapListenCallbackWrapper(actionOnData)); + this.consumer.consume(); } catch (err) { this.error('Consumer encountered error while starting to listen to messages.', err); } From 774cdacced8229c10d9eb97a1fd61e63d06777f8 Mon Sep 17 00:00:00 2001 From: Anas Khan Date: Thu, 10 Mar 2022 11:31:44 +0530 Subject: [PATCH 03/14] wrapping kafka consumer + producer as a module offering a singleton instance --- src/consumer.js | 11 ++++++++++- src/producer.js | 11 ++++++++++- types/index.d.ts | 6 +++++- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/consumer.js b/src/consumer.js index 29dac79..eadeb10 100644 --- a/src/consumer.js +++ b/src/consumer.js @@ -1,6 +1,8 @@ const Kafka = require('node-rdkafka'); const Client = require('./client'); +let _kafkaConsumer = null; + class KafkaConsumer extends Client { /** @@ -190,4 +192,11 @@ class KafkaConsumer extends Client { } } -module.exports = KafkaConsumer; \ No newline at end of file +function getKafkaConsumer(clientId, groupId, config, topicConfig, emitter) { + if (!_kafkaConsumer) { + _kafkaConsumer = new KafkaConsumer(clientId, groupId, config, topicConfig, emitter); + } + return _kafkaConsumer; +} + +module.exports = getKafkaConsumer; \ No newline at end of file diff --git a/src/producer.js b/src/producer.js index d9bdb0b..c206c2f 100644 --- a/src/producer.js +++ b/src/producer.js @@ -1,6 +1,8 @@ const Kafka = require('node-rdkafka'); const Client = require('./client'); +let _kafkaProducer = null; + class KafkaProducer extends Client { /** @@ -121,4 +123,11 @@ class KafkaProducer extends Client { } } -module.exports = KafkaProducer; \ No newline at end of file +function getKafkaProducer(clientId, config, topicConfig, emitter) { + if (!_kafkaProducer) { + _kafkaProducer = new KafkaProducer(clientId, config, topicConfig, emitter); + } + return _kafkaProducer; +} + +module.exports = getKafkaProducer; \ No newline at end of file diff --git a/types/index.d.ts b/types/index.d.ts index ce05dc5..a12de68 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -46,4 +46,8 @@ export class KafkaAdmin { createPartitions(topic: string, totalPartitions: number, actionPostPartitionCreation?: ErrorHandlingFunction): void; createPartitions(topic: string, totalPartitions: number, timeout?: number, actionPostPartitionCreation?: ErrorHandlingFunction): void; disconnect(): void; -} \ No newline at end of file +} + +export function getKafkaConsumer(clientId: string, groupId: string, config: ConsumerGlobalConfig, topicConfig: ConsumerTopicConfig, emitter: any): KafkaConsumer; + +export function getKafkaProducer(clientId: string, config: ProducerGlobalConfig, topicConfig: ProducerTopicConfig, emitter: any): KafkaProducer; From 0d6b47a9aabea318a75f576b19ea35e3e72d50dd Mon Sep 17 00:00:00 2001 From: Anas Khan Date: Thu, 10 Mar 2022 12:46:01 +0530 Subject: [PATCH 04/14] converting to ts --- lib/admin.d.ts | 35 ++++++ lib/admin.js | 79 ++++++++++++ lib/client.d.ts | 16 +++ lib/client.js | 53 ++++++++ lib/consumer.d.ts | 73 +++++++++++ lib/consumer.js | 203 +++++++++++++++++++++++++++++++ lib/producer.d.ts | 57 +++++++++ lib/producer.js | 137 +++++++++++++++++++++ package.json | 5 + src/{admin.js => admin.ts} | 14 ++- src/{client.js => client.ts} | 24 ++-- src/{consumer.js => consumer.ts} | 30 +++-- src/{producer.js => producer.ts} | 30 +++-- tsconfig.json | 13 ++ types/index.d.ts | 53 -------- types/tsconfig.json | 19 --- 16 files changed, 731 insertions(+), 110 deletions(-) create mode 100644 lib/admin.d.ts create mode 100644 lib/admin.js create mode 100644 lib/client.d.ts create mode 100644 lib/client.js create mode 100644 lib/consumer.d.ts create mode 100644 lib/consumer.js create mode 100644 lib/producer.d.ts create mode 100644 lib/producer.js rename src/{admin.js => admin.ts} (86%) rename src/{client.js => client.ts} (60%) rename src/{consumer.js => consumer.ts} (86%) rename src/{producer.js => producer.ts} (81%) create mode 100644 tsconfig.json delete mode 100644 types/index.d.ts delete mode 100644 types/tsconfig.json diff --git a/lib/admin.d.ts b/lib/admin.d.ts new file mode 100644 index 0000000..07bfec6 --- /dev/null +++ b/lib/admin.d.ts @@ -0,0 +1,35 @@ +/// +import Client from './client'; +import { GlobalConfig } from 'node-rdkafka'; +import EventEmitter from 'events'; +declare class KafkaAdmin extends Client { + private config; + private adminClient; + /** + * Initialzes a KafkaAdmin client with config. + * Requires using connect() function after initalizing. + * @param {string} clientId - id of client performing request + * @param {object} config - global kafka config + * @param {object} emitter - emitter to emit log event + */ + constructor(clientId: string, config: GlobalConfig, emitter: EventEmitter); + /** + * Connect to kafka server as admin. + */ + connect(): Promise; + createTopic(topic: any, timeout: any, actionPostTopicCreation: any): void; + deleteTopic(topic: any, timeout: any, actionPostTopicDeletion: any): void; + /** + * Create new partitions for a topic. + * @param {string} `topic + * @param {number} totalPartitions: The total number of partitions topic should have after request. + * @param {number} timeout + * @param {function} actionPostPartitionCreation + */ + createPartitions(topic: any, totalPartitions: any, timeout: any, actionPostPartitionCreation: any): void; + /** + * Synchronous method. + */ + disconnect(): void; +} +export default KafkaAdmin; diff --git a/lib/admin.js b/lib/admin.js new file mode 100644 index 0000000..a0987ff --- /dev/null +++ b/lib/admin.js @@ -0,0 +1,79 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const client_1 = __importDefault(require("./client")); +const node_rdkafka_1 = require("node-rdkafka"); +class KafkaAdmin extends client_1.default { + config; + adminClient; + /** + * Initialzes a KafkaAdmin client with config. + * Requires using connect() function after initalizing. + * @param {string} clientId - id of client performing request + * @param {object} config - global kafka config + * @param {object} emitter - emitter to emit log event + */ + constructor(clientId, config, emitter) { + super(clientId, 'admin', config, {}, emitter); + this.config = config; + this.adminClient = null; + } + /** + * Connect to kafka server as admin. + */ + async connect() { + try { + if (this.adminClient === null) { + this.adminClient = await node_rdkafka_1.AdminClient.create(this.config); + } + this.success('Successfully connected to kafka as admin'); + } + catch (err) { + this.error('Encountered error while connecting to kafka as admin', err); + } + } + createTopic(topic, timeout, actionPostTopicCreation) { + try { + this.adminClient.createTopic(topic, timeout, actionPostTopicCreation); + this.success('Successfully created new topic.', topic.topic); + } + catch (err) { + this.error(`Encountered error while creating topic=${topic}:`, err); + } + } + deleteTopic(topic, timeout, actionPostTopicDeletion) { + try { + this.adminClient.deleteTopic(topic, timeout, actionPostTopicDeletion); + this.success('Successfully deleted a topic.', topic); + } + catch (err) { + this.error(`Encountered error while deleting topic=${topic}.`, err); + } + } + /** + * Create new partitions for a topic. + * @param {string} `topic + * @param {number} totalPartitions: The total number of partitions topic should have after request. + * @param {number} timeout + * @param {function} actionPostPartitionCreation + */ + createPartitions(topic, totalPartitions, timeout, actionPostPartitionCreation) { + try { + this.adminClient.createPartitions(topic, totalPartitions, timeout, actionPostPartitionCreation); + this.success(`Successfully created new topic partitons: topic=${topic}, totalParitions=${totalPartitions}`); + } + catch (err) { + this.error(`Encountered error while creating new partitions for topic: topic=${topic}, totalPartitons=${totalPartitions}`, err); + } + } + /** + * Synchronous method. + */ + disconnect() { + this.adminClient.disconnect(); + } +} +exports.default = KafkaAdmin; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWRtaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxzREFBOEI7QUFDOUIsK0NBQXlEO0FBR3pELE1BQU0sVUFBVyxTQUFRLGdCQUFNO0lBVVc7SUFUOUIsV0FBVyxDQUFDO0lBRXBCOzs7Ozs7T0FNRztJQUNILFlBQVksUUFBZ0IsRUFBVSxNQUFvQixFQUFFLE9BQXFCO1FBQzdFLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFEWixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBRXRELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxPQUFPO1FBQ1QsSUFBSTtZQUNBLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSwwQkFBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDNUQ7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7U0FDNUQ7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsc0RBQXNELEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDM0U7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsdUJBQXVCO1FBQy9DLElBQUk7WUFDQSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDaEU7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsMENBQTBDLEtBQUssR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZFO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLHVCQUF1QjtRQUMvQyxJQUFJO1lBQ0EsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxPQUFPLENBQUMsK0JBQStCLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDeEQ7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsMENBQTBDLEtBQUssR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZFO0lBRUwsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGdCQUFnQixDQUFDLEtBQUssRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLDJCQUEyQjtRQUN6RSxJQUFJO1lBQ0EsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO1lBQ2hHLElBQUksQ0FBQyxPQUFPLENBQUMsbURBQW1ELEtBQUssb0JBQW9CLGVBQWUsRUFBRSxDQUFDLENBQUM7U0FDL0c7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxLQUFLLENBQ04sb0VBQW9FLEtBQUssb0JBQW9CLGVBQWUsRUFBRSxFQUM5RyxHQUFHLENBQ04sQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVTtRQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbEMsQ0FBQztDQUNKO0FBRUQsa0JBQWUsVUFBVSxDQUFDIn0= \ No newline at end of file diff --git a/lib/client.d.ts b/lib/client.d.ts new file mode 100644 index 0000000..b2af417 --- /dev/null +++ b/lib/client.d.ts @@ -0,0 +1,16 @@ +/// +import EventEmitter from "events"; +import { GlobalConfig, LibrdKafkaError, TopicConfig } from "node-rdkafka"; +export default class Client { + private clientId; + private clientType; + private _config; + private _topicConfig; + private emitter; + constructor(clientId: string, clientType: string, _config: GlobalConfig, _topicConfig: TopicConfig, emitter: EventEmitter); + _logMessage(msgType: 'log' | 'success' | 'error', message: string, data: any): void; + log(message: string, data?: any): void; + success(message: string, data?: any): void; + error(err: string, data?: any): void; +} +export declare type ErrorHandlingFunction = (err: LibrdKafkaError) => void; diff --git a/lib/client.js b/lib/client.js new file mode 100644 index 0000000..a26a32e --- /dev/null +++ b/lib/client.js @@ -0,0 +1,53 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +class Client { + clientId; + clientType; + _config; + _topicConfig; + emitter; + constructor(clientId, clientType, _config, _topicConfig, emitter) { + this.clientId = clientId; + this.clientType = clientType; + this._config = _config; + this._topicConfig = _topicConfig; + this.emitter = emitter; + this.clientId = clientId; + this.clientType = clientType; + // common config defaults should go here. + this._config = Object.assign({ + 'metadata.broker.list': 'localhost:9092', + 'socket.keepalive.enable': true, + }, _config, { 'client.id': clientId }); + // commong topic configs defaults should go here. + this._topicConfig = _topicConfig; + this.emitter = emitter; + } + _logMessage(msgType, message, data) { + if (this.emitter != null) { + this.emitter.emit(msgType, { + clientId: this.clientId, + clientType: this.clientType, + message, + data, + }); + } + else if (msgType === 'error') { + console.error(this.clientId, this.clientType, message, typeof data !== 'undefined' ? data : ''); + } + else { + console.log(this.clientId, this.clientType, message, typeof data !== 'undefined' ? data : ''); + } + } + log(message, data) { + this._logMessage('log', message, data); + } + success(message, data) { + this._logMessage('success', message, data); + } + error(err, data) { + this._logMessage('error', err, data); + } +} +exports.default = Client; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLE1BQXFCLE1BQU07SUFDSDtJQUNSO0lBQTRCO0lBQStCO0lBQW1DO0lBRDFHLFlBQW9CLFFBQWdCLEVBQ3hCLFVBQWtCLEVBQVUsT0FBcUIsRUFBVSxZQUF5QixFQUFVLE9BQXFCO1FBRDNHLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQWM7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQWM7UUFDM0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFFN0IseUNBQXlDO1FBQ3pDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUN6QixzQkFBc0IsRUFBRSxnQkFBZ0I7WUFDeEMseUJBQXlCLEVBQUUsSUFBSTtTQUNoQyxFQUNELE9BQU8sRUFDUCxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FDMUIsQ0FBQztRQUNGLGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQW9DLEVBQUUsT0FBZSxFQUFFLElBQVM7UUFDeEUsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTtZQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUMzQixPQUFPO2dCQUNQLElBQUk7YUFDUCxDQUFDLENBQUM7U0FDTjthQUFNLElBQUksT0FBTyxLQUFLLE9BQU8sRUFBRTtZQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ25HO2FBQU07WUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2pHO0lBQ0wsQ0FBQztJQUVELEdBQUcsQ0FBQyxPQUFlLEVBQUUsSUFBVTtRQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUFlLEVBQUUsSUFBVTtRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFXLEVBQUUsSUFBVTtRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztDQUNKO0FBN0NELHlCQTZDQyJ9 \ No newline at end of file diff --git a/lib/consumer.d.ts b/lib/consumer.d.ts new file mode 100644 index 0000000..29d0236 --- /dev/null +++ b/lib/consumer.d.ts @@ -0,0 +1,73 @@ +/// +import { ConsumerGlobalConfig, ConsumerTopicConfig, LibrdKafkaError, Message, SubscribeTopicList } from 'node-rdkafka'; +import { EventEmitter } from 'stream'; +import Client from './client'; +declare type ConsumeActionFunction = (err: LibrdKafkaError, messages: Message[]) => void; +declare type ListenActionFunction = (arg: Message) => void; +declare class KafkaConsumer extends Client { + private config; + private topicConfig; + private consumer; + /** + * Initializes a KafkaConsumer. + * @param {String} clientId: id to identify a client consuming the message. + * @param {String} groupId: consumer group id, the consumer belongs to. + * @param {import('node-rdkafka').ConsumerGlobalConfig} config: configs for consumer. + * @param {import('node-rdkafka').ConsumerTopicConfig} topicConfig: topic configs + * @param {EventEmitter} emitter: to emit log events + */ + constructor(clientId: string, groupId: string, config: ConsumerGlobalConfig, topicConfig: ConsumerTopicConfig, emitter: EventEmitter); + /** + * Asynchronous function which connects to kafka cluster. + * Resolves when connection is ready. + * + * @returns {Promise} + */ + connect(): Promise; + /** + * Subscribe to topics. + * @param {import('node-rdkafka').SubscribeTopicList} topics: array of topic names. + * @returns {KafkaConsumer} + */ + subscribe(topics: SubscribeTopicList): this; + /** + * Unsubscribe from all the subscribed topics.s + * @returns {KafkaConsumer} + */ + unsubscribe(): this; + /** + * Consumes message one-by-one and executes actionsOnData callback + * on the message read. + * + * NOTE: Needs to be called in infinite loop to have it consuming messages continuously. + * + * @param {Function} actionOnData: callback to return when message is read. + */ + consume(actionOnData: ConsumeActionFunction): void; + /** + * Consumes messages in a batch and executes actionsOnData callback + * on the message read. + * + * NOTE: Needs to be called in infinite loop to have it consuming messages continuously. + * + * @param {Number} msgCount: number of messages to read. + * @param {Function} actionOnData: callback to be executed for each message. + */ + consumeBatch(msgCount: number, actionOnData: ConsumeActionFunction): void; + /** + * Listens to subscribed topic in flowing mode. Triggers a thread in background which keeps polling for events. + * + * @param {Function} actionOnData + */ + listen(actionOnData: ListenActionFunction): void; + _wrapConsumeCallbackWrapper(actionOnData: any): (err: any, msgs: any) => void; + _wrapListenCallbackWrapper(actionOnData: any): (msg: any) => void; + /** + * Parses message before passing it to consumer callback. + * @param {Object} msg - expects it to be in node-rdkafka msg format. + * @returns + */ + _parseMessage(msg: any): any; +} +declare function getKafkaConsumer(clientId: string, groupId: string, config: ConsumerGlobalConfig, topicConfig: ConsumerTopicConfig, emitter: EventEmitter): KafkaConsumer; +export default getKafkaConsumer; diff --git a/lib/consumer.js b/lib/consumer.js new file mode 100644 index 0000000..441b2f1 --- /dev/null +++ b/lib/consumer.js @@ -0,0 +1,203 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const node_rdkafka_1 = __importDefault(require("node-rdkafka")); +const client_1 = __importDefault(require("./client")); +let _kafkaConsumer = null; +class KafkaConsumer extends client_1.default { + config; + topicConfig; + consumer; + /** + * Initializes a KafkaConsumer. + * @param {String} clientId: id to identify a client consuming the message. + * @param {String} groupId: consumer group id, the consumer belongs to. + * @param {import('node-rdkafka').ConsumerGlobalConfig} config: configs for consumer. + * @param {import('node-rdkafka').ConsumerTopicConfig} topicConfig: topic configs + * @param {EventEmitter} emitter: to emit log events + */ + constructor(clientId, groupId, config, topicConfig, emitter) { + // consumer specific default configs we would like to have + config = Object.assign({ + 'allow.auto.create.topics': true, + }, config, { + 'group.id': groupId, + }); + super(clientId, 'consumer', config, topicConfig, emitter); + this.config = config; + this.topicConfig = topicConfig; + this.consumer = new node_rdkafka_1.default.KafkaConsumer(this.config, this.topicConfig); + } + /** + * Asynchronous function which connects to kafka cluster. + * Resolves when connection is ready. + * + * @returns {Promise} + */ + connect() { + return new Promise((resolve, reject) => { + try { + this.consumer + .connect() + .on('ready', (info, metadata) => { + this.success('Consumer connected to kafka cluster....', { + name: info.name, + }); + resolve(this); + }) + .on('connection.failure', (err, clientMetrics) => { + this.error('Consumer encountered error while connecting to Kafka.', JSON.stringify(err)); + reject(err); + }) + .on('event.error', (err) => { + this.error('Consumer encountered error.', JSON.stringify(err)); + reject(err); + }) + .on('event.log', (eventData) => this.log('Logging consumer event: ', eventData)) + .on('disconnected', (metrics) => { + this.log('Consumer disconnected. Client metrics are: ' + metrics.connectionOpened); + }) + .on('offset.commit', (err, topicPartitions) => { + if (err) { + this.error('Encountered error while committing offset.', JSON.stringify(err)); + return; + } + this.log('Commited offset for topic-partitions: ' + JSON.stringify(topicPartitions)); + }) + .on('subscribed', (topics) => { + this.log('Subscribed to topics: ' + JSON.stringify(topics)); + }); + } + catch (err) { + this.error('Consumer encountered while connecting to kafka server.', err); + reject(err); + } + }); + } + /** + * Subscribe to topics. + * @param {import('node-rdkafka').SubscribeTopicList} topics: array of topic names. + * @returns {KafkaConsumer} + */ + subscribe(topics) { + try { + this.consumer.subscribe(topics); + } + catch (err) { + this.error(`Consumer encountered error while subscribing to topics=${topics}`, err); + } + return this; + } + /** + * Unsubscribe from all the subscribed topics.s + * @returns {KafkaConsumer} + */ + unsubscribe() { + try { + this.consumer.unsubscribe(); + } + catch (err) { + this.error('Consumer encountered error while unsubscribing', err); + } + return this; + } + /** + * Consumes message one-by-one and executes actionsOnData callback + * on the message read. + * + * NOTE: Needs to be called in infinite loop to have it consuming messages continuously. + * + * @param {Function} actionOnData: callback to return when message is read. + */ + consume(actionOnData) { + try { + // reset 'data' event listener to no-op callback. + this.consumer.removeAllListeners('data'); + this.consumer.consume(this._wrapConsumeCallbackWrapper(actionOnData)); + } + catch (err) { + this.error('Consumer encountered error while consuming messages', err); + } + } + /** + * Consumes messages in a batch and executes actionsOnData callback + * on the message read. + * + * NOTE: Needs to be called in infinite loop to have it consuming messages continuously. + * + * @param {Number} msgCount: number of messages to read. + * @param {Function} actionOnData: callback to be executed for each message. + */ + consumeBatch(msgCount, actionOnData) { + try { + // reset 'data' event listener to no-op callback. + this.consumer.removeAllListeners('data'); + this.consumer.consume(msgCount, this._wrapConsumeCallbackWrapper(actionOnData)); + } + catch (err) { + this.error(`Consumer encountered error while consuming messages in batch of size=${msgCount}`, err); + } + } + /** + * Listens to subscribed topic in flowing mode. Triggers a thread in background which keeps polling for events. + * + * @param {Function} actionOnData + */ + listen(actionOnData) { + try { + this.consumer.on('data', this._wrapListenCallbackWrapper(actionOnData)); + this.consumer.consume(); + } + catch (err) { + this.error('Consumer encountered error while starting to listen to messages.', err); + } + } + _wrapConsumeCallbackWrapper(actionOnData) { + const wrapper = (err, msgs) => { + if (err) { + actionOnData(err, msgs); + return; + } + if (!Array.isArray(msgs)) { + msgs = [msgs]; + } + msgs.forEach((msg) => { + msg = this._parseMessage(msg); + actionOnData(err, msg); + }); + }; + return wrapper; + } + _wrapListenCallbackWrapper(actionOnData) { + const wrapper = (msg) => { + try { + msg = this._parseMessage(msg); + actionOnData(msg); + } + catch (e) { + this.error(e); + } + }; + return wrapper; + } + /** + * Parses message before passing it to consumer callback. + * @param {Object} msg - expects it to be in node-rdkafka msg format. + * @returns + */ + _parseMessage(msg) { + msg.value = msg.value == null ? null : JSON.parse(msg.value.toString()); + msg.key = msg.key != null && Buffer.isBuffer(msg.key) ? msg.key.toString() : msg.key; + return msg; + } +} +function getKafkaConsumer(clientId, groupId, config, topicConfig, emitter) { + if (!_kafkaConsumer) { + _kafkaConsumer = new KafkaConsumer(clientId, groupId, config, topicConfig, emitter); + } + return _kafkaConsumer; +} +exports.default = getKafkaConsumer; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3VtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uc3VtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRUFBOEg7QUFFOUgsc0RBQThCO0FBTTlCLElBQUksY0FBYyxHQUFrQixJQUFJLENBQUM7QUFFekMsTUFBTSxhQUFjLFNBQVEsZ0JBQU07SUFXeUI7SUFBc0M7SUFWckYsUUFBUSxDQUFzQjtJQUV0Qzs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxRQUFnQixFQUFFLE9BQWUsRUFBVSxNQUE0QixFQUFVLFdBQWdDLEVBQUUsT0FBcUI7UUFDaEosMERBQTBEO1FBQzFELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ25CLDBCQUEwQixFQUFFLElBQUk7U0FDbkMsRUFDRyxNQUFNLEVBQ047WUFDSSxVQUFVLEVBQUUsT0FBTztTQUN0QixDQUFDLENBQUM7UUFDUCxLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBVFAsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBcUI7UUFVekgsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHNCQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE9BQU87UUFDSCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLElBQUk7Z0JBQ0EsSUFBSSxDQUFDLFFBQVE7cUJBQ1IsT0FBTyxFQUFFO3FCQUNULEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUU7b0JBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMseUNBQXlDLEVBQUU7d0JBQ3BELElBQUksRUFBRSxJ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 \ No newline at end of file diff --git a/lib/producer.d.ts b/lib/producer.d.ts new file mode 100644 index 0000000..64c20d5 --- /dev/null +++ b/lib/producer.d.ts @@ -0,0 +1,57 @@ +/// +import EventEmitter from 'events'; +import { ClientMetrics, LibrdKafkaError, MessageKey, NumberNullUndefined, ProducerGlobalConfig, ProducerTopicConfig } from 'node-rdkafka'; +import Client, { ErrorHandlingFunction } from './client'; +interface ProduceParameters { + topic: string; + message: any; + partition?: NumberNullUndefined; + key?: MessageKey; + timestamp?: NumberNullUndefined; +} +declare class KafkaProducer extends Client { + private config; + private topicConfig; + private producer; + /** + * Initializes a KafkaProducer. + * @param {String} clientId: id to identify a client producing the message. + * @param {import('node-rdkafka').ProducerGlobalConfig} config: configs for producer. + * @param {import('node-rdkafka').ProducerTopicConfig} topicConfig: topic configs. + * @param {EventEmitter} emitter: to emit log messages + */ + constructor(clientId: string, config: ProducerGlobalConfig, topicConfig: ProducerTopicConfig, emitter: EventEmitter); + /** + * Asynchronous function which connects to kafka cluster. + * Resolves when connection is ready. + * + * @returns {Promise} + */ + connect(): Promise; + /** + * Produce a message to a topic-partition. + * @param {String} topic: name of topic + * @param {import('node-rdkafka').NumberNullUndefined} partition: partition number to produce to. + * @param {any} message: message to be produced. + * @param {import('node-rdkafka').MessageKey} key: key associated with the message. + * @param {import('node-rdkafka').NumberNullUndefined} timestamp: timestamp to send with the message. + * @returns {import('../types').BooleanOrNumber}: returns boolean or librdkafka error code. + */ + produce({ topic, message, partition, key, timestamp }: ProduceParameters): boolean | number; + /** + * Flush everything on the internal librdkafka buffer. + * Good to perform before disconnect. + * @param {import('node-rdkafka').NumberNullUndefined}} timeout + * @param {import('../types').ErrorHandlingFunction} postFlushAction + * @returns {KafkaProducer} + */ + flush(timeout?: NumberNullUndefined, postFlushAction?: ErrorHandlingFunction): this; + /** + * Disconnects producer. + * @param {import('../types').DisconnectFunction} postDisconnectAction + * @returns {KafkaProducer} + */ + disconnect(postDisconnectAction?: (err: any, data: ClientMetrics) => any): this; +} +declare function getKafkaProducer(clientId: string, config: ProducerGlobalConfig, topicConfig: ProducerTopicConfig, emitter: EventEmitter): KafkaProducer; +export default getKafkaProducer; diff --git a/lib/producer.js b/lib/producer.js new file mode 100644 index 0000000..8b52928 --- /dev/null +++ b/lib/producer.js @@ -0,0 +1,137 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const node_rdkafka_1 = __importDefault(require("node-rdkafka")); +const client_1 = __importDefault(require("./client")); +let _kafkaProducer = null; +class KafkaProducer extends client_1.default { + config; + topicConfig; + producer; + /** + * Initializes a KafkaProducer. + * @param {String} clientId: id to identify a client producing the message. + * @param {import('node-rdkafka').ProducerGlobalConfig} config: configs for producer. + * @param {import('node-rdkafka').ProducerTopicConfig} topicConfig: topic configs. + * @param {EventEmitter} emitter: to emit log messages + */ + constructor(clientId, config, topicConfig, emitter) { + // producer config defaults should go here. + config = Object.assign({ + 'retry.backoff.ms': 200, + 'message.send.max.retries': 10, + 'queue.buffering.max.messages': 100000, + 'queue.buffering.max.ms': 1000, + 'batch.num.messages': 1000000, + 'dr_cb': true + }, config); + // producer topic config defaults should go here. + topicConfig = Object.assign({ 'acks': 1 }, topicConfig); + super(clientId, 'producer', config, topicConfig, emitter); + this.config = config; + this.topicConfig = topicConfig; + this.producer = new node_rdkafka_1.default.Producer(this.config, this.topicConfig); + } + /** + * Asynchronous function which connects to kafka cluster. + * Resolves when connection is ready. + * + * @returns {Promise} + */ + connect() { + return new Promise((resolve, reject) => { + try { + this.producer + .connect() + .on('ready', (info, metadata) => { + this.success('Producer connected to kafka cluster...', { + name: info.name, + }); + // set automating polling to every second for delivery reports + this.producer.setPollInterval(1000); + resolve(this); + }) + .on('delivery-report', (err, report) => { + if (err) { + this.error('Error producing message: ', err); + } + else { + this.log(`Produced event: key=${report.key}, timestamp=${report.timestamp}.`); + } + }) + .on('event.error', (err) => { + this.error('Producer encountered error: ', err); + reject(err); + }) + .on('event.log', (eventData) => this.log('Logging consumer event: ', eventData)) + .on('disconnected', (metrics) => { + this.log('Producer disconnected. Client metrics are: ', metrics.connectionOpened); + }); + } + catch (err) { + this.error('Producer encountered while connecting to kafka server.', err); + reject(err); + } + }); + } + /** + * Produce a message to a topic-partition. + * @param {String} topic: name of topic + * @param {import('node-rdkafka').NumberNullUndefined} partition: partition number to produce to. + * @param {any} message: message to be produced. + * @param {import('node-rdkafka').MessageKey} key: key associated with the message. + * @param {import('node-rdkafka').NumberNullUndefined} timestamp: timestamp to send with the message. + * @returns {import('../types').BooleanOrNumber}: returns boolean or librdkafka error code. + */ + produce({ topic, message, partition = null, key = null, timestamp = null }) { + try { + const stringifiedMsg = JSON.stringify(message); + const isSuccess = this.producer.produce(topic, partition, Buffer.from(stringifiedMsg), key, timestamp, null); + return isSuccess; + } + catch (err) { + this.error(`Producer encountered error while producing message to topic=${topic}, partition=${partition} with key=${key}`, err); + return false; + } + } + /** + * Flush everything on the internal librdkafka buffer. + * Good to perform before disconnect. + * @param {import('node-rdkafka').NumberNullUndefined}} timeout + * @param {import('../types').ErrorHandlingFunction} postFlushAction + * @returns {KafkaProducer} + */ + flush(timeout, postFlushAction) { + try { + this.producer.flush(timeout, postFlushAction); + } + catch (err) { + this.error('Producer encountered error while flusing events.', err); + } + return this; + } + /** + * Disconnects producer. + * @param {import('../types').DisconnectFunction} postDisconnectAction + * @returns {KafkaProducer} + */ + disconnect(postDisconnectAction) { + try { + this.producer.disconnect(postDisconnectAction); + } + catch (err) { + this.error('Producer encountered error while disconnecting.', err); + } + return this; + } +} +function getKafkaProducer(clientId, config, topicConfig, emitter) { + if (!_kafkaProducer) { + _kafkaProducer = new KafkaProducer(clientId, config, topicConfig, emitter); + } + return _kafkaProducer; +} +exports.default = getKafkaProducer; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvZHVjZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxnRUFBaUo7QUFDakosc0RBQXlEO0FBVXpELElBQUksY0FBYyxHQUFrQixJQUFJLENBQUM7QUFFekMsTUFBTSxhQUFjLFNBQVEsZ0JBQU07SUFVUTtJQUFzQztJQVRwRSxRQUFRLENBQWlCO0lBRWpDOzs7Ozs7T0FNRztJQUNILFlBQVksUUFBZ0IsRUFBVSxNQUE0QixFQUFVLFdBQWdDLEVBQUUsT0FBcUI7UUFDL0gsMkNBQTJDO1FBQzNDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ25CLGtCQUFrQixFQUFFLEdBQUc7WUFDdkIsMEJBQTBCLEVBQUUsRUFBRTtZQUM5Qiw4QkFBOEIsRUFBRSxNQUFNO1lBQ3RDLHdCQUF3QixFQUFFLElBQUk7WUFDOUIsb0JBQW9CLEVBQUUsT0FBTztZQUM3QixPQUFPLEVBQUUsSUFBSTtTQUNkLEVBQ0QsTUFBTSxDQUNQLENBQUM7UUFDRixpREFBaUQ7UUFDakQsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUcsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFekQsS0FBSyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQWZ4QixXQUFNLEdBQU4sTUFBTSxDQUFzQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtRQWdCeEcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHNCQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE9BQU87UUFDSCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxF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 \ No newline at end of file diff --git a/package.json b/package.json index 0d7ea7e..e63c2e6 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "main": "index.js", "types": "types/index.d.ts", "scripts": { + "compile-ts": "tsc", "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { @@ -19,5 +20,9 @@ "license": "ISC", "dependencies": { "node-rdkafka": "^2.12.0" + }, + "devDependencies": { + "@types/node": "^17.0.21", + "typescript": "^4.6.2" } } diff --git a/src/admin.js b/src/admin.ts similarity index 86% rename from src/admin.js rename to src/admin.ts index 4fbcec9..9472407 100644 --- a/src/admin.js +++ b/src/admin.ts @@ -1,7 +1,9 @@ -const Client = require('./client'); -const Kafka = require('node-rdkafka'); +import Client from './client'; +import { AdminClient, GlobalConfig } from 'node-rdkafka'; +import EventEmitter from 'events'; class KafkaAdmin extends Client { + private adminClient; /** * Initialzes a KafkaAdmin client with config. @@ -10,7 +12,7 @@ class KafkaAdmin extends Client { * @param {object} config - global kafka config * @param {object} emitter - emitter to emit log event */ - constructor(clientId, config, emitter) { + constructor(clientId: string, private config: GlobalConfig, emitter: EventEmitter) { super(clientId, 'admin', config, {}, emitter); this.adminClient = null; } @@ -18,10 +20,10 @@ class KafkaAdmin extends Client { /** * Connect to kafka server as admin. */ - async connect() { + async connect(): Promise { try { if (this.adminClient === null) { - this.adminClient = await Kafka.AdminClient.create(this.config); + this.adminClient = await AdminClient.create(this.config); } this.success('Successfully connected to kafka as admin'); } catch (err) { @@ -75,4 +77,4 @@ class KafkaAdmin extends Client { } } -module.exports = KafkaAdmin; \ No newline at end of file +export default KafkaAdmin; \ No newline at end of file diff --git a/src/client.js b/src/client.ts similarity index 60% rename from src/client.js rename to src/client.ts index 38edeb3..8c0b971 100644 --- a/src/client.js +++ b/src/client.ts @@ -1,22 +1,26 @@ -class Client { - constructor(clientId, clientType, config, topicConfig, emitter) { +import EventEmitter from "events"; +import { GlobalConfig, LibrdKafkaError, TopicConfig } from "node-rdkafka"; + +export default class Client { + constructor(private clientId: string, + private clientType: string, private _config: GlobalConfig, private _topicConfig: TopicConfig, private emitter: EventEmitter) { this.clientId = clientId; this.clientType = clientType; // common config defaults should go here. - this.config = Object.assign({ + this._config = Object.assign({ 'metadata.broker.list': 'localhost:9092', 'socket.keepalive.enable': true, }, - config, + _config, { 'client.id': clientId } ); // commong topic configs defaults should go here. - this.topicConfig = topicConfig; + this._topicConfig = _topicConfig; this.emitter = emitter; } - _logMessage(msgType, message, data) { + _logMessage(msgType: 'log' | 'success' | 'error', message: string, data: any) { if (this.emitter != null) { this.emitter.emit(msgType, { clientId: this.clientId, @@ -31,17 +35,17 @@ class Client { } } - log(message, data) { + log(message: string, data?: any) { this._logMessage('log', message, data); } - success(message, data) { + success(message: string, data?: any) { this._logMessage('success', message, data); } - error(err, data) { + error(err: string, data?: any) { this._logMessage('error', err, data); } } -module.exports = Client; \ No newline at end of file +export type ErrorHandlingFunction = (err: LibrdKafkaError) => void; diff --git a/src/consumer.js b/src/consumer.ts similarity index 86% rename from src/consumer.js rename to src/consumer.ts index eadeb10..01b5ef7 100644 --- a/src/consumer.js +++ b/src/consumer.ts @@ -1,9 +1,15 @@ -const Kafka = require('node-rdkafka'); -const Client = require('./client'); +import Kafka, { ConsumerGlobalConfig, ConsumerTopicConfig, LibrdKafkaError, Message, SubscribeTopicList } from 'node-rdkafka'; +import { EventEmitter } from 'stream'; +import Client from './client'; -let _kafkaConsumer = null; +type ConsumeActionFunction = (err: LibrdKafkaError, messages: Message[]) => void; + +type ListenActionFunction = (arg: Message) => void; + +let _kafkaConsumer: KafkaConsumer = null; class KafkaConsumer extends Client { + private consumer: Kafka.KafkaConsumer; /** * Initializes a KafkaConsumer. @@ -13,7 +19,7 @@ class KafkaConsumer extends Client { * @param {import('node-rdkafka').ConsumerTopicConfig} topicConfig: topic configs * @param {EventEmitter} emitter: to emit log events */ - constructor(clientId, groupId, config, topicConfig, emitter) { + constructor(clientId: string, groupId: string, private config: ConsumerGlobalConfig, private topicConfig: ConsumerTopicConfig, emitter: EventEmitter) { // consumer specific default configs we would like to have config = Object.assign({ 'allow.auto.create.topics': true, @@ -32,7 +38,7 @@ class KafkaConsumer extends Client { * * @returns {Promise} */ - connect() { + connect(): Promise { return new Promise((resolve, reject) => { try { this.consumer @@ -77,7 +83,7 @@ class KafkaConsumer extends Client { * @param {import('node-rdkafka').SubscribeTopicList} topics: array of topic names. * @returns {KafkaConsumer} */ - subscribe(topics) { + subscribe(topics: SubscribeTopicList): this { try { this.consumer.subscribe(topics); } catch (err) { @@ -90,7 +96,7 @@ class KafkaConsumer extends Client { * Unsubscribe from all the subscribed topics.s * @returns {KafkaConsumer} */ - unsubscribe() { + unsubscribe(): this { try { this.consumer.unsubscribe(); } catch (err) { @@ -107,7 +113,7 @@ class KafkaConsumer extends Client { * * @param {Function} actionOnData: callback to return when message is read. */ - consume(actionOnData) { + consume(actionOnData: ConsumeActionFunction): void { try { // reset 'data' event listener to no-op callback. this.consumer.removeAllListeners('data'); @@ -126,7 +132,7 @@ class KafkaConsumer extends Client { * @param {Number} msgCount: number of messages to read. * @param {Function} actionOnData: callback to be executed for each message. */ - consumeBatch(msgCount, actionOnData) { + consumeBatch(msgCount: number, actionOnData: ConsumeActionFunction): void { try { // reset 'data' event listener to no-op callback. this.consumer.removeAllListeners('data'); @@ -141,7 +147,7 @@ class KafkaConsumer extends Client { * * @param {Function} actionOnData */ - listen(actionOnData) { + listen(actionOnData: ListenActionFunction): void { try { this.consumer.on('data', this._wrapListenCallbackWrapper(actionOnData)); this.consumer.consume(); @@ -192,11 +198,11 @@ class KafkaConsumer extends Client { } } -function getKafkaConsumer(clientId, groupId, config, topicConfig, emitter) { +function getKafkaConsumer(clientId: string, groupId: string, config: ConsumerGlobalConfig, topicConfig: ConsumerTopicConfig, emitter: EventEmitter): KafkaConsumer { if (!_kafkaConsumer) { _kafkaConsumer = new KafkaConsumer(clientId, groupId, config, topicConfig, emitter); } return _kafkaConsumer; } -module.exports = getKafkaConsumer; \ No newline at end of file +export default getKafkaConsumer; \ No newline at end of file diff --git a/src/producer.js b/src/producer.ts similarity index 81% rename from src/producer.js rename to src/producer.ts index c206c2f..15da869 100644 --- a/src/producer.js +++ b/src/producer.ts @@ -1,9 +1,19 @@ -const Kafka = require('node-rdkafka'); -const Client = require('./client'); +import EventEmitter from 'events'; +import Kafka, { ClientMetrics, LibrdKafkaError, MessageKey, NumberNullUndefined, ProducerGlobalConfig, ProducerTopicConfig } from 'node-rdkafka'; +import Client, { ErrorHandlingFunction } from './client'; -let _kafkaProducer = null; +interface ProduceParameters{ + topic: string; + message: any; + partition?: NumberNullUndefined; + key?: MessageKey; + timestamp?: NumberNullUndefined; +} + +let _kafkaProducer: KafkaProducer = null; class KafkaProducer extends Client { + private producer: Kafka.Producer; /** * Initializes a KafkaProducer. @@ -12,7 +22,7 @@ class KafkaProducer extends Client { * @param {import('node-rdkafka').ProducerTopicConfig} topicConfig: topic configs. * @param {EventEmitter} emitter: to emit log messages */ - constructor(clientId, config, topicConfig, emitter) { + constructor(clientId: string, private config: ProducerGlobalConfig, private topicConfig: ProducerTopicConfig, emitter: EventEmitter) { // producer config defaults should go here. config = Object.assign({ 'retry.backoff.ms': 200, @@ -37,7 +47,7 @@ class KafkaProducer extends Client { * * @returns {Promise} */ - connect() { + connect(): Promise { return new Promise((resolve, reject) => { try { this.producer @@ -81,7 +91,7 @@ class KafkaProducer extends Client { * @param {import('node-rdkafka').NumberNullUndefined} timestamp: timestamp to send with the message. * @returns {import('../types').BooleanOrNumber}: returns boolean or librdkafka error code. */ - produce({ topic, message, partition = null, key = null, timestamp = null }) { + produce({ topic, message, partition = null, key = null, timestamp = null }: ProduceParameters): boolean | number { try { const stringifiedMsg = JSON.stringify(message); const isSuccess = this.producer.produce(topic, partition, Buffer.from(stringifiedMsg), key, timestamp, null); @@ -99,7 +109,7 @@ class KafkaProducer extends Client { * @param {import('../types').ErrorHandlingFunction} postFlushAction * @returns {KafkaProducer} */ - flush(timeout, postFlushAction) { + flush(timeout?: NumberNullUndefined, postFlushAction?: ErrorHandlingFunction): this { try { this.producer.flush(timeout, postFlushAction); } catch (err) { @@ -113,7 +123,7 @@ class KafkaProducer extends Client { * @param {import('../types').DisconnectFunction} postDisconnectAction * @returns {KafkaProducer} */ - disconnect(postDisconnectAction) { + disconnect(postDisconnectAction?: (err: any, data: ClientMetrics) => any): this { try { this.producer.disconnect(postDisconnectAction); } catch (err) { @@ -123,11 +133,11 @@ class KafkaProducer extends Client { } } -function getKafkaProducer(clientId, config, topicConfig, emitter) { +function getKafkaProducer(clientId: string, config: ProducerGlobalConfig, topicConfig: ProducerTopicConfig, emitter: EventEmitter): KafkaProducer { if (!_kafkaProducer) { _kafkaProducer = new KafkaProducer(clientId, config, topicConfig, emitter); } return _kafkaProducer; } -module.exports = getKafkaProducer; \ No newline at end of file +export default getKafkaProducer; \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..80a2d7b --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "esnext", + "declaration": true, + "outDir": "./lib", + "esModuleInterop": true, + "inlineSourceMap": true + }, + "include": [ + "src/**/*" + ] +} \ No newline at end of file diff --git a/types/index.d.ts b/types/index.d.ts deleted file mode 100644 index a12de68..0000000 --- a/types/index.d.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { ClientMetrics, ConsumerGlobalConfig, ConsumerTopicConfig, GlobalConfig, LibrdKafkaError, Message, MessageKey, NewTopic, NumberNullUndefined, ProducerGlobalConfig, ProducerTopicConfig, SubscribeTopicList } from "node-rdkafka"; - -export type ConsumeActionFunction = (err: LibrdKafkaError, messages: Message[]) => void; - -export type ListenActionFunction = (arg: Message) => void; - -export type ErrorHandlingFunction = (err: LibrdKafkaError) => void; - -export type DisconnectFunction = (err: any, data: ClientMetrics) => any; - -export type BooleanOrNumber = boolean | number; - -export interface ProduceParameters{ - topic: string; - message: any; - partition?: NumberNullUndefined; - key?: MessageKey; - timestamp?: NumberNullUndefined; -} - -export class KafkaConsumer { - constructor(clientId: string, groupId: string, config: ConsumerGlobalConfig, topicConfig: ConsumerTopicConfig, emitter: any); - connect(): Promise; - subscribe(topics: SubscribeTopicList): this; - unsubscribe(): this; - consume(actionOnData: ConsumeActionFunction): void; - consumeBatch(msgCount: number, actionOnData: ConsumeActionFunction): void; - listen(actionOnData: ListenActionFunction): void; -} - -export class KafkaProducer { - constructor(clientId: string, config: ProducerGlobalConfig, topicConfig: ProducerTopicConfig, emitter: any); - connect(): Promise; - produce(args: ProduceParameters): BooleanOrNumber; - flush(timeout?: NumberNullUndefined, postFlushAction?: ErrorHandlingFunction): this; - disconnect(postDisconnectAction?: DisconnectFunction): this; -} - -export class KafkaAdmin { - constructor(clientId: string, config: GlobalConfig, emitter: any); - connect(): void; - createTopic(topic: NewTopic, actionPostTopicCreation?: ErrorHandlingFunction): void; - createTopic(topic: NewTopic, timeout?: number, actionPostTopicCreation?: ErrorHandlingFunction): void; - deleteTopic(topic: string, actionPostTopicDeletion?: ErrorHandlingFunction): void; - deleteTopic(topic: string, timeout?: number, actionPostTopicDeletion?: ErrorHandlingFunction): void; - createPartitions(topic: string, totalPartitions: number, actionPostPartitionCreation?: ErrorHandlingFunction): void; - createPartitions(topic: string, totalPartitions: number, timeout?: number, actionPostPartitionCreation?: ErrorHandlingFunction): void; - disconnect(): void; -} - -export function getKafkaConsumer(clientId: string, groupId: string, config: ConsumerGlobalConfig, topicConfig: ConsumerTopicConfig, emitter: any): KafkaConsumer; - -export function getKafkaProducer(clientId: string, config: ProducerGlobalConfig, topicConfig: ProducerTopicConfig, emitter: any): KafkaProducer; diff --git a/types/tsconfig.json b/types/tsconfig.json deleted file mode 100644 index a9061b7..0000000 --- a/types/tsconfig.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "compilerOptions": { - "module": "commonjs", - "target": "esnext", - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "baseUrl": "../", - "typeRoots": ["../"], - "types": [], - "noEmit": true, - "forceConsistentCasingInFileNames": true, - "strictFunctionTypes": true, - "esModuleInterop": true - }, - "files": [ - "index.d.ts" - ] -} \ No newline at end of file From 57404b18df0ac974a75719fc5007ab45de45feac Mon Sep 17 00:00:00 2001 From: Anas Khan Date: Thu, 10 Mar 2022 12:52:54 +0530 Subject: [PATCH 05/14] index.ts creation --- lib/index.d.ts | 4 ++++ lib/index.js | 13 +++++++++++++ package.json | 3 +-- src/admin.ts | 2 +- src/consumer.ts | 2 +- src/index.ts | 9 +++++++++ src/producer.ts | 2 +- 7 files changed, 30 insertions(+), 5 deletions(-) create mode 100644 lib/index.d.ts create mode 100644 lib/index.js create mode 100644 src/index.ts diff --git a/lib/index.d.ts b/lib/index.d.ts new file mode 100644 index 0000000..d683595 --- /dev/null +++ b/lib/index.d.ts @@ -0,0 +1,4 @@ +import getKafkaProducer from './producer'; +import getKafkaConsumer from './consumer'; +import KafkaAdmin from './admin'; +export { getKafkaConsumer, getKafkaProducer, KafkaAdmin, }; diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 0000000..5b8d6aa --- /dev/null +++ b/lib/index.js @@ -0,0 +1,13 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.KafkaAdmin = exports.getKafkaProducer = exports.getKafkaConsumer = void 0; +const producer_1 = __importDefault(require("./producer")); +exports.getKafkaProducer = producer_1.default; +const consumer_1 = __importDefault(require("./consumer")); +exports.getKafkaConsumer = consumer_1.default; +const admin_1 = __importDefault(require("./admin")); +exports.KafkaAdmin = admin_1.default; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMERBQXlDO0FBTXZDLDJCQU5LLGtCQUFnQixDQU1MO0FBTGxCLDBEQUEwQztBQUl4QywyQkFKSyxrQkFBZ0IsQ0FJTDtBQUhsQixvREFBaUM7QUFLL0IscUJBTEssZUFBVSxDQUtMIn0= \ No newline at end of file diff --git a/package.json b/package.json index e63c2e6..d376635 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,7 @@ "name": "kafka-wrapper", "version": "0.1.0", "description": "A simple kafka client to produce and consume messages to/from kafka cluster.", - "main": "index.js", - "types": "types/index.d.ts", + "main": "lib/index.js", "scripts": { "compile-ts": "tsc", "test": "echo \"Error: no test specified\" && exit 1" diff --git a/src/admin.ts b/src/admin.ts index 9472407..58e3569 100644 --- a/src/admin.ts +++ b/src/admin.ts @@ -77,4 +77,4 @@ class KafkaAdmin extends Client { } } -export default KafkaAdmin; \ No newline at end of file +export default KafkaAdmin; diff --git a/src/consumer.ts b/src/consumer.ts index 01b5ef7..6dfcefa 100644 --- a/src/consumer.ts +++ b/src/consumer.ts @@ -205,4 +205,4 @@ function getKafkaConsumer(clientId: string, groupId: string, config: ConsumerGlo return _kafkaConsumer; } -export default getKafkaConsumer; \ No newline at end of file +export default getKafkaConsumer; diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..f0b3949 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,9 @@ +import getKafkaProducer from './producer' +import getKafkaConsumer from './consumer'; +import KafkaAdmin from './admin'; + +export { + getKafkaConsumer, + getKafkaProducer, + KafkaAdmin, +} diff --git a/src/producer.ts b/src/producer.ts index 15da869..8ec5e47 100644 --- a/src/producer.ts +++ b/src/producer.ts @@ -140,4 +140,4 @@ function getKafkaProducer(clientId: string, config: ProducerGlobalConfig, topicC return _kafkaProducer; } -export default getKafkaProducer; \ No newline at end of file +export default getKafkaProducer; From cd51791607999f706466c06196ddbf847f92d65c Mon Sep 17 00:00:00 2001 From: Anas Khan Date: Thu, 10 Mar 2022 13:04:28 +0530 Subject: [PATCH 06/14] adding kafka consumer + producer interfaces --- src/consumer.ts | 4 ++-- src/index.ts | 22 ++++++++++++++++++++-- src/producer.ts | 2 +- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/consumer.ts b/src/consumer.ts index 6dfcefa..4d73d8e 100644 --- a/src/consumer.ts +++ b/src/consumer.ts @@ -2,9 +2,9 @@ import Kafka, { ConsumerGlobalConfig, ConsumerTopicConfig, LibrdKafkaError, Mess import { EventEmitter } from 'stream'; import Client from './client'; -type ConsumeActionFunction = (err: LibrdKafkaError, messages: Message[]) => void; +export type ConsumeActionFunction = (err: LibrdKafkaError, messages: Message[]) => void; -type ListenActionFunction = (arg: Message) => void; +export type ListenActionFunction = (arg: Message) => void; let _kafkaConsumer: KafkaConsumer = null; diff --git a/src/index.ts b/src/index.ts index f0b3949..a2a6f84 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,9 +1,27 @@ -import getKafkaProducer from './producer' -import getKafkaConsumer from './consumer'; +import getKafkaProducer, { ProduceParameters } from './producer' +import getKafkaConsumer, { ConsumeActionFunction, ListenActionFunction } from './consumer'; import KafkaAdmin from './admin'; +import { ClientMetrics, LibrdKafkaError, NumberNullUndefined, SubscribeTopicList } from 'node-rdkafka'; +import { ErrorHandlingFunction } from './client'; export { getKafkaConsumer, getKafkaProducer, KafkaAdmin, } + +export interface KafkaConsumer { + connect(): Promise; + subscribe(topics: SubscribeTopicList): this; + unsubscribe(): this; + consume(actionOnData: ConsumeActionFunction): void; + consumeBatch(msgCount: number, actionOnData: ConsumeActionFunction): void; + listen(actionOnData: ListenActionFunction): void; +} + +export interface KafkaProducer { + connect(): Promise; + produce(args: ProduceParameters): boolean | number; + flush(timeout?: NumberNullUndefined, postFlushAction?: ErrorHandlingFunction): this; + disconnect(postDisconnectAction?: (err: any, data: ClientMetrics) => any): this; +} diff --git a/src/producer.ts b/src/producer.ts index 8ec5e47..d27559b 100644 --- a/src/producer.ts +++ b/src/producer.ts @@ -2,7 +2,7 @@ import EventEmitter from 'events'; import Kafka, { ClientMetrics, LibrdKafkaError, MessageKey, NumberNullUndefined, ProducerGlobalConfig, ProducerTopicConfig } from 'node-rdkafka'; import Client, { ErrorHandlingFunction } from './client'; -interface ProduceParameters{ +export interface ProduceParameters{ topic: string; message: any; partition?: NumberNullUndefined; From 995528310ff2b832b5a62bc8fa3e29d89ad97943 Mon Sep 17 00:00:00 2001 From: Anas Khan Date: Thu, 10 Mar 2022 13:43:48 +0530 Subject: [PATCH 07/14] fix --- lib/consumer.d.ts | 4 ++-- lib/index.d.ts | 22 +++++++++++++++++++--- lib/index.js | 2 +- lib/producer.d.ts | 2 +- src/index.ts | 18 ++++++++++-------- 5 files changed, 33 insertions(+), 15 deletions(-) diff --git a/lib/consumer.d.ts b/lib/consumer.d.ts index 29d0236..9917582 100644 --- a/lib/consumer.d.ts +++ b/lib/consumer.d.ts @@ -2,8 +2,8 @@ import { ConsumerGlobalConfig, ConsumerTopicConfig, LibrdKafkaError, Message, SubscribeTopicList } from 'node-rdkafka'; import { EventEmitter } from 'stream'; import Client from './client'; -declare type ConsumeActionFunction = (err: LibrdKafkaError, messages: Message[]) => void; -declare type ListenActionFunction = (arg: Message) => void; +export declare type ConsumeActionFunction = (err: LibrdKafkaError, messages: Message[]) => void; +export declare type ListenActionFunction = (arg: Message) => void; declare class KafkaConsumer extends Client { private config; private topicConfig; diff --git a/lib/index.d.ts b/lib/index.d.ts index d683595..9e228de 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -1,4 +1,20 @@ -import getKafkaProducer from './producer'; -import getKafkaConsumer from './consumer'; +import getKafkaProducer, { ProduceParameters } from './producer'; +import getKafkaConsumer, { ConsumeActionFunction, ListenActionFunction } from './consumer'; import KafkaAdmin from './admin'; -export { getKafkaConsumer, getKafkaProducer, KafkaAdmin, }; +import { ClientMetrics, LibrdKafkaError, NumberNullUndefined, SubscribeTopicList } from 'node-rdkafka'; +import { ErrorHandlingFunction } from './client'; +interface KafkaConsumer { + connect(): Promise; + subscribe(topics: SubscribeTopicList): this; + unsubscribe(): this; + consume(actionOnData: ConsumeActionFunction): void; + consumeBatch(msgCount: number, actionOnData: ConsumeActionFunction): void; + listen(actionOnData: ListenActionFunction): void; +} +interface KafkaProducer { + connect(): Promise; + produce(args: ProduceParameters): boolean | number; + flush(timeout?: NumberNullUndefined, postFlushAction?: ErrorHandlingFunction): this; + disconnect(postDisconnectAction?: (err: any, data: ClientMetrics) => any): this; +} +export { getKafkaConsumer, getKafkaProducer, KafkaAdmin, KafkaConsumer, KafkaProducer, }; diff --git a/lib/index.js b/lib/index.js index 5b8d6aa..a7c948f 100644 --- a/lib/index.js +++ b/lib/index.js @@ -10,4 +10,4 @@ const consumer_1 = __importDefault(require("./consumer")); exports.getKafkaConsumer = consumer_1.default; const admin_1 = __importDefault(require("./admin")); exports.KafkaAdmin = admin_1.default; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMERBQXlDO0FBTXZDLDJCQU5LLGtCQUFnQixDQU1MO0FBTGxCLDBEQUEwQztBQUl4QywyQkFKSyxrQkFBZ0IsQ0FJTDtBQUhsQixvREFBaUM7QUFLL0IscUJBTEssZUFBVSxDQUtMIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMERBQWdFO0FBd0I5RCwyQkF4Qkssa0JBQWdCLENBd0JMO0FBdkJsQiwwREFBMkY7QUFzQnpGLDJCQXRCSyxrQkFBZ0IsQ0FzQkw7QUFyQmxCLG9EQUFpQztBQXVCL0IscUJBdkJLLGVBQVUsQ0F1QkwifQ== \ No newline at end of file diff --git a/lib/producer.d.ts b/lib/producer.d.ts index 64c20d5..c5f1ae0 100644 --- a/lib/producer.d.ts +++ b/lib/producer.d.ts @@ -2,7 +2,7 @@ import EventEmitter from 'events'; import { ClientMetrics, LibrdKafkaError, MessageKey, NumberNullUndefined, ProducerGlobalConfig, ProducerTopicConfig } from 'node-rdkafka'; import Client, { ErrorHandlingFunction } from './client'; -interface ProduceParameters { +export interface ProduceParameters { topic: string; message: any; partition?: NumberNullUndefined; diff --git a/src/index.ts b/src/index.ts index a2a6f84..bd26a40 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,13 +4,7 @@ import KafkaAdmin from './admin'; import { ClientMetrics, LibrdKafkaError, NumberNullUndefined, SubscribeTopicList } from 'node-rdkafka'; import { ErrorHandlingFunction } from './client'; -export { - getKafkaConsumer, - getKafkaProducer, - KafkaAdmin, -} - -export interface KafkaConsumer { +interface KafkaConsumer { connect(): Promise; subscribe(topics: SubscribeTopicList): this; unsubscribe(): this; @@ -19,9 +13,17 @@ export interface KafkaConsumer { listen(actionOnData: ListenActionFunction): void; } -export interface KafkaProducer { +interface KafkaProducer { connect(): Promise; produce(args: ProduceParameters): boolean | number; flush(timeout?: NumberNullUndefined, postFlushAction?: ErrorHandlingFunction): this; disconnect(postDisconnectAction?: (err: any, data: ClientMetrics) => any): this; } + +export { + getKafkaConsumer, + getKafkaProducer, + KafkaAdmin, + KafkaConsumer, + KafkaProducer, +} From a9309d85c9b1f58e47b62f79ea952c11b6e03c08 Mon Sep 17 00:00:00 2001 From: Anas Khan Date: Fri, 11 Mar 2022 01:34:56 +0530 Subject: [PATCH 08/14] fixing clientId naming issues --- lib/admin.d.ts | 1 - lib/admin.js | 4 +--- lib/client.d.ts | 6 +++--- lib/client.js | 18 +++++++++--------- lib/consumer.d.ts | 2 -- lib/consumer.js | 6 +----- lib/producer.d.ts | 2 -- lib/producer.js | 6 +----- package.json | 2 +- src/admin.ts | 2 +- src/client.ts | 8 ++++---- src/consumer.ts | 2 +- src/producer.ts | 2 +- 13 files changed, 23 insertions(+), 38 deletions(-) diff --git a/lib/admin.d.ts b/lib/admin.d.ts index 07bfec6..b9ad2ad 100644 --- a/lib/admin.d.ts +++ b/lib/admin.d.ts @@ -3,7 +3,6 @@ import Client from './client'; import { GlobalConfig } from 'node-rdkafka'; import EventEmitter from 'events'; declare class KafkaAdmin extends Client { - private config; private adminClient; /** * Initialzes a KafkaAdmin client with config. diff --git a/lib/admin.js b/lib/admin.js index a0987ff..366ef87 100644 --- a/lib/admin.js +++ b/lib/admin.js @@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); const client_1 = __importDefault(require("./client")); const node_rdkafka_1 = require("node-rdkafka"); class KafkaAdmin extends client_1.default { - config; adminClient; /** * Initialzes a KafkaAdmin client with config. @@ -17,7 +16,6 @@ class KafkaAdmin extends client_1.default { */ constructor(clientId, config, emitter) { super(clientId, 'admin', config, {}, emitter); - this.config = config; this.adminClient = null; } /** @@ -76,4 +74,4 @@ class KafkaAdmin extends client_1.default { } } exports.default = KafkaAdmin; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWRtaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxzREFBOEI7QUFDOUIsK0NBQXlEO0FBR3pELE1BQU0sVUFBVyxTQUFRLGdCQUFNO0lBVVc7SUFUOUIsV0FBVyxDQUFDO0lBRXBCOzs7Ozs7T0FNRztJQUNILFlBQVksUUFBZ0IsRUFBVSxNQUFvQixFQUFFLE9BQXFCO1FBQzdFLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFEWixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBRXRELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxPQUFPO1FBQ1QsSUFBSTtZQUNBLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSwwQkFBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDNUQ7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7U0FDNUQ7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsc0RBQXNELEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDM0U7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsdUJBQXVCO1FBQy9DLElBQUk7WUFDQSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDaEU7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsMENBQTBDLEtBQUssR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZFO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLHVCQUF1QjtRQUMvQyxJQUFJO1lBQ0EsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxPQUFPLENBQUMsK0JBQStCLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDeEQ7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsMENBQTBDLEtBQUssR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZFO0lBRUwsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGdCQUFnQixDQUFDLEtBQUssRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLDJCQUEyQjtRQUN6RSxJQUFJO1lBQ0EsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO1lBQ2hHLElBQUksQ0FBQyxPQUFPLENBQUMsbURBQW1ELEtBQUssb0JBQW9CLGVBQWUsRUFBRSxDQUFDLENBQUM7U0FDL0c7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxLQUFLLENBQ04sb0VBQW9FLEtBQUssb0JBQW9CLGVBQWUsRUFBRSxFQUM5RyxHQUFHLENBQ04sQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVTtRQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbEMsQ0FBQztDQUNKO0FBRUQsa0JBQWUsVUFBVSxDQUFDIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWRtaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxzREFBOEI7QUFDOUIsK0NBQXlEO0FBR3pELE1BQU0sVUFBVyxTQUFRLGdCQUFNO0lBQ25CLFdBQVcsQ0FBQztJQUVwQjs7Ozs7O09BTUc7SUFDSCxZQUFZLFFBQWdCLEVBQUUsTUFBb0IsRUFBRSxPQUFxQjtRQUNyRSxLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxPQUFPO1FBQ1QsSUFBSTtZQUNBLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSwwQkFBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDNUQ7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7U0FDNUQ7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsc0RBQXNELEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDM0U7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsdUJBQXVCO1FBQy9DLElBQUk7WUFDQSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDaEU7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsMENBQTBDLEtBQUssR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZFO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLHVCQUF1QjtRQUMvQyxJQUFJO1lBQ0EsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1lBQ3RFLElBQUksQ0FBQyxPQUFPLENBQUMsK0JBQStCLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDeEQ7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsMENBQTBDLEtBQUssR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZFO0lBRUwsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGdCQUFnQixDQUFDLEtBQUssRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLDJCQUEyQjtRQUN6RSxJQUFJO1lBQ0EsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO1lBQ2hHLElBQUksQ0FBQyxPQUFPLENBQUMsbURBQW1ELEtBQUssb0JBQW9CLGVBQWUsRUFBRSxDQUFDLENBQUM7U0FDL0c7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxLQUFLLENBQ04sb0VBQW9FLEtBQUssb0JBQW9CLGVBQWUsRUFBRSxFQUM5RyxHQUFHLENBQ04sQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVTtRQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbEMsQ0FBQztDQUNKO0FBRUQsa0JBQWUsVUFBVSxDQUFDIn0= \ No newline at end of file diff --git a/lib/client.d.ts b/lib/client.d.ts index b2af417..5ffe469 100644 --- a/lib/client.d.ts +++ b/lib/client.d.ts @@ -4,10 +4,10 @@ import { GlobalConfig, LibrdKafkaError, TopicConfig } from "node-rdkafka"; export default class Client { private clientId; private clientType; - private _config; - private _topicConfig; + protected config: GlobalConfig; + protected topicConfig: TopicConfig; private emitter; - constructor(clientId: string, clientType: string, _config: GlobalConfig, _topicConfig: TopicConfig, emitter: EventEmitter); + constructor(clientId: string, clientType: string, config: GlobalConfig, topicConfig: TopicConfig, emitter: EventEmitter); _logMessage(msgType: 'log' | 'success' | 'error', message: string, data: any): void; log(message: string, data?: any): void; success(message: string, data?: any): void; diff --git a/lib/client.js b/lib/client.js index a26a32e..5074914 100644 --- a/lib/client.js +++ b/lib/client.js @@ -3,24 +3,24 @@ Object.defineProperty(exports, "__esModule", { value: true }); class Client { clientId; clientType; - _config; - _topicConfig; + config; + topicConfig; emitter; - constructor(clientId, clientType, _config, _topicConfig, emitter) { + constructor(clientId, clientType, config, topicConfig, emitter) { this.clientId = clientId; this.clientType = clientType; - this._config = _config; - this._topicConfig = _topicConfig; + this.config = config; + this.topicConfig = topicConfig; this.emitter = emitter; this.clientId = clientId; this.clientType = clientType; // common config defaults should go here. - this._config = Object.assign({ + this.config = Object.assign({ 'metadata.broker.list': 'localhost:9092', 'socket.keepalive.enable': true, - }, _config, { 'client.id': clientId }); + }, config, { 'client.id': clientId }); // commong topic configs defaults should go here. - this._topicConfig = _topicConfig; + this.topicConfig = topicConfig; this.emitter = emitter; } _logMessage(msgType, message, data) { @@ -50,4 +50,4 @@ class Client { } } exports.default = Client; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLE1BQXFCLE1BQU07SUFDSDtJQUNSO0lBQTRCO0lBQStCO0lBQW1DO0lBRDFHLFlBQW9CLFFBQWdCLEVBQ3hCLFVBQWtCLEVBQVUsT0FBcUIsRUFBVSxZQUF5QixFQUFVLE9BQXFCO1FBRDNHLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQWM7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQWM7UUFDM0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFFN0IseUNBQXlDO1FBQ3pDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUN6QixzQkFBc0IsRUFBRSxnQkFBZ0I7WUFDeEMseUJBQXlCLEVBQUUsSUFBSTtTQUNoQyxFQUNELE9BQU8sRUFDUCxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FDMUIsQ0FBQztRQUNGLGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQW9DLEVBQUUsT0FBZSxFQUFFLElBQVM7UUFDeEUsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTtZQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUMzQixPQUFPO2dCQUNQLElBQUk7YUFDUCxDQUFDLENBQUM7U0FDTjthQUFNLElBQUksT0FBTyxLQUFLLE9BQU8sRUFBRTtZQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ25HO2FBQU07WUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2pHO0lBQ0wsQ0FBQztJQUVELEdBQUcsQ0FBQyxPQUFlLEVBQUUsSUFBVTtRQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUFlLEVBQUUsSUFBVTtRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFXLEVBQUUsSUFBVTtRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztDQUNKO0FBN0NELHlCQTZDQyJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLE1BQXFCLE1BQU07SUFDSDtJQUNSO0lBQThCO0lBQWdDO0lBQWtDO0lBRDVHLFlBQW9CLFFBQWdCLEVBQ3hCLFVBQWtCLEVBQVksTUFBb0IsRUFBWSxXQUF3QixFQUFVLE9BQXFCO1FBRDdHLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUFZLFdBQU0sR0FBTixNQUFNLENBQWM7UUFBWSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQWM7UUFDN0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFFN0IseUNBQXlDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUN4QixzQkFBc0IsRUFBRSxnQkFBZ0I7WUFDeEMseUJBQXlCLEVBQUUsSUFBSTtTQUNoQyxFQUNELE1BQU0sRUFDTixFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FDMUIsQ0FBQztRQUNGLGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQW9DLEVBQUUsT0FBZSxFQUFFLElBQVM7UUFDeEUsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTtZQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDdkIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUMzQixPQUFPO2dCQUNQLElBQUk7YUFDUCxDQUFDLENBQUM7U0FDTjthQUFNLElBQUksT0FBTyxLQUFLLE9BQU8sRUFBRTtZQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ25HO2FBQU07WUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2pHO0lBQ0wsQ0FBQztJQUVELEdBQUcsQ0FBQyxPQUFlLEVBQUUsSUFBVTtRQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUFlLEVBQUUsSUFBVTtRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFXLEVBQUUsSUFBVTtRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekMsQ0FBQztDQUNKO0FBN0NELHlCQTZDQyJ9 \ No newline at end of file diff --git a/lib/consumer.d.ts b/lib/consumer.d.ts index 9917582..3d2af98 100644 --- a/lib/consumer.d.ts +++ b/lib/consumer.d.ts @@ -5,8 +5,6 @@ import Client from './client'; export declare type ConsumeActionFunction = (err: LibrdKafkaError, messages: Message[]) => void; export declare type ListenActionFunction = (arg: Message) => void; declare class KafkaConsumer extends Client { - private config; - private topicConfig; private consumer; /** * Initializes a KafkaConsumer. diff --git a/lib/consumer.js b/lib/consumer.js index 441b2f1..f857043 100644 --- a/lib/consumer.js +++ b/lib/consumer.js @@ -7,8 +7,6 @@ const node_rdkafka_1 = __importDefault(require("node-rdkafka")); const client_1 = __importDefault(require("./client")); let _kafkaConsumer = null; class KafkaConsumer extends client_1.default { - config; - topicConfig; consumer; /** * Initializes a KafkaConsumer. @@ -26,8 +24,6 @@ class KafkaConsumer extends client_1.default { 'group.id': groupId, }); super(clientId, 'consumer', config, topicConfig, emitter); - this.config = config; - this.topicConfig = topicConfig; this.consumer = new node_rdkafka_1.default.KafkaConsumer(this.config, this.topicConfig); } /** @@ -200,4 +196,4 @@ function getKafkaConsumer(clientId, groupId, config, topicConfig, emitter) { return _kafkaConsumer; } exports.default = getKafkaConsumer; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3VtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uc3VtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRUFBOEg7QUFFOUgsc0RBQThCO0FBTTlCLElBQUksY0FBYyxHQUFrQixJQUFJLENBQUM7QUFFekMsTUFBTSxhQUFjLFNBQVEsZ0JBQU07SUFXeUI7SUFBc0M7SUFWckYsUUFBUSxDQUFzQjtJQUV0Qzs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxRQUFnQixFQUFFLE9BQWUsRUFBVSxNQUE0QixFQUFVLFdBQWdDLEVBQUUsT0FBcUI7UUFDaEosMERBQTBEO1FBQzFELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ25CLDBCQUEwQixFQUFFLElBQUk7U0FDbkMsRUFDRyxNQUFNLEVBQ047WUFDSSxVQUFVLEVBQUUsT0FBTztTQUN0QixDQUFDLENBQUM7UUFDUCxLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBVFAsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBcUI7UUFVekgsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHNCQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE9BQU87UUFDSCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLElBQUk7Z0JBQ0EsSUFBSSxDQUFDLFFBQVE7cUJBQ1IsT0FBTyxFQUFFO3FCQUNULEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUU7b0JBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMseUNBQXlDLEVBQUU7d0JBQ3BELElBQUksRUFBRSxJ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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3VtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uc3VtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRUFBOEg7QUFFOUgsc0RBQThCO0FBTTlCLElBQUksY0FBYyxHQUFrQixJQUFJLENBQUM7QUFFekMsTUFBTSxhQUFjLFNBQVEsZ0JBQU07SUFDdEIsUUFBUSxDQUFzQjtJQUV0Qzs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxRQUFnQixFQUFFLE9BQWUsRUFBRSxNQUE0QixFQUFFLFdBQWdDLEVBQUUsT0FBcUI7UUFDaEksMERBQTBEO1FBQzFELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ25CLDBCQUEwQixFQUFFLElBQUk7U0FDbkMsRUFDRyxNQUFNLEVBQ047WUFDSSxVQUFVLEVBQUUsT0FBTztTQUN0QixDQUFDLENBQUM7UUFDUCxLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxzQkFBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPO1FBQ0gsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxJQUFJO2dCQUNBLElBQUksQ0FBQyxRQUFRO3FCQUNSLE9BQU8sRUFBRTtxQkFDVCxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFO29CQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLHlDQUF5QyxFQUFFO3dCQUNwRCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7cUJBQ2xCLENBQUMsQ0FBQztvQkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JB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 \ No newline at end of file diff --git a/lib/producer.d.ts b/lib/producer.d.ts index c5f1ae0..c5f7cb6 100644 --- a/lib/producer.d.ts +++ b/lib/producer.d.ts @@ -10,8 +10,6 @@ export interface ProduceParameters { timestamp?: NumberNullUndefined; } declare class KafkaProducer extends Client { - private config; - private topicConfig; private producer; /** * Initializes a KafkaProducer. diff --git a/lib/producer.js b/lib/producer.js index 8b52928..1d1710a 100644 --- a/lib/producer.js +++ b/lib/producer.js @@ -7,8 +7,6 @@ const node_rdkafka_1 = __importDefault(require("node-rdkafka")); const client_1 = __importDefault(require("./client")); let _kafkaProducer = null; class KafkaProducer extends client_1.default { - config; - topicConfig; producer; /** * Initializes a KafkaProducer. @@ -30,8 +28,6 @@ class KafkaProducer extends client_1.default { // producer topic config defaults should go here. topicConfig = Object.assign({ 'acks': 1 }, topicConfig); super(clientId, 'producer', config, topicConfig, emitter); - this.config = config; - this.topicConfig = topicConfig; this.producer = new node_rdkafka_1.default.Producer(this.config, this.topicConfig); } /** @@ -134,4 +130,4 @@ function getKafkaProducer(clientId, config, topicConfig, emitter) { return _kafkaProducer; } exports.default = getKafkaProducer; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvZHVjZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxnRUFBaUo7QUFDakosc0RBQXlEO0FBVXpELElBQUksY0FBYyxHQUFrQixJQUFJLENBQUM7QUFFekMsTUFBTSxhQUFjLFNBQVEsZ0JBQU07SUFVUTtJQUFzQztJQVRwRSxRQUFRLENBQWlCO0lBRWpDOzs7Ozs7T0FNRztJQUNILFlBQVksUUFBZ0IsRUFBVSxNQUE0QixFQUFVLFdBQWdDLEVBQUUsT0FBcUI7UUFDL0gsMkNBQTJDO1FBQzNDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ25CLGtCQUFrQixFQUFFLEdBQUc7WUFDdkIsMEJBQTBCLEVBQUUsRUFBRTtZQUM5Qiw4QkFBOEIsRUFBRSxNQUFNO1lBQ3RDLHdCQUF3QixFQUFFLElBQUk7WUFDOUIsb0JBQW9CLEVBQUUsT0FBTztZQUM3QixPQUFPLEVBQUUsSUFBSTtTQUNkLEVBQ0QsTUFBTSxDQUNQLENBQUM7UUFDRixpREFBaUQ7UUFDakQsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxNQUFNLEVBQUcsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFekQsS0FBSyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQWZ4QixXQUFNLEdBQU4sTUFBTSxDQUFzQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtRQWdCeEcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHNCQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE9BQU87UUFDSCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxF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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvZHVjZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxnRUFBaUo7QUFDakosc0RBQXlEO0FBVXpELElBQUksY0FBYyxHQUFrQixJQUFJLENBQUM7QUFFekMsTUFBTSxhQUFjLFNBQVEsZ0JBQU07SUFDdEIsUUFBUSxDQUFpQjtJQUVqQzs7Ozs7O09BTUc7SUFDSCxZQUFZLFFBQWdCLEVBQUUsTUFBNEIsRUFBRSxXQUFnQyxFQUFFLE9BQXFCO1FBQy9HLDJDQUEyQztRQUMzQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNuQixrQkFBa0IsRUFBRSxHQUFHO1lBQ3ZCLDBCQUEwQixFQUFFLEVBQUU7WUFDOUIsOEJBQThCLEVBQUUsTUFBTTtZQUN0Qyx3QkFBd0IsRUFBRSxJQUFJO1lBQzlCLG9CQUFvQixFQUFFLE9BQU87WUFDN0IsT0FBTyxFQUFFLElBQUk7U0FDZCxFQUNELE1BQU0sQ0FDUCxDQUFDO1FBQ0YsaURBQWlEO1FBQ2pELFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFHLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRXpELEtBQUssQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHNCQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE9BQU87UUFDSCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLElBQUk7Z0JBQ0EsSUFBSSxDQUFDLFFBQVE7cUJBQ1osT0FBTyxFQUFFO3FCQUNULEVBQUUsQ0FB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 \ No newline at end of file diff --git a/package.json b/package.json index d376635..18561d0 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "A simple kafka client to produce and consume messages to/from kafka cluster.", "main": "lib/index.js", "scripts": { - "compile-ts": "tsc", + "build": "tsc", "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { diff --git a/src/admin.ts b/src/admin.ts index 58e3569..2389b11 100644 --- a/src/admin.ts +++ b/src/admin.ts @@ -12,7 +12,7 @@ class KafkaAdmin extends Client { * @param {object} config - global kafka config * @param {object} emitter - emitter to emit log event */ - constructor(clientId: string, private config: GlobalConfig, emitter: EventEmitter) { + constructor(clientId: string, config: GlobalConfig, emitter: EventEmitter) { super(clientId, 'admin', config, {}, emitter); this.adminClient = null; } diff --git a/src/client.ts b/src/client.ts index 8c0b971..261caac 100644 --- a/src/client.ts +++ b/src/client.ts @@ -3,20 +3,20 @@ import { GlobalConfig, LibrdKafkaError, TopicConfig } from "node-rdkafka"; export default class Client { constructor(private clientId: string, - private clientType: string, private _config: GlobalConfig, private _topicConfig: TopicConfig, private emitter: EventEmitter) { + private clientType: string, protected config: GlobalConfig, protected topicConfig: TopicConfig, private emitter: EventEmitter) { this.clientId = clientId; this.clientType = clientType; // common config defaults should go here. - this._config = Object.assign({ + this.config = Object.assign({ 'metadata.broker.list': 'localhost:9092', 'socket.keepalive.enable': true, }, - _config, + config, { 'client.id': clientId } ); // commong topic configs defaults should go here. - this._topicConfig = _topicConfig; + this.topicConfig = topicConfig; this.emitter = emitter; } diff --git a/src/consumer.ts b/src/consumer.ts index 4d73d8e..1d39fee 100644 --- a/src/consumer.ts +++ b/src/consumer.ts @@ -19,7 +19,7 @@ class KafkaConsumer extends Client { * @param {import('node-rdkafka').ConsumerTopicConfig} topicConfig: topic configs * @param {EventEmitter} emitter: to emit log events */ - constructor(clientId: string, groupId: string, private config: ConsumerGlobalConfig, private topicConfig: ConsumerTopicConfig, emitter: EventEmitter) { + constructor(clientId: string, groupId: string, config: ConsumerGlobalConfig, topicConfig: ConsumerTopicConfig, emitter: EventEmitter) { // consumer specific default configs we would like to have config = Object.assign({ 'allow.auto.create.topics': true, diff --git a/src/producer.ts b/src/producer.ts index d27559b..be3c79c 100644 --- a/src/producer.ts +++ b/src/producer.ts @@ -22,7 +22,7 @@ class KafkaProducer extends Client { * @param {import('node-rdkafka').ProducerTopicConfig} topicConfig: topic configs. * @param {EventEmitter} emitter: to emit log messages */ - constructor(clientId: string, private config: ProducerGlobalConfig, private topicConfig: ProducerTopicConfig, emitter: EventEmitter) { + constructor(clientId: string, config: ProducerGlobalConfig, topicConfig: ProducerTopicConfig, emitter: EventEmitter) { // producer config defaults should go here. config = Object.assign({ 'retry.backoff.ms': 200, From dcd67cbe1525c556176132f6d70a5d72ec3af20f Mon Sep 17 00:00:00 2001 From: Anas Khan Date: Thu, 14 Apr 2022 14:43:16 +0530 Subject: [PATCH 09/14] compilation --- lib/consumer.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/consumer.js b/lib/consumer.js index f857043..06bd821 100644 --- a/lib/consumer.js +++ b/lib/consumer.js @@ -159,10 +159,8 @@ class KafkaConsumer extends client_1.default { if (!Array.isArray(msgs)) { msgs = [msgs]; } - msgs.forEach((msg) => { - msg = this._parseMessage(msg); - actionOnData(err, msg); - }); + const parsedMsgs = msgs.map((msg) => this._parseMessage(msg)); + actionOnData(err, parsedMsgs); }; return wrapper; } @@ -196,4 +194,4 @@ function getKafkaConsumer(clientId, groupId, config, topicConfig, emitter) { return _kafkaConsumer; } exports.default = getKafkaConsumer; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3VtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uc3VtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRUFBOEg7QUFFOUgsc0RBQThCO0FBTTlCLElBQUksY0FBYyxHQUFrQixJQUFJLENBQUM7QUFFekMsTUFBTSxhQUFjLFNBQVEsZ0JBQU07SUFDdEIsUUFBUSxDQUFzQjtJQUV0Qzs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxRQUFnQixFQUFFLE9BQWUsRUFBRSxNQUE0QixFQUFFLFdBQWdDLEVBQUUsT0FBcUI7UUFDaEksMERBQTBEO1FBQzFELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ25CLDBCQUEwQixFQUFFLElBQUk7U0FDbkMsRUFDRyxNQUFNLEVBQ047WUFDSSxVQUFVLEVBQUUsT0FBTztTQUN0QixDQUFDLENBQUM7UUFDUCxLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxzQkFBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPO1FBQ0gsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxJQUFJO2dCQUNBLElBQUksQ0FBQyxRQUFRO3FCQUNSLE9BQU8sRUFBRTtxQkFDVCxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFO29CQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLHlDQUF5QyxFQUFFO3dCQUNwRCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7cUJBQ2xCLENBQUMsQ0FBQztvQkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3VtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uc3VtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRUFBOEg7QUFFOUgsc0RBQThCO0FBTTlCLElBQUksY0FBYyxHQUFrQixJQUFJLENBQUM7QUFFekMsTUFBTSxhQUFjLFNBQVEsZ0JBQU07SUFDdEIsUUFBUSxDQUFzQjtJQUV0Qzs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxRQUFnQixFQUFFLE9BQWUsRUFBRSxNQUE0QixFQUFFLFdBQWdDLEVBQUUsT0FBcUI7UUFDaEksMERBQTBEO1FBQzFELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ25CLDBCQUEwQixFQUFFLElBQUk7U0FDbkMsRUFDRyxNQUFNLEVBQ047WUFDSSxVQUFVLEVBQUUsT0FBTztTQUN0QixDQUFDLENBQUM7UUFDUCxLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxzQkFBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPO1FBQ0gsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxJQUFJO2dCQUNBLElBQUksQ0FBQyxRQUFRO3FCQUNSLE9BQU8sRUFBRTtxQkFDVCxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFO29CQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLHlDQUF5QyxFQUFFO3dCQUNwRCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7cUJBQ2xCLENBQUMsQ0FBQztvQkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JB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 \ No newline at end of file From 8119f5fb0412cc33fb978cf45aa0f6913c67f8d0 Mon Sep 17 00:00:00 2001 From: Akshendra Pratap Singh Date: Thu, 1 Jun 2023 11:10:56 +0530 Subject: [PATCH 10/14] allow new consumer and producer createion --- package.json | 2 +- src/consumer.ts | 7 ++++++- src/producer.ts | 6 +++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 18561d0..4bd4a45 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "kafka-wrapper", - "version": "0.1.0", + "version": "1.0.2", "description": "A simple kafka client to produce and consume messages to/from kafka cluster.", "main": "lib/index.js", "scripts": { diff --git a/src/consumer.ts b/src/consumer.ts index c1ab14c..c5218c1 100644 --- a/src/consumer.ts +++ b/src/consumer.ts @@ -196,7 +196,12 @@ class KafkaConsumer extends Client { } } -function getKafkaConsumer(clientId: string, groupId: string, config: ConsumerGlobalConfig, topicConfig: ConsumerTopicConfig, emitter: EventEmitter): KafkaConsumer { +function getKafkaConsumer(clientId: string, groupId: string, config: ConsumerGlobalConfig, topicConfig: ConsumerTopicConfig, emitter: EventEmitter, createNew: boolean = false): KafkaConsumer { + if (createNew) { + const consumer = new KafkaConsumer(clientId, groupId, config, topicConfig, emitter); + return consumer; + } + if (!_kafkaConsumer) { _kafkaConsumer = new KafkaConsumer(clientId, groupId, config, topicConfig, emitter); } diff --git a/src/producer.ts b/src/producer.ts index be3c79c..78cd381 100644 --- a/src/producer.ts +++ b/src/producer.ts @@ -133,7 +133,11 @@ class KafkaProducer extends Client { } } -function getKafkaProducer(clientId: string, config: ProducerGlobalConfig, topicConfig: ProducerTopicConfig, emitter: EventEmitter): KafkaProducer { +function getKafkaProducer(clientId: string, config: ProducerGlobalConfig, topicConfig: ProducerTopicConfig, emitter: EventEmitter, createNew: boolean = false): KafkaProducer { + if (createNew) { + const producer = new KafkaProducer(clientId, config, topicConfig, emitter); + return producer; + } if (!_kafkaProducer) { _kafkaProducer = new KafkaProducer(clientId, config, topicConfig, emitter); } From e859f496a06d9df0a6aee1e8a721275634ae3264 Mon Sep 17 00:00:00 2001 From: Akshendra Pratap Singh Date: Thu, 1 Jun 2023 11:16:10 +0530 Subject: [PATCH 11/14] build v1.0.2 --- lib/consumer.d.ts | 2 +- lib/consumer.js | 8 ++++++-- lib/producer.d.ts | 2 +- lib/producer.js | 8 ++++++-- package.json | 4 ++-- 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/lib/consumer.d.ts b/lib/consumer.d.ts index 3d2af98..2c1a645 100644 --- a/lib/consumer.d.ts +++ b/lib/consumer.d.ts @@ -67,5 +67,5 @@ declare class KafkaConsumer extends Client { */ _parseMessage(msg: any): any; } -declare function getKafkaConsumer(clientId: string, groupId: string, config: ConsumerGlobalConfig, topicConfig: ConsumerTopicConfig, emitter: EventEmitter): KafkaConsumer; +declare function getKafkaConsumer(clientId: string, groupId: string, config: ConsumerGlobalConfig, topicConfig: ConsumerTopicConfig, emitter: EventEmitter, createNew?: boolean): KafkaConsumer; export default getKafkaConsumer; diff --git a/lib/consumer.js b/lib/consumer.js index 06bd821..612463b 100644 --- a/lib/consumer.js +++ b/lib/consumer.js @@ -187,11 +187,15 @@ class KafkaConsumer extends client_1.default { return msg; } } -function getKafkaConsumer(clientId, groupId, config, topicConfig, emitter) { +function getKafkaConsumer(clientId, groupId, config, topicConfig, emitter, createNew = false) { + if (createNew) { + const consumer = new KafkaConsumer(clientId, groupId, config, topicConfig, emitter); + return consumer; + } if (!_kafkaConsumer) { _kafkaConsumer = new KafkaConsumer(clientId, groupId, config, topicConfig, emitter); } return _kafkaConsumer; } exports.default = getKafkaConsumer; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3VtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uc3VtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRUFBOEg7QUFFOUgsc0RBQThCO0FBTTlCLElBQUksY0FBYyxHQUFrQixJQUFJLENBQUM7QUFFekMsTUFBTSxhQUFjLFNBQVEsZ0JBQU07SUFDdEIsUUFBUSxDQUFzQjtJQUV0Qzs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxRQUFnQixFQUFFLE9BQWUsRUFBRSxNQUE0QixFQUFFLFdBQWdDLEVBQUUsT0FBcUI7UUFDaEksMERBQTBEO1FBQzFELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ25CLDBCQUEwQixFQUFFLElBQUk7U0FDbkMsRUFDRyxNQUFNLEVBQ047WUFDSSxVQUFVLEVBQUUsT0FBTztTQUN0QixDQUFDLENBQUM7UUFDUCxLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxzQkFBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPO1FBQ0gsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxJQUFJO2dCQUNBLElBQUksQ0FBQyxRQUFRO3FCQUNSLE9BQU8sRUFBRTtxQkFDVCxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFO29CQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLHlDQUF5QyxFQUFFO3dCQUNwRCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7cUJBQ2xCLENBQUMsQ0FBQztvQkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3VtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY29uc3VtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxnRUFBOEg7QUFFOUgsc0RBQThCO0FBTTlCLElBQUksY0FBYyxHQUFrQixJQUFJLENBQUM7QUFFekMsTUFBTSxhQUFjLFNBQVEsZ0JBQU07SUFDdEIsUUFBUSxDQUFzQjtJQUV0Qzs7Ozs7OztPQU9HO0lBQ0gsWUFBWSxRQUFnQixFQUFFLE9BQWUsRUFBRSxNQUE0QixFQUFFLFdBQWdDLEVBQUUsT0FBcUI7UUFDaEksMERBQTBEO1FBQzFELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ25CLDBCQUEwQixFQUFFLElBQUk7U0FDbkMsRUFDRyxNQUFNLEVBQ047WUFDSSxVQUFVLEVBQUUsT0FBTztTQUN0QixDQUFDLENBQUM7UUFDUCxLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxzQkFBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPO1FBQ0gsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxJQUFJO2dCQUNBLElBQUksQ0FBQyxRQUFRO3FCQUNSLE9BQU8sRUFBRTtxQkFDVCxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFO29CQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLHlDQUF5QyxFQUFFO3dCQUNwRCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7cUJBQ2xCLENBQUMsQ0FBQztvQkFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xCLENBQUMsQ0FBQztxQkFDRCxFQUFFLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLEVBQUU7b0JBQzdDLElBQUksQ0FBQyxLQUFLLENBQUMsdURBQXVELEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUN6RixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQztxQkFDRCxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUMvRCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQztxQkFDRCxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLDBCQUEwQixFQUFFLFNBQVMsQ0FBQyxDQUFDO3FCQUMvRSxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsNkNBQTZDLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUE7Z0JBQ3RGLENBQUMsQ0FBQztxQkFDRCxFQUFFLENBQUMsZUFBZSxFQUFFLENBQUMsR0FBRyxFQUFFLGVBQWUsRUFBRSxFQUFFO29CQUMxQyxJQUFJLEdBQUcsRUFBRTt3QkFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDOUUsT0FBTztxQkFDVjtvQkFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLHdDQUF3QyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztnQkFDekYsQ0FBQyxDQUFDO3FCQUNELEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLENBQUMsQ0FBQyxDQUFDO2FBQ1Y7WUFBQyxPQUFPLEdBQUcsRUFBRTtnQkFDVixJQUFJLENBQUMsS0FBSyxDQUFDLHdEQUF3RCxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMxRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDZjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxTQUFTLENBQUMsTUFBMEI7UUFDaEMsSUFBSTtZQUNBLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ25DO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLDBEQUEwRCxNQUFNLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUN2RjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXO1FBQ1AsSUFBSTtZQUNBLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDL0I7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsZ0RBQWdELEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDckU7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE9BQU8sQ0FBQyxZQUFtQztRQUN2QyxJQUFJO1lBQ0Esa0RBQWtEO1lBQ2xELElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7U0FDekU7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxLQUFLLENBQUMscURBQXFELEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDMUU7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxZQUFZLENBQUMsUUFBZ0IsRUFBRSxZQUFtQztRQUM5RCxJQUFJO1lBQ0Esa0RBQWtEO1lBQ2xELElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1NBQ25GO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLHdFQUF3RSxRQUFRLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQTtTQUN0RztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFlBQWtDO1FBQ3JDLElBQUk7WUFDQSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMzQjtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUN2RjtJQUNMLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxZQUFZO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQzFCLElBQUksR0FBRyxFQUFFO2dCQUNMLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3hCLE9BQU87YUFDVjtZQUNELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN0QixJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqQjtZQUNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM5RCxZQUFZLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FBQztRQUNGLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxZQUFZO1FBQ25DLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDcEIsSUFBSTtnQkFDQSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3JCO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNqQjtRQUNMLENBQUMsQ0FBQztRQUNGLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsYUFBYSxDQUFDLEdBQUc7UUFDYixHQUFHLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7UUFFckYsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0NBQ0o7QUFFRCxTQUFTLGdCQUFnQixDQUFDLFFBQWdCLEVBQUUsT0FBZSxFQUFFLE1BQTRCLEVBQUUsV0FBZ0MsRUFBRSxPQUFxQixFQUFFLFlBQXFCLEtBQUs7SUFDMUssSUFBSSxTQUFTLEVBQUU7UUFDWCxNQUFNLFFBQVEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDcEYsT0FBTyxRQUFRLENBQUM7S0FDbkI7SUFFRCxJQUFJLENBQUMsY0FBYyxFQUFFO1FBQ2pCLGNBQWMsR0FBRyxJQUFJLGFBQWEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDdkY7SUFDRCxPQUFPLGNBQWMsQ0FBQztBQUMxQixDQUFDO0FBRUQsa0JBQWUsZ0JBQWdCLENBQUMifQ== \ No newline at end of file diff --git a/lib/producer.d.ts b/lib/producer.d.ts index c5f7cb6..7f4f69e 100644 --- a/lib/producer.d.ts +++ b/lib/producer.d.ts @@ -51,5 +51,5 @@ declare class KafkaProducer extends Client { */ disconnect(postDisconnectAction?: (err: any, data: ClientMetrics) => any): this; } -declare function getKafkaProducer(clientId: string, config: ProducerGlobalConfig, topicConfig: ProducerTopicConfig, emitter: EventEmitter): KafkaProducer; +declare function getKafkaProducer(clientId: string, config: ProducerGlobalConfig, topicConfig: ProducerTopicConfig, emitter: EventEmitter, createNew?: boolean): KafkaProducer; export default getKafkaProducer; diff --git a/lib/producer.js b/lib/producer.js index 1d1710a..f47a967 100644 --- a/lib/producer.js +++ b/lib/producer.js @@ -123,11 +123,15 @@ class KafkaProducer extends client_1.default { return this; } } -function getKafkaProducer(clientId, config, topicConfig, emitter) { +function getKafkaProducer(clientId, config, topicConfig, emitter, createNew = false) { + if (createNew) { + const producer = new KafkaProducer(clientId, config, topicConfig, emitter); + return producer; + } if (!_kafkaProducer) { _kafkaProducer = new KafkaProducer(clientId, config, topicConfig, emitter); } return _kafkaProducer; } exports.default = getKafkaProducer; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvZHVjZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxnRUFBaUo7QUFDakosc0RBQXlEO0FBVXpELElBQUksY0FBYyxHQUFrQixJQUFJLENBQUM7QUFFekMsTUFBTSxhQUFjLFNBQVEsZ0JBQU07SUFDdEIsUUFBUSxDQUFpQjtJQUVqQzs7Ozs7O09BTUc7SUFDSCxZQUFZLFFBQWdCLEVBQUUsTUFBNEIsRUFBRSxXQUFnQyxFQUFFLE9BQXFCO1FBQy9HLDJDQUEyQztRQUMzQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNuQixrQkFBa0IsRUFBRSxHQUFHO1lBQ3ZCLDBCQUEwQixFQUFFLEVBQUU7WUFDOUIsOEJBQThCLEVBQUUsTUFBTTtZQUN0Qyx3QkFBd0IsRUFBRSxJQUFJO1lBQzlCLG9CQUFvQixFQUFFLE9BQU87WUFDN0IsT0FBTyxFQUFFLElBQUk7U0FDZCxFQUNELE1BQU0sQ0FDUCxDQUFDO1FBQ0YsaURBQWlEO1FBQ2pELFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFHLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRXpELEtBQUssQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHNCQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE9BQU87UUFDSCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLElBQUk7Z0JBQ0EsSUFBSSxDQUFDLFFBQVE7cUJBQ1osT0FBTyxFQUFFO3FCQUNULEVBQUUsQ0FB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJvZHVjZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxnRUFBaUo7QUFDakosc0RBQXlEO0FBVXpELElBQUksY0FBYyxHQUFrQixJQUFJLENBQUM7QUFFekMsTUFBTSxhQUFjLFNBQVEsZ0JBQU07SUFDdEIsUUFBUSxDQUFpQjtJQUVqQzs7Ozs7O09BTUc7SUFDSCxZQUFZLFFBQWdCLEVBQUUsTUFBNEIsRUFBRSxXQUFnQyxFQUFFLE9BQXFCO1FBQy9HLDJDQUEyQztRQUMzQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNuQixrQkFBa0IsRUFBRSxHQUFHO1lBQ3ZCLDBCQUEwQixFQUFFLEVBQUU7WUFDOUIsOEJBQThCLEVBQUUsTUFBTTtZQUN0Qyx3QkFBd0IsRUFBRSxJQUFJO1lBQzlCLG9CQUFvQixFQUFFLE9BQU87WUFDN0IsT0FBTyxFQUFFLElBQUk7U0FDZCxFQUNELE1BQU0sQ0FDUCxDQUFDO1FBQ0YsaURBQWlEO1FBQ2pELFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFHLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRXpELEtBQUssQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHNCQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE9BQU87UUFDSCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLElBQUk7Z0JBQ0EsSUFBSSxDQUFDLFFBQVE7cUJBQ1osT0FBTyxFQUFFO3FCQUNULEVBQUUsQ0FB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 \ No newline at end of file diff --git a/package.json b/package.json index 4bd4a45..2aa1356 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "node-rdkafka": "^2.12.0" }, "devDependencies": { - "@types/node": "^17.0.21", - "typescript": "^4.6.2" + "@types/node": "17.0.21", + "typescript": "4.6.2" } } From cca14f20293c7165bc9b06480a4024fbf44b4736 Mon Sep 17 00:00:00 2001 From: Akshendra Pratap Singh Date: Thu, 1 Jun 2023 11:20:17 +0530 Subject: [PATCH 12/14] update package name to @quiziz namespace --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2aa1356..f70f459 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "kafka-wrapper", + "name": "@quizizz/kafka", "version": "1.0.2", "description": "A simple kafka client to produce and consume messages to/from kafka cluster.", "main": "lib/index.js", From eaa26e88c0a699f8c9a90de38ad6055b33d3c19a Mon Sep 17 00:00:00 2001 From: Perseus Date: Wed, 27 Mar 2024 21:20:07 +0530 Subject: [PATCH 13/14] bump node-rdkafka version --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index f70f459..7709cee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@quizizz/kafka", - "version": "1.0.2", + "version": "1.0.3", "description": "A simple kafka client to produce and consume messages to/from kafka cluster.", "main": "lib/index.js", "scripts": { @@ -18,7 +18,7 @@ ], "license": "ISC", "dependencies": { - "node-rdkafka": "^2.12.0" + "node-rdkafka": "^2.18.0" }, "devDependencies": { "@types/node": "17.0.21", From 8f35fa4cc35258e0668b26ec9a85f297ce46fc78 Mon Sep 17 00:00:00 2001 From: Anirudh Date: Mon, 26 May 2025 12:41:04 +0000 Subject: [PATCH 14/14] (chore): migrate to using confluent's kafka library --- README.md | 2 +- lib/admin.d.ts | 2 +- lib/admin.js | 2 +- lib/client.d.ts | 2 +- lib/consumer.d.ts | 10 +++++----- lib/consumer.js | 10 +++++----- lib/index.d.ts | 2 +- lib/producer.d.ts | 14 +++++++------- lib/producer.js | 14 +++++++------- package.json | 2 +- src/admin.ts | 2 +- src/client.ts | 2 +- src/consumer.ts | 10 +++++----- src/index.ts | 2 +- src/producer.ts | 14 +++++++------- 15 files changed, 45 insertions(+), 45 deletions(-) diff --git a/README.md b/README.md index ef871ef..dd19a25 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ # kafka-wrapper -A simple kafka wrapper for `node-rdkafka` client. +A simple kafka wrapper for `@confluentinc/kafka-javascript` client. diff --git a/lib/admin.d.ts b/lib/admin.d.ts index b9ad2ad..18561cf 100644 --- a/lib/admin.d.ts +++ b/lib/admin.d.ts @@ -1,6 +1,6 @@ /// import Client from './client'; -import { GlobalConfig } from 'node-rdkafka'; +import { GlobalConfig } from '@confluentinc/kafka-javascript'; import EventEmitter from 'events'; declare class KafkaAdmin extends Client { private adminClient; diff --git a/lib/admin.js b/lib/admin.js index 366ef87..f5c58ab 100644 --- a/lib/admin.js +++ b/lib/admin.js @@ -4,7 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); const client_1 = __importDefault(require("./client")); -const node_rdkafka_1 = require("node-rdkafka"); +const node_rdkafka_1 = require("@confluentinc/kafka-javascript"); class KafkaAdmin extends client_1.default { adminClient; /** diff --git a/lib/client.d.ts b/lib/client.d.ts index 5ffe469..db8804b 100644 --- a/lib/client.d.ts +++ b/lib/client.d.ts @@ -1,6 +1,6 @@ /// import EventEmitter from "events"; -import { GlobalConfig, LibrdKafkaError, TopicConfig } from "node-rdkafka"; +import { GlobalConfig, LibrdKafkaError, TopicConfig } from "@confluentinc/kafka-javascript"; export default class Client { private clientId; private clientType; diff --git a/lib/consumer.d.ts b/lib/consumer.d.ts index 2c1a645..20c1301 100644 --- a/lib/consumer.d.ts +++ b/lib/consumer.d.ts @@ -1,5 +1,5 @@ /// -import { ConsumerGlobalConfig, ConsumerTopicConfig, LibrdKafkaError, Message, SubscribeTopicList } from 'node-rdkafka'; +import { ConsumerGlobalConfig, ConsumerTopicConfig, LibrdKafkaError, Message, SubscribeTopicList } from '@confluentinc/kafka-javascript'; import { EventEmitter } from 'stream'; import Client from './client'; export declare type ConsumeActionFunction = (err: LibrdKafkaError, messages: Message[]) => void; @@ -10,8 +10,8 @@ declare class KafkaConsumer extends Client { * Initializes a KafkaConsumer. * @param {String} clientId: id to identify a client consuming the message. * @param {String} groupId: consumer group id, the consumer belongs to. - * @param {import('node-rdkafka').ConsumerGlobalConfig} config: configs for consumer. - * @param {import('node-rdkafka').ConsumerTopicConfig} topicConfig: topic configs + * @param {import('@confluentinc/kafka-javascript').ConsumerGlobalConfig} config: configs for consumer. + * @param {import('@confluentinc/kafka-javascript').ConsumerTopicConfig} topicConfig: topic configs * @param {EventEmitter} emitter: to emit log events */ constructor(clientId: string, groupId: string, config: ConsumerGlobalConfig, topicConfig: ConsumerTopicConfig, emitter: EventEmitter); @@ -24,7 +24,7 @@ declare class KafkaConsumer extends Client { connect(): Promise; /** * Subscribe to topics. - * @param {import('node-rdkafka').SubscribeTopicList} topics: array of topic names. + * @param {import('@confluentinc/kafka-javascript').SubscribeTopicList} topics: array of topic names. * @returns {KafkaConsumer} */ subscribe(topics: SubscribeTopicList): this; @@ -62,7 +62,7 @@ declare class KafkaConsumer extends Client { _wrapListenCallbackWrapper(actionOnData: any): (msg: any) => void; /** * Parses message before passing it to consumer callback. - * @param {Object} msg - expects it to be in node-rdkafka msg format. + * @param {Object} msg - expects it to be in @confluentinc/kafka-javascript msg format. * @returns */ _parseMessage(msg: any): any; diff --git a/lib/consumer.js b/lib/consumer.js index 612463b..cc6a2d8 100644 --- a/lib/consumer.js +++ b/lib/consumer.js @@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -const node_rdkafka_1 = __importDefault(require("node-rdkafka")); +const node_rdkafka_1 = __importDefault(require("@confluentinc/kafka-javascript")); const client_1 = __importDefault(require("./client")); let _kafkaConsumer = null; class KafkaConsumer extends client_1.default { @@ -12,8 +12,8 @@ class KafkaConsumer extends client_1.default { * Initializes a KafkaConsumer. * @param {String} clientId: id to identify a client consuming the message. * @param {String} groupId: consumer group id, the consumer belongs to. - * @param {import('node-rdkafka').ConsumerGlobalConfig} config: configs for consumer. - * @param {import('node-rdkafka').ConsumerTopicConfig} topicConfig: topic configs + * @param {import('@confluentinc/kafka-javascript').ConsumerGlobalConfig} config: configs for consumer. + * @param {import('@confluentinc/kafka-javascript').ConsumerTopicConfig} topicConfig: topic configs * @param {EventEmitter} emitter: to emit log events */ constructor(clientId, groupId, config, topicConfig, emitter) { @@ -74,7 +74,7 @@ class KafkaConsumer extends client_1.default { } /** * Subscribe to topics. - * @param {import('node-rdkafka').SubscribeTopicList} topics: array of topic names. + * @param {import('@confluentinc/kafka-javascript').SubscribeTopicList} topics: array of topic names. * @returns {KafkaConsumer} */ subscribe(topics) { @@ -178,7 +178,7 @@ class KafkaConsumer extends client_1.default { } /** * Parses message before passing it to consumer callback. - * @param {Object} msg - expects it to be in node-rdkafka msg format. + * @param {Object} msg - expects it to be in @confluentinc/kafka-javascript msg format. * @returns */ _parseMessage(msg) { diff --git a/lib/index.d.ts b/lib/index.d.ts index 9e228de..21a4953 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -1,7 +1,7 @@ import getKafkaProducer, { ProduceParameters } from './producer'; import getKafkaConsumer, { ConsumeActionFunction, ListenActionFunction } from './consumer'; import KafkaAdmin from './admin'; -import { ClientMetrics, LibrdKafkaError, NumberNullUndefined, SubscribeTopicList } from 'node-rdkafka'; +import { ClientMetrics, LibrdKafkaError, NumberNullUndefined, SubscribeTopicList } from '@confluentinc/kafka-javascript'; import { ErrorHandlingFunction } from './client'; interface KafkaConsumer { connect(): Promise; diff --git a/lib/producer.d.ts b/lib/producer.d.ts index 7f4f69e..ad1d7ce 100644 --- a/lib/producer.d.ts +++ b/lib/producer.d.ts @@ -1,6 +1,6 @@ /// import EventEmitter from 'events'; -import { ClientMetrics, LibrdKafkaError, MessageKey, NumberNullUndefined, ProducerGlobalConfig, ProducerTopicConfig } from 'node-rdkafka'; +import { ClientMetrics, LibrdKafkaError, MessageKey, NumberNullUndefined, ProducerGlobalConfig, ProducerTopicConfig } from '@confluentinc/kafka-javascript'; import Client, { ErrorHandlingFunction } from './client'; export interface ProduceParameters { topic: string; @@ -14,8 +14,8 @@ declare class KafkaProducer extends Client { /** * Initializes a KafkaProducer. * @param {String} clientId: id to identify a client producing the message. - * @param {import('node-rdkafka').ProducerGlobalConfig} config: configs for producer. - * @param {import('node-rdkafka').ProducerTopicConfig} topicConfig: topic configs. + * @param {import('@confluentinc/kafka-javascript').ProducerGlobalConfig} config: configs for producer. + * @param {import('@confluentinc/kafka-javascript').ProducerTopicConfig} topicConfig: topic configs. * @param {EventEmitter} emitter: to emit log messages */ constructor(clientId: string, config: ProducerGlobalConfig, topicConfig: ProducerTopicConfig, emitter: EventEmitter); @@ -29,17 +29,17 @@ declare class KafkaProducer extends Client { /** * Produce a message to a topic-partition. * @param {String} topic: name of topic - * @param {import('node-rdkafka').NumberNullUndefined} partition: partition number to produce to. + * @param {import('@confluentinc/kafka-javascript').NumberNullUndefined} partition: partition number to produce to. * @param {any} message: message to be produced. - * @param {import('node-rdkafka').MessageKey} key: key associated with the message. - * @param {import('node-rdkafka').NumberNullUndefined} timestamp: timestamp to send with the message. + * @param {import('@confluentinc/kafka-javascript').MessageKey} key: key associated with the message. + * @param {import('@confluentinc/kafka-javascript').NumberNullUndefined} timestamp: timestamp to send with the message. * @returns {import('../types').BooleanOrNumber}: returns boolean or librdkafka error code. */ produce({ topic, message, partition, key, timestamp }: ProduceParameters): boolean | number; /** * Flush everything on the internal librdkafka buffer. * Good to perform before disconnect. - * @param {import('node-rdkafka').NumberNullUndefined}} timeout + * @param {import('@confluentinc/kafka-javascript').NumberNullUndefined}} timeout * @param {import('../types').ErrorHandlingFunction} postFlushAction * @returns {KafkaProducer} */ diff --git a/lib/producer.js b/lib/producer.js index f47a967..cf3b2e4 100644 --- a/lib/producer.js +++ b/lib/producer.js @@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); -const node_rdkafka_1 = __importDefault(require("node-rdkafka")); +const node_rdkafka_1 = __importDefault(require("@confluentinc/kafka-javascript")); const client_1 = __importDefault(require("./client")); let _kafkaProducer = null; class KafkaProducer extends client_1.default { @@ -11,8 +11,8 @@ class KafkaProducer extends client_1.default { /** * Initializes a KafkaProducer. * @param {String} clientId: id to identify a client producing the message. - * @param {import('node-rdkafka').ProducerGlobalConfig} config: configs for producer. - * @param {import('node-rdkafka').ProducerTopicConfig} topicConfig: topic configs. + * @param {import('@confluentinc/kafka-javascript').ProducerGlobalConfig} config: configs for producer. + * @param {import('@confluentinc/kafka-javascript').ProducerTopicConfig} topicConfig: topic configs. * @param {EventEmitter} emitter: to emit log messages */ constructor(clientId, config, topicConfig, emitter) { @@ -75,10 +75,10 @@ class KafkaProducer extends client_1.default { /** * Produce a message to a topic-partition. * @param {String} topic: name of topic - * @param {import('node-rdkafka').NumberNullUndefined} partition: partition number to produce to. + * @param {import('@confluentinc/kafka-javascript').NumberNullUndefined} partition: partition number to produce to. * @param {any} message: message to be produced. - * @param {import('node-rdkafka').MessageKey} key: key associated with the message. - * @param {import('node-rdkafka').NumberNullUndefined} timestamp: timestamp to send with the message. + * @param {import('@confluentinc/kafka-javascript').MessageKey} key: key associated with the message. + * @param {import('@confluentinc/kafka-javascript').NumberNullUndefined} timestamp: timestamp to send with the message. * @returns {import('../types').BooleanOrNumber}: returns boolean or librdkafka error code. */ produce({ topic, message, partition = null, key = null, timestamp = null }) { @@ -95,7 +95,7 @@ class KafkaProducer extends client_1.default { /** * Flush everything on the internal librdkafka buffer. * Good to perform before disconnect. - * @param {import('node-rdkafka').NumberNullUndefined}} timeout + * @param {import('@confluentinc/kafka-javascript').NumberNullUndefined}} timeout * @param {import('../types').ErrorHandlingFunction} postFlushAction * @returns {KafkaProducer} */ diff --git a/package.json b/package.json index 7709cee..fe029df 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ ], "license": "ISC", "dependencies": { - "node-rdkafka": "^2.18.0" + "@confluentinc/kafka-javascript": "^1.3.1" }, "devDependencies": { "@types/node": "17.0.21", diff --git a/src/admin.ts b/src/admin.ts index 2389b11..8705419 100644 --- a/src/admin.ts +++ b/src/admin.ts @@ -1,5 +1,5 @@ import Client from './client'; -import { AdminClient, GlobalConfig } from 'node-rdkafka'; +import { AdminClient, GlobalConfig } from '@confluentinc/kafka-javascript'; import EventEmitter from 'events'; class KafkaAdmin extends Client { diff --git a/src/client.ts b/src/client.ts index 261caac..e5d0c14 100644 --- a/src/client.ts +++ b/src/client.ts @@ -1,5 +1,5 @@ import EventEmitter from "events"; -import { GlobalConfig, LibrdKafkaError, TopicConfig } from "node-rdkafka"; +import { GlobalConfig, LibrdKafkaError, TopicConfig } from "@confluentinc/kafka-javascript"; export default class Client { constructor(private clientId: string, diff --git a/src/consumer.ts b/src/consumer.ts index c5218c1..f9e43a0 100644 --- a/src/consumer.ts +++ b/src/consumer.ts @@ -1,4 +1,4 @@ -import Kafka, { ConsumerGlobalConfig, ConsumerTopicConfig, LibrdKafkaError, Message, SubscribeTopicList } from 'node-rdkafka'; +import Kafka, { ConsumerGlobalConfig, ConsumerTopicConfig, LibrdKafkaError, Message, SubscribeTopicList } from '@confluentinc/kafka-javascript'; import { EventEmitter } from 'stream'; import Client from './client'; @@ -15,8 +15,8 @@ class KafkaConsumer extends Client { * Initializes a KafkaConsumer. * @param {String} clientId: id to identify a client consuming the message. * @param {String} groupId: consumer group id, the consumer belongs to. - * @param {import('node-rdkafka').ConsumerGlobalConfig} config: configs for consumer. - * @param {import('node-rdkafka').ConsumerTopicConfig} topicConfig: topic configs + * @param {import('@confluentinc/kafka-javascript').ConsumerGlobalConfig} config: configs for consumer. + * @param {import('@confluentinc/kafka-javascript').ConsumerTopicConfig} topicConfig: topic configs * @param {EventEmitter} emitter: to emit log events */ constructor(clientId: string, groupId: string, config: ConsumerGlobalConfig, topicConfig: ConsumerTopicConfig, emitter: EventEmitter) { @@ -80,7 +80,7 @@ class KafkaConsumer extends Client { /** * Subscribe to topics. - * @param {import('node-rdkafka').SubscribeTopicList} topics: array of topic names. + * @param {import('@confluentinc/kafka-javascript').SubscribeTopicList} topics: array of topic names. * @returns {KafkaConsumer} */ subscribe(topics: SubscribeTopicList): this { @@ -185,7 +185,7 @@ class KafkaConsumer extends Client { /** * Parses message before passing it to consumer callback. - * @param {Object} msg - expects it to be in node-rdkafka msg format. + * @param {Object} msg - expects it to be in @confluentinc/kafka-javascript msg format. * @returns */ _parseMessage(msg) { diff --git a/src/index.ts b/src/index.ts index bd26a40..6521f4a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,7 @@ import getKafkaProducer, { ProduceParameters } from './producer' import getKafkaConsumer, { ConsumeActionFunction, ListenActionFunction } from './consumer'; import KafkaAdmin from './admin'; -import { ClientMetrics, LibrdKafkaError, NumberNullUndefined, SubscribeTopicList } from 'node-rdkafka'; +import { ClientMetrics, LibrdKafkaError, NumberNullUndefined, SubscribeTopicList } from '@confluentinc/kafka-javascript'; import { ErrorHandlingFunction } from './client'; interface KafkaConsumer { diff --git a/src/producer.ts b/src/producer.ts index 78cd381..c7e76f2 100644 --- a/src/producer.ts +++ b/src/producer.ts @@ -1,5 +1,5 @@ import EventEmitter from 'events'; -import Kafka, { ClientMetrics, LibrdKafkaError, MessageKey, NumberNullUndefined, ProducerGlobalConfig, ProducerTopicConfig } from 'node-rdkafka'; +import Kafka, { ClientMetrics, LibrdKafkaError, MessageKey, NumberNullUndefined, ProducerGlobalConfig, ProducerTopicConfig } from '@confluentinc/kafka-javascript'; import Client, { ErrorHandlingFunction } from './client'; export interface ProduceParameters{ @@ -18,8 +18,8 @@ class KafkaProducer extends Client { /** * Initializes a KafkaProducer. * @param {String} clientId: id to identify a client producing the message. - * @param {import('node-rdkafka').ProducerGlobalConfig} config: configs for producer. - * @param {import('node-rdkafka').ProducerTopicConfig} topicConfig: topic configs. + * @param {import('@confluentinc/kafka-javascript').ProducerGlobalConfig} config: configs for producer. + * @param {import('@confluentinc/kafka-javascript').ProducerTopicConfig} topicConfig: topic configs. * @param {EventEmitter} emitter: to emit log messages */ constructor(clientId: string, config: ProducerGlobalConfig, topicConfig: ProducerTopicConfig, emitter: EventEmitter) { @@ -85,10 +85,10 @@ class KafkaProducer extends Client { /** * Produce a message to a topic-partition. * @param {String} topic: name of topic - * @param {import('node-rdkafka').NumberNullUndefined} partition: partition number to produce to. + * @param {import('@confluentinc/kafka-javascript').NumberNullUndefined} partition: partition number to produce to. * @param {any} message: message to be produced. - * @param {import('node-rdkafka').MessageKey} key: key associated with the message. - * @param {import('node-rdkafka').NumberNullUndefined} timestamp: timestamp to send with the message. + * @param {import('@confluentinc/kafka-javascript').MessageKey} key: key associated with the message. + * @param {import('@confluentinc/kafka-javascript').NumberNullUndefined} timestamp: timestamp to send with the message. * @returns {import('../types').BooleanOrNumber}: returns boolean or librdkafka error code. */ produce({ topic, message, partition = null, key = null, timestamp = null }: ProduceParameters): boolean | number { @@ -105,7 +105,7 @@ class KafkaProducer extends Client { /** * Flush everything on the internal librdkafka buffer. * Good to perform before disconnect. - * @param {import('node-rdkafka').NumberNullUndefined}} timeout + * @param {import('@confluentinc/kafka-javascript').NumberNullUndefined}} timeout * @param {import('../types').ErrorHandlingFunction} postFlushAction * @returns {KafkaProducer} */