Kafka 入门笔记(核心语法 + 用法)
很多人第一次学 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\--topicorder-topic\--bootstrap-server localhost:9092–topic
表示:
主题名字二十七、查看 Topic
bin/kafka-topics.sh\--list\--bootstrap-server localhost:9092二十八、发送消息(生产者)
bin/kafka-console-producer.sh\--topicorder-topic\--bootstrap-server localhost:9092然后:
输入:
hello消息:
就进 Kafka 了。
二十九、消费消息(消费者)
bin/kafka-console-consumer.sh\--topicorder-topic\--from-beginning\--bootstrap-server localhost:9092–from-beginning
表示:
从头开始读三十、Go 操作 Kafka(重点)
Go:
常用库:
segmentio/kafka-go或者:
sarama三十一、Go 生产者示例
安装
go get github.com/segmentio/kafka-go发送消息
packagemainimport("context""github.com/segmentio/kafka-go")funcmain(){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 消费者示例
packagemainimport("context""fmt""github.com/segmentio/kafka-go")funcmain(){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 最大特点:
高吞吐 高并发 分布式 实时流处理