Kafka 入门笔记(核心语法 + 用法)
一个 Topic:拆成多个分区Partition0Partition1Partition2高吞吐分布式消息队列Producer↓Topic↓Partition↓概念作用BrokerKafka服务器Topic消息分类Partition分区并行Offset消息编号消费者组NewWriter → 发消息NewReader → 收消息高吞吐高并发分布式实时流处理。
很多人第一次学 Kafka:
都会被这些名词吓到:
Broker
Topic
Partition
Offset
Consumer Group
感觉:
特别复杂。
其实:
Kafka 核心思想:
还是:
生产者发消息
消费者收消息
只是:
Kafka 为了:
高并发
高吞吐
分布式
做了很多增强。
一、Kafka 是什么
Kafka:
本质:
高性能消息队列
用于:
- 异步通信
- 日志收集
- 大数据
- 实时流处理
二、Kafka 最经典应用
例如:
用户下单。
订单服务
发送消息:
订单创建成功
Kafka
负责:
存储消息
其他服务
消费:
- 库存
- 短信
- 积分
- 推荐系统
三、Kafka 核心概念(必须掌握)
Kafka 最核心:
只有几个东西。
四、Broker(Kafka服务器)
Kafka 服务器:
叫:
Broker
你可以理解成:
Kafka 节点
五、Topic(主题)
Topic:
本质:
消息分类
例如:
order-topic
user-topic
log-topic
六、为什么需要 Topic
因为:
系统消息:
不可能:
全混在一起
所以:
需要:
分类
七、生产者(Producer)
负责:
发送消息
例如:
订单系统。
八、消费者(Consumer)
负责:
读取消息
例如:
库存系统。
九、完整流程(重点)
生产者
↓
发送消息
↓
Kafka Topic
↓
消费者读取
十、Kafka 最重要概念:Partition(分区)
Kafka:
为什么性能高?
核心就在:
Partition
十一、什么是分区
一个 Topic:
可以:
拆成多个分区
例如:
order-topic
Partition0
Partition1
Partition2
十二、为什么要分区
因为:
Kafka:
可以:
并行读写
十三、类比
例如:
食堂窗口。
一个窗口
所有人排一队
很慢。
三个窗口
三队同时处理
吞吐量暴涨。
十四、Offset(偏移量)
Kafka:
不会删除消息。
它通过:
Offset
记录:
读到哪里了
十五、Offset 本质
你可以理解成:
消息编号
例如:
0
1
2
3
4
十六、消费者读取过程
消费者:
会记录:
当前读到哪个 Offset
下次:
继续往后读。
十七、Consumer Group(消费者组)
Kafka:
支持:
多个消费者一起消费
十八、为什么需要消费者组
例如:
订单太多。
一个消费者:
处理不过来。
于是:
多个消费者一起处理
十九、规则(重点)
同一个 Partition:
同一时刻
只能被一个消费者消费
二十、为什么这样设计
为了:
保证顺序
否则:
消息顺序可能乱。
二十一、Kafka 特点(必须理解)
Kafka:
最核心特点:
1. 高吞吐
特别快。
2. 顺序写磁盘
Kafka:
不是随机写。
而是:
顺序追加
所以:
性能极高。
3. 分布式
支持:
多机器集群
4. 可持久化
消息:
会写磁盘。
二十二、Kafka 和 RabbitMQ 区别
很多人:
都会问。
RabbitMQ
特点:
功能丰富
简单
稳定
业务系统常用
Kafka
特点:
吞吐极高
适合大数据
日志流
二十三、Kafka 常见场景
日志收集
例如:
服务器日志。
用户行为分析
例如:
点击
浏览
点赞
实时推荐
例如:
抖音推荐流。
大数据
例如:
实时统计。
二十四、Kafka 常见命令(重点)
二十五、启动 Kafka
新版 Kafka:
通常:
bin/kafka-server-start.sh config/server.properties
二十六、创建 Topic
bin/kafka-topics.sh \
--create \
--topic order-topic \
--bootstrap-server localhost:9092
–topic
表示:
主题名字
二十七、查看 Topic
bin/kafka-topics.sh \
--list \
--bootstrap-server localhost:9092
二十八、发送消息(生产者)
bin/kafka-console-producer.sh \
--topic order-topic \
--bootstrap-server localhost:9092
然后:
输入:
hello
消息:
就进 Kafka 了。
二十九、消费消息(消费者)
bin/kafka-console-consumer.sh \
--topic order-topic \
--from-beginning \
--bootstrap-server localhost:9092
–from-beginning
表示:
从头开始读
三十、Go 操作 Kafka(重点)
Go:
常用库:
segmentio/kafka-go
或者:
sarama
三十一、Go 生产者示例
安装
go get github.com/segmentio/kafka-go
发送消息
package main
import (
"context"
"github.com/segmentio/kafka-go"
)
func main() {
w := kafka.NewWriter(kafka.WriterConfig{
Brokers: []string{"localhost:9092"},
Topic: "order-topic",
})
w.WriteMessages(context.Background(),
kafka.Message{
Value: []byte("hello kafka"),
},
)
}
三十二、代码解析
Brokers
Brokers: []string{"localhost:9092"}
Kafka 地址。
Topic
Topic: "order-topic"
发到哪个主题。
Value
Value: []byte("hello kafka")
消息内容。
三十三、Go 消费者示例
package main
import (
"context"
"fmt"
"github.com/segmentio/kafka-go"
)
func main() {
r := kafka.NewReader(kafka.ReaderConfig{
Brokers: []string{"localhost:9092"},
Topic: "order-topic",
GroupID: "g1",
})
for {
msg, _ := r.ReadMessage(context.Background())
fmt.Println(string(msg.Value))
}
}
三十四、代码解析
GroupID
GroupID: "g1"
消费者组。
ReadMessage
r.ReadMessage()
读取 Kafka 消息。
三十五、Kafka 消息结构
Kafka 消息:
不仅有 Value。
还有:
Key
Value
Offset
Partition
Timestamp
三十六、Key 的作用
Key:
决定:
消息进入哪个 Partition
三十七、为什么 Key 很重要
例如:
订单消息。
希望:
同一个订单
进入同一个Partition
这样:
才能:
保证顺序
三十八、Kafka 为什么这么快(核心)
Kafka:
性能高:
核心原因:
1. 顺序写磁盘
2. 零拷贝
3. 分区并行
4. 批量发送
三十九、Kafka 真正核心思想
你一定要理解:
Kafka:
不是:
传统业务消息队列
它更偏向:
数据流平台
四十、最后总结
Kafka 本质:
高吞吐分布式消息队列
核心结构:
Producer
↓
Topic
↓
Partition
↓
Consumer Group
最核心概念:
| 概念 | 作用 |
|---|---|
| Broker | Kafka服务器 |
| Topic | 消息分类 |
| Partition | 分区并行 |
| Offset | 消息编号 |
| Consumer Group | 消费者组 |
Go 常见操作:
NewWriter → 发消息
NewReader → 收消息
Kafka 最大特点:
高吞吐
高并发
分布式
实时流处理
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)