@awesomeniko/kafka-trail
Version:
A Node.js library for managing message queue with Kafka
43 lines • 1.52 kB
JavaScript
import KafkaJS from "kafkajs";
import { lz4Codec } from "../codec/lz4-codec.js";
const { Kafka, CompressionTypes, CompressionCodecs } = KafkaJS;
let registeredLz4CodecFn;
const ensureLz4CodecRegistered = (codecFn) => {
const resolvedCodecFn = codecFn ?? lz4Codec;
if (!registeredLz4CodecFn) {
CompressionCodecs[CompressionTypes.LZ4] = () => resolvedCodecFn;
registeredLz4CodecFn = resolvedCodecFn;
return;
}
if (registeredLz4CodecFn !== resolvedCodecFn) {
throw new Error("LZ4 codec is already registered with a different implementation");
}
};
class KTKafkaBroker {
_kafka;
constructor(params) {
const clientId = params.kafkaSettings.clientId ?? `consumer-${Date.now()}`;
const { brokerUrls, connectionTimeout } = params.kafkaSettings;
const { compressionCodec } = params.kafkaSettings;
if (!compressionCodec || compressionCodec.codecType === CompressionTypes.LZ4) {
ensureLz4CodecRegistered(compressionCodec?.codecFn);
}
if (!Array.isArray(brokerUrls)) {
throw new Error("KafkaBrokerUrls must be an array");
}
this._kafka = new Kafka({
clientId,
brokers: brokerUrls,
connectionTimeout,
...params.pureConfig,
});
}
encode(message) {
return JSON.stringify(message);
}
decode(message) {
return JSON.parse(message);
}
}
export { KTKafkaBroker };
//# sourceMappingURL=kafka-broker.js.map