Nodejs 第七十八章(Kafla)

什么是Kafka?

Kafka 的主要设计目标是提供一个可持久化的、高吞吐量的、容错的消息传递系统。它允许你以发布-订阅的方式发送和接收流数据,并且可以处理大量的消息,同时保持低延迟。Kafka 的设计还强调了分布式的特性,使得它可以在大规模集群中运行,处理大量数据和高并发的请求

kafka架构

  1. Producer:生产者,消息的产生者,是消息的入口
  2. Broker:Broker 是 kafka 一个实例,每个服务器上有一个或多个 kafka 的实例,简单的理解就是一台 kafka 服务器,kafka cluster表示集群的意思
  3. Topic:消息的主题,可以理解为消息队列,kafka的数据就保存在topic。在每个 broker 上都可以创建多个 topic 。
  4. Partition:Topic的分区,每个 topic 可以有多个分区,分区的作用是做负载,提高 kafka 的吞吐量。同一个 5. topic 在不同的分区的数据是不重复的,partition 的表现形式就是一个一个的文件夹
  5. Message:每一条发送的消息主体。
  6. Consumer:消费者,即消息的消费方,是消息的出口。
  7. Consumer Group:我们可以将多个消费组组成一个消费者组,在 kafka 的设计中同一个分区的数据只能被消费者组中的某一个消费者消费。同一个消费者组的消费者可以消费同一个topic的不同分区的数据,这也是为了提高kafka的吞吐量!
  8. Zookeeper:kafka 集群依赖 zookeeper 来保存集群的的元信息,来保证系统的可用性

安装Kafka

安装JDK 因为Kafka用了java编写

java官网 www.oracle.com/java/techno...
新版安装成功后无需配置环境变量自己就配好了,旧版本则需手动配置一下 如同rabbiteMQ 那一章节一样

注意点 需要在环境变量配置 JAVA_HOME 因为zookeeper 要读取这个环境变量 这个是必须的

测试是否安装成功

sh 复制代码
java --version

安装ZooKeeper

因为Kafka也用到了ZooKeeper

ZooKeeper 官网 zookeeper.apache.org/releases.ht...

  1. 把 apache-zookeeper-3.9.2-bin.tar.gz 解压到你喜欢的目录 重命名 zookeeper
  2. 打开 zookeeper\conf ,把zoo_sample.cfg重命名成zoo.cfg
  3. 打开 zoo.cfg 修改 dataDir 改成 ./zookeeper/data
  4. D:\Applaaction\zookeeper\bin(例子) 配置到环境变量里面
  5. 启动 打开cmd 执行 zkServer (启动完成之后不要关闭)

安装Kafka

Kafka 官网 kafka.apache.org/

  1. 把下载好的文件解压到你喜欢的目录里面
  2. 把kafka文件夹名字 重新命名更短的名字 否则后面执行命令会报错(因为cmd不能支持很长的命令)
  3. 打开kafka/config/server.properties 文件 修改 log.dirs 改为 log.dirs=./logs
  4. 启动kafka 在kafka根目录执行 以下命令
sh 复制代码
.\bin\windows\kafka-server-start.bat .\config\server.properties

Nodejs 编写基本用例测试kafka

安装依赖 kafkajs 官网 kafka.js.org/docs/gettin...

sh 复制代码
npm i kafkajs

生产者(也就是发送方)

js 复制代码
// 导入所需的模块
import { Kafka } from 'kafkajs'

// 创建一个 Kafka 实例,配置客户端ID和代理服务器地址(broker)
const kafka = new Kafka({
    clientId: 'xiaoMan', // 客户端ID,用于在 Kafka 中标识此客户端
    brokers: ['localhost:9092'] // 代理服务器地址(broker),这里使用本地地址和默认端口
})

// 创建一个生产者实例
const producer = await kafka.producer()

// 连接到 Kafka 代理服务器
await producer.connect()

// 发送消息到指定主题
await producer.send({
    topic: 'task-1', // 指定要发送消息的主题
    messages: [
        { value: '这是一条测试数据' } // 要发送的消息内容
    ]
})

// 断开与 Kafka 代理服务器的连接
await producer.disconnect()

消费者(也就是接受消息的一方)

js 复制代码
// 导入所需的模块
import { Kafka } from 'kafkajs'

// 创建一个 Kafka 实例,配置客户端ID和代理服务器地址(broker)
const kafka = new Kafka({
    clientId: 'xiaoMan', // 客户端ID,用于在 Kafka 中标识此客户端
    brokers: ['localhost:9092'] // 代理服务器地址(broker),这里使用本地地址和默认端口
})

// 创建一个消费者实例,指定消费者组ID
const consumer = await kafka.consumer({ groupId: 'my-group' })

// 连接到 Kafka 代理服务器
await consumer.connect()

// 订阅指定主题的消息,从头开始消费
await consumer.subscribe({ topic: 'task-1', fromBeginning: true })

// 启动消费者并处理每条消息
await consumer.run({
    eachMessage: async ({ topic, partition, message }) => {
        console.log({
            value: message.value.toString(),
        })
    },
})

测试案例

相关推荐
aa小小15 分钟前
Proxy 响应式原理
前端·proxy
计算机魔术师16 分钟前
Latent Space 访谈 TypeSafe CEO Diogo Almeida:Jev 是面向生产环境的 System One 模型而非万能 God 模型
前端
yzy8533 分钟前
Vue中下载或打开文件的JavaScript方法
前端·javascript·vue
用户298698530141 小时前
在 React 中用 JavaScript 将 Word 转换为文本
前端·javascript·react.js
计算机魔术师1 小时前
马斯克称 Grok 4.7 使 xAI 在智能体编码领域位列第三
前端
摸鱼仙人~1 小时前
前端秋招异步手写题系统刷题路线:从 Promise 到 Pipeline、LazyMan 与并发控制
前端
秋天的一阵风1 小时前
⚡上线 24 小时,13% 的付费团队连夜换到 Jev:它到底什么来头?
前端·人工智能·ai编程
程序员若风1 小时前
CSRF攻击原理介绍和利用-腾讯云开发者社区
前端·网络·安全·web安全·网络安全·csrf攻击·腾讯云开发者社区
风尘小子1 小时前
node.js系列:process配置
前端·node.js
恋猫de小郭1 小时前
AndroidX 新增 Security State ,支持可编程的系统安全状态查询
android·前端·flutter