参考视频: 【30分钟Kafka光速入门,2025年新版Kafka4.0.0教程!】
最后两部分待更新 (っ °Д °;)っ
安装配置 Docker实操
Kafka主要是为服务端Linux环境设计的,建议在Linux系统上安装和使用。这里使用 Docker 安装。
bash
# docker + pull + 镜像名称和版本号
docker pull apache/kafka:4.0.0
# 查看本地 docker 镜像的列表
docker images
# 启动容器 -d 表示让容器在后台运行
# --name 表示容器名字为 kafka
# -p 表示将 容器的9092端口映射到主机的9092端口 比如 9192:9092 就是将容器的9092端口映射到主机的9192端口
docker run -d --name kafka -p 9092:9092 apache/kafka:4.0.0
# 查看正在运行的容器列表
docker ps
# 进入容器 docker exec 命令
# -it 表示以交互模式运行
# kafka 是容器名称或ID
# bash 表示进入容器后启动bash终端
docker exec -it kafka bash
进入bash之后
kafka的安装目录在 根目录下的 opt/kafka/ 中
创建和管理主题
用来管理kafka主题的脚本:bin目录下的 kafka topics脚本
bash
ls bin

这个脚本能够完成创建、修改、删除主题
bash
# --bootstrap-server 表示连接到kafka服务的地址 这里连接本地
# 在容器内也是localhost:9092,因为容器内的localhost:9092直接指向kafka容器自身的9092
# --list 表示列出所有的主题
bin/kafka-topics --bootstrap-server localhost:9092 --list
# 如果是在docker内,要改成.sh脚本,由于我在docker中使用,所以后续代码中全是.sh
bin/kafka-topics.sh --bootstrap-server localhost:9092 --list
创建主题
还没有创建主题时,返回结果为空
bash
# 创建主题
# --create --topic + 创建的主题名称
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic my-topic

查看主题的详细信息
bash
bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe
tips: 在命令后面加 反斜杠 可以分行输入
但是尝试了一下因为换行 \后面打了空格会导致命令拼接
修改主题
修改分区数,保留时间等。
默认情况下kafka消息会保留7天。
查看配置
bash
bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe
修改配置
bash
# 把保留时间改为10s
bin/kafka-configs.sh \
--bootstrap-server localhost:9092 \ # 服务器地址参数
--entity-type topics \ # 表示要修改的是主题的配置
--entity-name my-topic \ # 表示要修改的主题的名称
--alter \ 表示要修改配置
--add-config retention.ms=10000

删除主题
bash
# 用delete关键字
bin/kafka-topics --bootstrap-server localhost:9092 --delete --topic my-topic
发送和接收消息
脚本用来发送消息到指定的kafka主题

发送消息 producer 脚本
bash
bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic my-topic
# 回车后可以开始输入事件数据
# 每输入一行数据会作为一条消息
# 发送到指定的topic中
# 输入完成后使用 ctrl+C 来退出
接收消息 consumer 脚本
bash
# --from-beginning 表示从主题的开头开始读取消息
# 不加会从上次消费的位置开始读取
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-topic
此时在生产者中加入新的消息,消费者会实时显示,实现实时消息传递

GUI 工具介绍
offset Explorer 工具
在代码中使用kafka
使用 kafkaJs
前置步骤
bash
mkdir kafka-js-demo
cd kafka-js-demo
# 使用 pnpm 包管理器下载 kafkajs
# pnpm 是包管理器 也可以用npm等
pnpm init
pnpm install kafkajs
# 在vscode中打开
code .
第一个例子
生产者代码 preducer.js
js
// kafka producer example
const {Kafka} = require('kafkajs');
// 创建 kafka 客户端参数
const kafka = new Kafka({
clientId: 'my-producer', // 客户端唯一标识
brokers: ['localhost:9092'] // broker地址列表 集群环境可写多个,用逗号分离
});
// 创建生产者实例
const producer = kafka.producer();
// 创建一个发送消息的函数
async function sendMessage(topic, message){
try {
await producer.connect();
console.log('Producer connected');
const result = await producer.send({
topic: topic,
messages:[
{value:message}
]
});
console.log('Message sent successfully:', result);
}catch (error) {
console.error('Error sending message:', error);
}finally {
await producer.disconnect();
console.log('Producer disconnected')
}
}
sendMessage("my-topic", "Hello, Kafka!"); // 第一个参数是主题名称,第二个参数是消息内容
在终端执行
bash
node producer.js
返回 生产者创建成功
bash
Producer connected
Message sent successfully: [
{
topicName: 'my-topic',
partition: 0,
errorCode: 0,
baseOffset: '11',
logAppendTime: '-1',
logStartOffset: '11'
}
]
Producer disconnected
消费者代码 consumer.js
js
// kafka consumer example
const {Kafka} = require('kafkajs');
const kafka = new Kafka({
clientId: 'my-consumer',
brokers: ['localhost:9092'],
});
const consumer = kafka.consumer({ groupId: 'my-group' });
async function consumeMessages(topic){
try {
await consumer.connect();
console.log('Consumer connected');
await consumer.subscribe({ topic: topic, fromBeginning: true });
console.log(`Subscribed to topic: ${topic}`);
await consumer.run({
eachMessage: async ({ topic, partition, message }) => {
console.log(`Received message: ${message.value.toString()} from topic: ${topic}`);
},
});
}catch (error) {
console.error('Error consuming messages:', error);
}
}
consumeMessages('my-topic');
同样运行,能够看到生产者发送的 Hello, Kafka!