by ancashoria

Apollo graphql subscriptions over Kafka protocol

138 Stars 35 Forks Last release: 2 months ago (0.4.0) MIT License 49 Commits 3 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:


It implements the PubSubEngine Interface from the graphql-subscriptions package and also the new AsyncIterator interface. It allows you to connect your subscriptions manager to a single Kafka topic used as Pub/Sub communication channel.


npm install graphql-kafka-subscriptions

Mac OS High Sierra / Mojave

OpenSSL has been upgraded in High Sierra and homebrew does not overwrite default system libraries. That means when building node-rdkafka, because you are using openssl, you need to tell the linker where to find it:

export CPPFLAGS=-I/usr/local/opt/openssl/include
export LDFLAGS=-L/usr/local/opt/openssl/lib

Then you can run

npm install
on your application to get it to build correctly.


Initializing the kafka pubsub client

import { KafkaPubSub } from 'graphql-kafka-subscriptions'

export const pubsub = new KafkaPubSub({ topic: 'name-of-the-topic', host: 'INSERT_KAFKA_IP', port: 'INSERT_KAFKA_PORT', globalConfig: {} // options passed directly to the consumer and producer })

Publishing messages to the subcrition

payload = {
  firstName: "John",
  lastName: "Doe"

pubsub.publish('pubSubChannel', payload);

Subscribing to a channel

const onMessage = (payload) => {

const subscription = await pubsub.subscribe('pubSubChannel', onMessage)


Contributions are welcome. Make sure to check the existing issues (including the closed ones) before requesting a feature, reporting a bug or opening a pull requests.

For sending a PR follow:

  1. Fork it (
  2. Create your feature branch (
    git checkout -b my-new-feature
  3. Commit your changes (
    git commit -am 'Add some feature'
  4. Push to the branch (
    git push origin my-new-feature
  5. Create a new Pull Request

Horia Miron notes:

Thanks to davidyaha for graphql-redis-subscriptions which was the main inspiration point for this project.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.