如何将Kafka与Node.js集成?
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
Kafka 是一个功能强大的开源流处理平台,近年来因其能够处理海量数据和实时流处理场景而日益流行。另一方面,Node.js 是一个基于 Chrome V8 JavaScript 引擎的 JavaScript 运行时环境,以其构建可扩展、高性能网络应用程序的能力而闻名。在本篇博文中,我们将探讨如何将 Kafka 和 Node.js 结合使用,构建能够处理海量数据和流量的高效实时数据处理系统。
👋 你也可以在领英上查看我的每周帖子。
要求:
- 具备 Node.js 基础知识
- Docker基础知识
- 具备 JavaScript 基础知识
我们将采取以下措施:
- 设置 Kafka。
- 设置两个Node.js应用程序:一个用于生产者,一个用于消费者。
- 发送来自生产者的消息并消费它
- 场景:当创建生产者时,消费者中将自动创建一个用户。
讨论一些关键术语:
- 生产者:生产者是一个将数据写入 Kafka 集群的程序。生产者会向一个或多个主题发送消息。
- 消费者:消费者是从 Kafka 集群读取数据的程序。
- 代理:代理是 Kafka 服务器,用于存储和提供数据。
- 主题:主题是生产者和消费者沟通的渠道。
- 分区:分区是主题中数据存储的单元。每个主题被划分为一个或多个分区。
我们来玩游戏吧:
首先,我们将安装 Kafka。
-
安装 Docker:Kafka 通常运行在 Docker 容器中,因此如果您的系统尚未安装 Docker,则需要先安装它。请按照适用于您操作系统的说明安装 Docker。
-
我们需要两个 Docker 镜像:
- 香肠大师/动物园管理员
- 香肠大师/卡夫卡
1️⃣ 创建一个 docker-compose.yml 文件,并在其中添加以下内容。
version: "3"
services:
zookeeper:
image: 'wurstmeister/zookeeper:latest'
ports:
- '2181:2181'
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
kafka:
image: 'wurstmeister/kafka:latest'
ports:
- '9092:9092'
environment:
- KAFKA_BROKER_ID=1
- KAFKA_LISTENERS=PLAINTEXT://:9092
- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092
- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
- ALLOW_PLAINTEXT_LISTENER=yes
depends_on:
- zookeeper
2️⃣ 运行以下命令启动容器(-d 参数用于在前台启动容器)
docker-compose up -d
3️⃣ 启动 Kafka shell:(将 kafka_kafka_1 替换为您的容器名称)
docker exec -it <u>kafka_kafka_1</u> /bin/sh
4️⃣ 创建主题:
kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic your-topic-name-here
其他命令行工具:
▪️ kafka-topics.sh --list --zookeeper zookeeper:2181:列出所有主题。▪️
docker ps:显示正在运行的容器。
仅此而已。
下一步:设置两个 Node.js 应用
1️⃣ 创建 package.json 文件:
npm init
2️⃣ 安装软件包:
npm i express nodemon dotenv mongoose kafkajs
3️⃣ 现在我们将配置生产者:
结果: 👇
5️⃣ 通过在消费者配置文件中添加以下内容来配置消费者:
6️⃣ 现在我们开始模拟场景:
首先,创建你的模型、控制器和路由。在控制器中,你必须添加以下两行代码: 就像下面的示例一样:👇import {run} from "../utils/producer.js";
run(response);
7️⃣ 更新我们的制作人:
8️⃣ 更新我们的消费者信息:
结果很棒👏
来自制作人:
来自消费者:
总之,Apache Kafka 是一个强大的分布式流处理平台,支持实时数据处理和流处理应用。它可以通过 Kafka 客户端库与流行的 JavaScript 运行时 Node.js 集成,使开发者能够结合这两种技术构建事件驱动和数据驱动型应用。Kafka 以其可扩展性、高性能和处理海量数据的能力而闻名,是构建健壮且可扩展应用的宝贵工具。然而,它的配置和维护也可能较为复杂,需要对其架构和配置选项有深入的了解才能有效使用。总而言之,Kafka 和 Node.js 的组合可以成为构建高效且可扩展应用的强大工具,对于任何需要实时数据处理或流处理功能的项目都值得考虑。
文章来源:https://dev.to/chafroudtarek/how-to-integrate-kafka-with-nodejs--4bil








