Nodejs 第八十章(Kafka高级)

在这里插入图片描述

kafka前置知识在前几章章讲过了 不再复述

Kafka集群操作

1.创建多个kafka服务

拷贝一份kafka完整目录改名为kafka2

修改配置文件 kafka2/config/server.properties 这个文件

broker.id=1 //唯一broker
port=9093 //切换端口
listeners=PLAINTEXT://:9093 //切换监听源

启动zooKeeper和kafka和kafka2

.\bin\windows\kafka-server-start.bat .\config\server.properties

2.客户端管理

查看集群信息和客户端对象

import { Kafka, CompressionTypes } from 'kafkajs'

const kafka = new Kafka({
    clientId: 'my-app', //客户端标识
    brokers: ['localhost:9092', 'localhost:9093'], //kafka集群
})

const admin = kafka.admin() //创建admin对象
await admin.connect() //连接kafka
const cluster = await admin.describeCluster() //获取集群信息

返回值 可以查看连接集群的信息比如端口id等

{
  brokers: [
    { nodeId: 0, host: '26.26.26.1', port: 9092 },
    { nodeId: 1, host: '26.26.26.1', port: 9093 }
  ],
  controller: 0,
  clusterId: 'XHa77me4TZWO8cfWSTHoaQ'
}

创建主题createTopics将解析true主题是否已成功创建或false是否已存在。如果发生错误,该方法将抛出异常

删除主题admin.deleteTopics 传入删除的主题

查看主题列表listTopics列出所有现有主题的名称,并返回一个字符串数组。如果发生错误,该方法将抛出异常`

//创建主题
await admin.createTopics({
    topics: [
        { topic: 'xiaoman', numPartitions: 1, replicationFactor: 1 },
        { topic: 'xiaoman2', numPartitions: 1, replicationFactor: 1 },
    ],
})
//删除主题
await admin.deleteTopics({ topics: ['xiaoman', 'xiaoman2'] })
//查看主题
await admin.listTopics().then(topics => {
    console.log('topics', topics)
})
3.事务

KafkaJS 提供了对 Kafka 事务的支持,可以使用它来执行具有事务特性的操作。Kafka 事务用于确保一组相关的消息要么全部成功提交要么全部回滚,从而保持数据的一致性

import { Kafka, CompressionTypes } from 'kafkajs'

const kafka = new Kafka({
    clientId: 'my-app', //客户端标识
    brokers: ['localhost:9092', 'localhost:9093'], //kafka集群
})

//生产者
const producer = kafka.producer({
    transactionalId: '填写事务ID',
    maxInFlightRequests: 1, //最大同时发送请求数
    idempotent: true, //是否开启幂等提交
})
//连接服务器
await producer.connect()

const transaction = await producer.transaction()
try {
    await transaction.send({
        topic: 'xiaoman',
        messages: [{ value: '100元' }],
    })
    await transaction.commit() // 事务提交
}
catch (e) {
    console.log(e)
    await transaction.abort() // 事务提交失败,回滚
}
await admin.disconnect()

相关推荐

  1. NodeJs 数据抓取(爬虫)

    2024-07-15 11:20:02       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-15 11:20:02       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-15 11:20:02       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-15 11:20:02       62 阅读
  4. Python语言-面向对象

    2024-07-15 11:20:02       72 阅读

热门阅读

  1. Ionic 加载动画

    2024-07-15 11:20:02       20 阅读
  2. Yolo,输出的参数的含义

    2024-07-15 11:20:02       31 阅读
  3. 切换node版本

    2024-07-15 11:20:02       22 阅读
  4. 墨烯的C语言技术栈-C语言基础-014

    2024-07-15 11:20:02       23 阅读
  5. 从零手写实现 nginx-28-error pages 指令

    2024-07-15 11:20:02       26 阅读
  6. 什么是JVM进程

    2024-07-15 11:20:02       28 阅读
  7. PHP7.4编译安装

    2024-07-15 11:20:02       21 阅读
  8. GBNF Guide

    2024-07-15 11:20:02       24 阅读
  9. IT6161: MIPI to HDMI Converter

    2024-07-15 11:20:02       29 阅读
  10. 2718. 查询后矩阵的和

    2024-07-15 11:20:02       24 阅读