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

很多人第一次学 Kafka:

都会被这些名词吓到:

txt 复制代码
Broker
Topic
Partition
Offset
Consumer Group

感觉:

特别复杂。

其实:

Kafka 核心思想:

还是:

txt 复制代码
生产者发消息
消费者收消息

只是:

Kafka 为了:

txt 复制代码
高并发
高吞吐
分布式

做了很多增强。


一、Kafka 是什么

Kafka:

本质:

txt 复制代码
高性能消息队列

用于:

  • 异步通信
  • 日志收集
  • 大数据
  • 实时流处理

二、Kafka 最经典应用

例如:

用户下单。


订单服务

发送消息:

txt 复制代码
订单创建成功

Kafka

负责:

txt 复制代码
存储消息

其他服务

消费:

  • 库存
  • 短信
  • 积分
  • 推荐系统

三、Kafka 核心概念(必须掌握)

Kafka 最核心:

只有几个东西。


四、Broker(Kafka服务器)

Kafka 服务器:

叫:

txt 复制代码
Broker

你可以理解成:

txt 复制代码
Kafka 节点

五、Topic(主题)

Topic:

本质:

txt 复制代码
消息分类

例如:

txt 复制代码
order-topic
user-topic
log-topic

六、为什么需要 Topic

因为:

系统消息:

不可能:

txt 复制代码
全混在一起

所以:

需要:

txt 复制代码
分类

七、生产者(Producer)

负责:

txt 复制代码
发送消息

例如:

订单系统。


八、消费者(Consumer)

负责:

txt 复制代码
读取消息

例如:

库存系统。


九、完整流程(重点)

txt 复制代码
生产者
↓
发送消息
↓
Kafka Topic
↓
消费者读取

十、Kafka 最重要概念:Partition(分区)

Kafka:

为什么性能高?

核心就在:

txt 复制代码
Partition

十一、什么是分区

一个 Topic:

可以:

txt 复制代码
拆成多个分区

例如:

txt 复制代码
order-topic

Partition0
Partition1
Partition2

十二、为什么要分区

因为:

Kafka:

可以:

txt 复制代码
并行读写

十三、类比

例如:

食堂窗口。


一个窗口

txt 复制代码
所有人排一队

很慢。


三个窗口

txt 复制代码
三队同时处理

吞吐量暴涨。


十四、Offset(偏移量)

Kafka:

不会删除消息。

它通过:

txt 复制代码
Offset

记录:

txt 复制代码
读到哪里了

十五、Offset 本质

你可以理解成:

txt 复制代码
消息编号

例如:

txt 复制代码
0
1
2
3
4

十六、消费者读取过程

消费者:

会记录:

txt 复制代码
当前读到哪个 Offset

下次:

继续往后读。


十七、Consumer Group(消费者组)

Kafka:

支持:

txt 复制代码
多个消费者一起消费

十八、为什么需要消费者组

例如:

订单太多。

一个消费者:

处理不过来。

于是:

txt 复制代码
多个消费者一起处理

十九、规则(重点)

同一个 Partition:

txt 复制代码
同一时刻
只能被一个消费者消费

二十、为什么这样设计

为了:

txt 复制代码
保证顺序

否则:

消息顺序可能乱。


二十一、Kafka 特点(必须理解)

Kafka:

最核心特点:


1. 高吞吐

特别快。


2. 顺序写磁盘

Kafka:

不是随机写。

而是:

txt 复制代码
顺序追加

所以:

性能极高。


3. 分布式

支持:

txt 复制代码
多机器集群

4. 可持久化

消息:

会写磁盘。


二十二、Kafka 和 RabbitMQ 区别

很多人:

都会问。


RabbitMQ

特点:

txt 复制代码
功能丰富
简单
稳定
业务系统常用

Kafka

特点:

txt 复制代码
吞吐极高
适合大数据
日志流

二十三、Kafka 常见场景


日志收集

例如:

服务器日志。


用户行为分析

例如:

txt 复制代码
点击
浏览
点赞

实时推荐

例如:

抖音推荐流。


大数据

例如:

实时统计。


二十四、Kafka 常见命令(重点)


二十五、启动 Kafka

新版 Kafka:

通常:

bash 复制代码
bin/kafka-server-start.sh config/server.properties

二十六、创建 Topic

bash 复制代码
bin/kafka-topics.sh \
--create \
--topic order-topic \
--bootstrap-server localhost:9092

--topic

表示:

txt 复制代码
主题名字

二十七、查看 Topic

bash 复制代码
bin/kafka-topics.sh \
--list \
--bootstrap-server localhost:9092

二十八、发送消息(生产者)

bash 复制代码
bin/kafka-console-producer.sh \
--topic order-topic \
--bootstrap-server localhost:9092

然后:

输入:

txt 复制代码
hello

消息:

就进 Kafka 了。


二十九、消费消息(消费者)

bash 复制代码
bin/kafka-console-consumer.sh \
--topic order-topic \
--from-beginning \
--bootstrap-server localhost:9092

--from-beginning

表示:

txt 复制代码
从头开始读

三十、Go 操作 Kafka(重点)

Go:

常用库:

txt 复制代码
segmentio/kafka-go

或者:

txt 复制代码
sarama

三十一、Go 生产者示例


安装

bash 复制代码
go get github.com/segmentio/kafka-go

发送消息

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

go 复制代码
Brokers: []string{"localhost:9092"}

Kafka 地址。


Topic

go 复制代码
Topic: "order-topic"

发到哪个主题。


Value

go 复制代码
Value: []byte("hello kafka")

消息内容。


三十三、Go 消费者示例

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

go 复制代码
GroupID: "g1"

消费者组。


ReadMessage

go 复制代码
r.ReadMessage()

读取 Kafka 消息。


三十五、Kafka 消息结构

Kafka 消息:

不仅有 Value。

还有:

txt 复制代码
Key
Value
Offset
Partition
Timestamp

三十六、Key 的作用

Key:

决定:

txt 复制代码
消息进入哪个 Partition

三十七、为什么 Key 很重要

例如:

订单消息。

希望:

txt 复制代码
同一个订单
进入同一个Partition

这样:

才能:

txt 复制代码
保证顺序

三十八、Kafka 为什么这么快(核心)

Kafka:

性能高:

核心原因:


1. 顺序写磁盘


2. 零拷贝


3. 分区并行


4. 批量发送


三十九、Kafka 真正核心思想

你一定要理解:

Kafka:

不是:

txt 复制代码
传统业务消息队列

它更偏向:

txt 复制代码
数据流平台

四十、最后总结

Kafka 本质:

txt 复制代码
高吞吐分布式消息队列

核心结构:

txt 复制代码
Producer
↓
Topic
↓
Partition
↓
Consumer Group

最核心概念:

概念 作用
Broker Kafka服务器
Topic 消息分类
Partition 分区并行
Offset 消息编号
Consumer Group 消费者组

Go 常见操作:

txt 复制代码
NewWriter → 发消息
NewReader → 收消息

Kafka 最大特点:

txt 复制代码
高吞吐
高并发
分布式
实时流处理
相关推荐
袁小皮皮不皮3 小时前
1.HCIP BFD 学习笔记(优化版)
服务器·网络·笔记·网络协议·学习·智能路由器·ip
hhcgchpspk7 小时前
汇编语言传递数据和地址的误区
汇编·笔记·nasm·masm
智者知已应修善业7 小时前
【51单片机2个外部中断显示中断历时,初始化8左移3位共阳数码管】2024-6-6
c++·经验分享·笔记·算法·51单片机
linux修理工8 小时前
使用codebuddy学习kafka
分布式·学习·kafka
阿 才8 小时前
跟文件系统(busybox)的构建
大数据·hadoop·分布式
老纪9 小时前
Redis分布式锁进第九零篇
数据库·redis·分布式
Amy187021118239 小时前
分布式光伏防孤岛保护:技术逻辑、标准演进与工程实践全解析
分布式
tq10869 小时前
OperationSequence DSL 2.1 语法规范
笔记
ACP广源盛1392462567310 小时前
IX7008 PCIe 交换芯片@ACP#RTX Spark 经济型 8 口扩展芯片(对比 ASM1806)
大数据·人工智能·分布式·嵌入式硬件·gpt·spark·电脑
智者知已应修善业10 小时前
【用74LS151的实现(16序列信号发生器)】2024-6-1
驱动开发·经验分享·笔记·硬件架构·硬件工程