今天我们不讲复杂理论。直接从启动 Kafka ↓ 创建 Topic ↓ 发送消息 ↓ 消费消息完整走一遍。你学完至少会真正把 Kafka 跑起来一、Kafka 整个流程图先建立概念Kafka 最核心流程生产者发消息 ↓ Topic存消息 ↓ 消费者读消息例如Go程序 ↓ 发送 hello ↓ Kafka保存 ↓ 另一个Go程序读取二、第一步安装 Docker因为现在Kafka 一般都用 Docker 跑。先测试docker-v如果输出Docker version xxx说明 Docker 正常。三、第二步下载 Kafka 镜像dockerpull bitnami/kafka四、什么是镜像镜像你可以理解成Kafka 安装包五、第三步启动 Kafka 容器重点执行dockerrun-d\--namekafka\-p9092:9092\-eKAFKA_CFG_NODE_ID1\-eKAFKA_CFG_PROCESS_ROLESbroker,controller\-eKAFKA_CFG_CONTROLLER_LISTENER_NAMESCONTROLLER\-eKAFKA_CFG_LISTENERSPLAINTEXT://:9092,CONTROLLER://:9093\-eKAFKA_CFG_ADVERTISED_LISTENERSPLAINTEXT://localhost:9092\-eKAFKA_CFG_CONTROLLER_QUORUM_VOTERS1localhost:9093\-eALLOW_PLAINTEXT_LISTENERyes\bitnami/kafka六、这里到底发生了什么Docker会创建 Kafka 容器 ↓ 启动 Kafka 服务七、查看 Kafka 是否启动成功dockerps如果看到kafka说明成功。八、9092 是什么Kafka 默认端口9092以后Go 程序连接localhost:9092就是连接 Kafka。九、第四步创建 Topic重点Kafka消息必须放进Topic里面。十、Topic 是什么Topic你可以理解成消息分类例如订单消息 日志消息 用户消息十一、创建 Topic执行dockerexec-itkafka kafka-topics.sh\--create\--topicorder-topic\--bootstrap-server localhost:9092十二、命令详细解析docker exec进入容器执行命令kafka-topics.shKafka Topic 管理工具。–create表示创建 Topic–topic order-topicTopic 名字order-topic–bootstrap-server连接 Kafka。十三、查看 Topic执行dockerexec-itkafka kafka-topics.sh\--list\--bootstrap-server localhost:9092十四、如果看到order-topic说明Topic 创建成功。十五、第五步发送消息Producer现在开始发消息。十六、启动生产者执行dockerexec-itkafka kafka-console-producer.sh\--topicorder-topic\--bootstrap-server localhost:9092十七、现在终端会卡住这是正常的。因为Kafka正在等待你输入消息十八、输入消息例如hello回车。再输入world十九、这些消息去哪了Kafka已经存进 order-topic了。二十、第六步消费消息Consumer再开一个终端。二十一、启动消费者执行dockerexec-itkafka kafka-console-consumer.sh\--topicorder-topic\--from-beginning\--bootstrap-server localhost:9092二十二、会发生什么终端会打印hello world二十三、完整流程重点你现在已经真正完成生产者 ↓ 发送消息 ↓ Kafka Topic ↓ 消费者读取这就是Kafka 最核心流程。二十四、为什么生产者和消费者是两个终端因为真实项目它们本来就是两个不同程序例如订单系统负责发送消息库存系统负责读取消息二十五、第七步Go 操作 Kafka真正开发不会手敲命令。而是Go代码操作Kafka二十六、安装 Go Kafka 库go get github.com/segmentio/kafka-go二十七、Go 发送消息生产者producer.gopackagemainimport(contextfmtgithub.com/segmentio/kafka-go)funcmain(){// 创建生产者w:kafka.NewWriter(kafka.WriterConfig{Brokers:[]string{localhost:9092},Topic:order-topic,})// 发消息err:w.WriteMessages(context.Background(),kafka.Message{Value:[]byte(hello kafka),},)iferr!nil{panic(err)}fmt.Println(发送成功)}二十八、运行生产者go run producer.go二十九、Kafka 里已经有消息了现在消费者就能读到。三十、Go 消费消息消费者consumer.gopackagemainimport(contextfmtgithub.com/segmentio/kafka-go)funcmain(){// 创建消费者r:kafka.NewReader(kafka.ReaderConfig{Brokers:[]string{localhost:9092},Topic:order-topic,GroupID:g1,})for{// 读取消息msg,err:r.ReadMessage(context.Background())iferr!nil{panic(err)}fmt.Println(string(msg.Value))}}三十一、运行消费者go run consumer.go三十二、消费者会打印hello kafka三十三、现在你已经真正会 Kafka 了你已经掌握Kafka 启动dockerrun创建 Topickafka-topics.sh发送消息kafka-console-producer.sh或者WriteMessages()消费消息kafka-console-consumer.sh或者ReadMessage()三十四、真实项目中的 Kafka 流程真实开发最经典就是用户下单订单服务发 Kafka 消息Kafka负责存消息其他服务消费库存短信推荐邮件三十五、Kafka 为什么重要因为现代后端越来越微服务化系统之间不再直接调用而是通过 Kafka 通信三十六、最后一句总结必须记住Kafka 最核心操作流程启动 Kafka ↓ 创建 Topic ↓ Producer 发消息 ↓ Topic 存消息 ↓ Consumer 读消息真正重要先掌握发 收别一开始研究Partition Offset 副本机制容易直接劝退。