Kafka 零基础入门(最基本用法)
很多人第一次学 Kafka:
一上来:
就看到:
Broker Partition Offset Consumer Group直接懵。
其实:
Kafka 最开始:
你只需要理解:
发消息 收消息就够了。
别一开始:
研究底层。
一、Kafka 到底是什么
一句话:
Kafka = 存消息的地方你可以理解成:
高级版消息队列二、消息是什么
例如:
用户下单。
订单系统:
可以发送一条消息:
用户下单成功Kafka:
负责:
保存这条消息然后:
别的程序:
再去读取。
三、Kafka 最核心流程(必须理解)
Kafka:
本质:
就三步。
1. 生产者发消息
Producer2. Kafka 存消息
Topic3. 消费者读消息
Consumer四、先理解 Topic(最重要)
Kafka 里面:
消息必须放到:
Topic里面。
五、Topic 是什么
你可以理解成:
消息分类例如:
订单消息 用户消息 日志消息分别:
放不同 Topic。
六、最简单类比
你可以理解成:
QQ 群
Topic = 群聊发消息的人
Producer看消息的人
Consumer七、Kafka 最基础流程图
生产者 ↓ 发送消息 ↓ Kafka Topic ↓ 消费者读取八、Kafka 第一步:启动 Kafka
现在:
一般:
都用 Docker。
九、Docker 启动 Kafka(最简单)
先拉镜像:
dockerpull bitnami/kafka十、启动 Kafka
dockerrun-d\--namekafka\-p9092:9092\-eKAFKA_CFG_NODE_ID=1\-eKAFKA_CFG_PROCESS_ROLES=broker,controller\-eKAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER\-eKAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093\-eKAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092\-eKAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@localhost:9093\-eALLOW_PLAINTEXT_LISTENER=yes\bitnami/kafka十一、9092 是什么
Kafka 默认端口:
9092以后:
Go 程序:
就连接:
localhost:9092十二、创建 Topic
Kafka:
必须先有 Topic。
创建 order-topic
dockerexec-itkafka kafka-topics.sh\--create\--topicorder-topic\--bootstrap-server localhost:9092十三、查看 Topic
dockerexec-itkafka kafka-topics.sh\--list\--bootstrap-server localhost:9092如果看到:
order-topic说明成功。
十四、发送消息(最重要)
现在:
开始发消息。
开启生产者
dockerexec-itkafka kafka-console-producer.sh\--topicorder-topic\--bootstrap-server localhost:9092十五、现在发生了什么
你已经进入:
Kafka消息输入模式终端:
会卡住。
这是正常的。
十六、输入消息
例如:
hello回车。
再输入:
world十七、这些消息去哪了
Kafka:
已经:
保存起来了存进:
order-topic十八、读取消息(消费者)
现在:
再开一个终端。
启动消费者
dockerexec-itkafka kafka-console-consumer.sh\--topicorder-topic\--from-beginning\--bootstrap-server localhost:9092十九、会看到什么
你刚刚发送的:
hello world都会打印出来。
二十、完整流程(你现在已经跑通了)
生产者 ↓ hello ↓ Kafka Topic ↓ 消费者 ↓ 读取hello这就是:
Kafka 最基础用法。
二十一、Kafka 最核心理解
Kafka:
本质:
就是:
生产者写消息 消费者读消息二十二、Go 操作 Kafka(重点)
真正开发:
不会手敲命令。
而是:
Go代码操作Kafka二十三、安装 Kafka Go 库
go get github.com/segmentio/kafka-go二十四、Go 发送消息(生产者)
示例
packagemainimport("context""github.com/segmentio/kafka-go")funcmain(){// 创建 writer(生产者)w:=kafka.NewWriter(kafka.WriterConfig{Brokers:[]string{"localhost:9092"},Topic:"order-topic",})// 发消息w.WriteMessages(context.Background(),kafka.Message{Value:[]byte("hello kafka"),},)}二十五、代码详细解析
NewWriter
kafka.NewWriter()表示:
创建Kafka生产者Brokers
Brokers:[]string{"localhost:9092"}Kafka 地址。
Topic
Topic:"order-topic"消息发到哪个 Topic。
WriteMessages
w.WriteMessages()真正发送消息。
Value
Value:[]byte("hello kafka")消息内容。
二十六、Kafka 为什么用 []byte
因为:
Kafka:
底层:
只认识:
二进制数据所以:
字符串:
必须:
[]byte(...)转换。
二十七、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))}}二十八、代码解析
NewReader
kafka.NewReader()创建消费者。
GroupID
GroupID:"g1"消费者组。
现在:
先不用深究。
你可以简单理解:
消费者编号ReadMessage
r.ReadMessage()从 Kafka 读取消息。
msg.Value
msg.Value消息内容。
二十九、为什么消费者一直 for
因为:
Kafka:
消息:
会不断产生。
所以:
消费者:
通常:
一直监听三十、现在你已经掌握了 Kafka 最核心用法
你已经会:
创建 Topic
kafka-topics.sh发消息
kafka-console-producer.sh或者:
WriteMessages()收消息
kafka-console-consumer.sh或者:
ReadMessage()三十一、真实项目里的 Kafka
真实开发:
最经典:
就是:
用户下单
订单服务:
发Kafka消息其他服务
消费:
- 库存
- 短信
- 邮件
- 推荐系统
三十二、最后一句总结(必须记住)
Kafka 最核心:
Producer 发消息 ↓ Topic 存消息 ↓ Consumer 读消息你现在:
最重要先会:
发 收别一开始:
研究:
Partition Offset 副本机制容易直接崩。
