KafkaJS Snappy Codec (TypeScript)

1.0.3 · active · verified Sun Apr 19

kafkajs-snappy-typescript provides a Snappy compression and decompression codec specifically designed for use with KafkaJS, offering strict TypeScript compatibility. This package serves as a type-safe alternative to `tulios/kafkajs-snappy`, aiming to integrate seamlessly into TypeScript-first KafkaJS applications. It leverages Brooooooklyn's `snappy` Node.js compression library for its core compression logic. The current stable version is 1.0.3, primarily consisting of bug fixes and rebundling efforts to ensure proper NPM publication. As a specialized codec, its release cadence is tied to necessary compatibility updates with KafkaJS or its underlying `snappy` dependency, rather than frequent feature additions. Its key differentiator is its explicit focus on strong typing for KafkaJS environments.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to register the Snappy codec with KafkaJS and then use it to send and receive messages with Snappy compression.

import { Kafka, CompressionTypes, CompressionCodecs } from 'kafkajs';
import { SnappyCodec } from 'kafkajs-snappy-typescript';

// Register the Snappy codec with KafkaJS
CompressionCodecs[CompressionTypes.Snappy] = new SnappyCodec().codec;

const kafka = new Kafka({
  clientId: 'my-app',
  brokers: ['localhost:9092'],
});

const producer = kafka.producer();
const consumer = kafka.consumer({ groupId: 'test-group' });

async function run() {
  await producer.connect();
  await consumer.connect();

  await producer.send({
    topic: 'test-topic',
    compression: CompressionTypes.Snappy, // Use Snappy compression
    messages: [
      { value: 'Hello KafkaJS with Snappy!' },
    ],
  });
  console.log('Message sent with Snappy compression.');

  await consumer.subscribe({ topic: 'test-topic', fromBeginning: true });

  await consumer.run({
    eachMessage: async ({ topic, partition, message }) => {
      console.log({
        value: message.value?.toString(),
        headers: message.headers,
      });
    },
  });

  // Disconnect after a short period for demonstration
  setTimeout(async () => {
    await producer.disconnect();
    await consumer.disconnect();
    console.log('Producer and consumer disconnected.');
  }, 5000);
}

run().catch(console.error);

view raw JSON →