Scale Chat is a scalable chat app backend service utilizing Redis to enhance the scalability of web sockets, while leveraging Kafka to streamline the process of writing messages to the database, avoiding the need for individual write operations.
.
├── README.md
├── github_assets
│ ├── DB Diagram.jpg
│ └── architecture.png
├── package-lock.json
├── package.json
├── prisma
│ ├── ca.pem
│ ├── example_key.pem
│ ├── migrations
│ │ ├── 20240502172518_init
│ │ │ └── migration.sql
│ │ ├── 20240504090739_init
│ │ │ └── migration.sql
│ │ ├── 20240504092402_update_tables
│ │ │ └── migration.sql
│ │ ├── 20240504105700_update_users_table
│ │ │ └── migration.sql
│ │ └── migration_lock.toml
│ └── schema.prisma
├── public
│ ├── auth
│ │ └── index.html
│ └── chat
│ └── index.html
└── src
├── config
│ ├── cookies.config.js
│ ├── kafka.config.js
│ └── redis.config.js
├── controllers
│ ├── message
│ │ └── message.controller.js
│ └── user
│ ├── userAuth.controller.js
│ └── userDetails.controller.js
├── index.js
├── middlewares
│ └── auth.middleware.js
├── routes
│ ├── message.routes.js
│ ├── user.routes.js
│ └── version1.routes.js
├── service
│ ├── cronJob.js
│ ├── kafka
│ │ ├── admin.js
│ │ ├── client.js
│ │ ├── consumer.js
│ │ └── producer.js
│ ├── prisma.js
│ ├── redis.js
│ └── socket.js
└── utils
├── ApiError.js
├── ApiResponse.js
├── asyncHandler.js
├── bcrypt.js
├── constants.js
├── generateChatPair.js
├── jwt.js
└── socketManager.js
git clone https://github.com/anuj-thakur-513/ScaleChat.git
cd ScaleChat
npm install
npm install pm2@latest -g
docker run -p 2181:2181 zookeeper
docker run -p 9092:9092 \
-e KAFKA_ZOOKEEPER_CONNECT=<PRIVATE_IP>:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://<PRIVATE_IP>:9092 \
-e KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 \
confluentinc/cp-kafka
npm run kafka-admin
npm start or npm run dev
pm2 start src/index.js -i max