Kafka
安装 JDK
Section titled “安装 JDK”必须配置 JAVA_HOME 环境变量
$ java --version安装 ZooKeeper
Section titled “安装 ZooKeeper”$ bin/zkServer.sh start安装 Kafka
Section titled “安装 Kafka”$ bin/kafka-server-start.sh config/server.properties生产者
import { Kafka } from "kafkajs";
const kafka = new Kafka({ clientId: "my-app", brokers: ["localhost:9092"],});
// 创建生产者const producer = kafka.producer();
const run = async () => { // 连接服务器 await producer.connect(); // 发送消息 await producer.send({ topic: "test-topic", messages: [ { value: "Hello KafkaJS user!" }, { value: Buffer.from("Hello KafkaJS") }, ], });
// 关闭生产者 await producer.disconnect();};
run().catch(console.error);消费者
import { Kafka } from "kafkajs";
const kafka = new Kafka({ clientId: "my-app", brokers: ["localhost:9092"],});
// 创建消费者const consumer = kafka.consumer({ groupId: "test-group" });
// 连接服务器await consumer.connect();// 订阅主题// fromBeginning为true时,会从主题的最早消息开始// fromBeginning为false时,会从最新的消息开始await consumer.subscribe({ topic: "test-topic", fromBeginning: true });// 消费消息await consumer.run({ eachMessage: async ({ topic, partition, message }) => { console.log({ topic, partition, value: message.value.toString(), }); },});生产者
import { Kafka, CompressionTypes } from "kafkajs";
const kafka = new Kafka({ clientId: "my-app", brokers: ["localhost:9092"],});
// 创建生产者const producer = kafka.producer();
// 连接服务器await producer.connect();// 发送消息await producer.sendBatch({ topicMessages: [ { topic: "aaa-topic", messages: [{ value: "Hello AAA" }], }, { topic: "bbb-topic", messages: [{ value: "Hello BBB" }], }, ],});
// 关闭生产者await producer.disconnect();process.exit(0);消费者
import { Kafka } from "kafkajs";
const kafka = new Kafka({ clientId: "my-app", brokers: ["localhost:9092"],});
// 创建消费者const consumer = kafka.consumer({ groupId: "test-group" });
// 连接服务器await consumer.connect();// 订阅主题await consumer.subscribe({ topic: "aaa-topic", fromBeginning: true });await consumer.subscribe({ topic: "bbb-topic", fromBeginning: true });
// 批量消费消息await consumer.run({ eachBatch: async ({ batch }) => { console.log(batch); batch.messages.forEach(async (message) => { console.log({ value: message.value.toString(), }); }); },});import { Kafka, CompressionTypes } from "kafkajs";
const kafka = new Kafka({ clientId: "kafka-node", brokers: ["localhost:9092", "localhost:9093"],});
// 创建一个客户端const client = await kafka.admin();awaitclient.connect();
// 查看集群信息const clusterInfo = await client.describeCluster();console.log(clusterInfo);
// 管理主题
// 查看主题const topicsList = await client.listTopics();console.log(topicsList);// 删除主题await client.deleteTopics({ topics: ["aaa-topic", "bbb-topic"] });// 新增主题await client.createTopics({ topics: [ { topic: "aaa-topic", numPartitions: 1, replicationFactor: 1, }, ],});import { Kafka, CompressionTypes } from "kafkajs";
const kafka = new Kafka({ clientId: "kafka-node", brokers: ["localhost:9092", "localhost:9093"],});
const producer = kafka.producer({ transactionalId: "my-transactional-id", // 事务id});
// 创建事务const transaction = await producer.transaction();try { await transaction.send({ topic: "aaa-topic", messages: [{ value: "A-100" }], }); await transaction.send({ topic: "bbb-topic", messages: [{ value: "B+100" }], }); await transaction.commit();} catch (error) { // 回滚 await transaction.abort(); throw error;}