Skip to content

mrbrunelli/poc-nestjs-cluster-consumer

Repository files navigation

Clusterized NestJS Kafka

POC de uma aplicação escrita com NestJS consumindo várias partições de um tópico no Kafka, de forma paralela, utilizando o módulo Cluster do Node.js. Cada worker processa indivualmente mensagens da partição que se conectou. O ideal é que tenha sempre mais partições do que workers, pois dessa forma é garantido que todos os workers se conectarão à uma ou várias partições.

Como executar

  1. Suba o container do Kafka
docker compose up -d
  1. Instale as dependências
npm install
  1. Execute o projeto
npm run start
  1. Acesse o Kafdrop e crie o tópico "beers-topic" com 5 ou mais partições http://localhost:190001

Utilitários

Recomendo a utilização de um Kafka Client para o envio das mensagens

Referências

Exemplo de mensagens

[
  {
    "key": null,
    "value": {
      "name": "Spaten 300ml",
      "price": 3.99
    },
    "headers": [],
    "keyMeta": {},
    "valueMeta": {}
  },
  {
    "key": null,
    "value": {
      "name": "Colorado 600ml",
      "price": 13.5
    },
    "headers": [],
    "keyMeta": {},
    "valueMeta": {}
  },
  {
    "key": null,
    "value": {
      "name": "Amstel 300ml",
      "price": 3.4
    },
    "headers": [],
    "keyMeta": {},
    "valueMeta": {}
  },
  {
    "key": null,
    "value": {
      "name": "Boa 600ml",
      "price": 6.0
    },
    "headers": [],
    "keyMeta": {},
    "valueMeta": {}
  },
  {
    "key": null,
    "value": {
      "name": "Brahma Duplo Malte 300ml",
      "price": 3.68
    },
    "headers": [],
    "keyMeta": {},
    "valueMeta": {}
  },
  {
    "key": null,
    "value": {
      "name": "Heineken 350ml",
      "price": 5.29
    },
    "headers": [],
    "keyMeta": {},
    "valueMeta": {}
  },
  {
    "key": null,
    "value": {
      "name": "Heineken 5l",
      "price": 109.99
    },
    "headers": [],
    "keyMeta": {},
    "valueMeta": {}
  },
  {
    "key": null,
    "value": {
      "name": "Baden Baden IPA 350ml",
      "price": 6.0
    },
    "headers": [],
    "keyMeta": {},
    "valueMeta": {}
  },
  {
    "key": null,
    "value": {
      "name": "Skol 1l",
      "price": 8.0
    },
    "headers": [],
    "keyMeta": {},
    "valueMeta": {}
  },
  {
    "key": null,
    "value": {
      "name": "Sub Zero 350ml",
      "price": 2.98
    },
    "headers": [],
    "keyMeta": {},
    "valueMeta": {}
  }
]

Releases

No releases published

Packages

No packages published