Kafka 入门笔记(核心语法 + 用法)

Kafka 入门笔记(核心语法 + 用法) 很多人第一次学 Kafka都会被这些名词吓到Broker Topic Partition Offset Consumer Group感觉特别复杂。其实Kafka 核心思想还是生产者发消息 消费者收消息只是Kafka 为了高并发 高吞吐 分布式做了很多增强。一、Kafka 是什么Kafka本质高性能消息队列用于异步通信日志收集大数据实时流处理二、Kafka 最经典应用例如用户下单。订单服务发送消息订单创建成功Kafka负责存储消息其他服务消费库存短信积分推荐系统三、Kafka 核心概念必须掌握Kafka 最核心只有几个东西。四、BrokerKafka服务器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二十六、创建 Topicbin/kafka-topics.sh\--create\--topicorder-topic\--bootstrap-server localhost:9092–topic表示主题名字二十七、查看 Topicbin/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(contextgithub.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),},)}三十二、代码解析BrokersBrokers:[]string{localhost:9092}Kafka 地址。TopicTopic:order-topic发到哪个主题。ValueValue:[]byte(hello kafka)消息内容。三十三、Go 消费者示例packagemainimport(contextfmtgithub.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))}}三十四、代码解析GroupIDGroupID:g1消费者组。ReadMessager.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最核心概念概念作用BrokerKafka服务器Topic消息分类Partition分区并行Offset消息编号Consumer Group消费者组Go 常见操作NewWriter → 发消息 NewReader → 收消息Kafka 最大特点高吞吐 高并发 分布式 实时流处理