这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天
Kafka 介绍
Kafka 是什么
Kafka 是使用 scala 开发的支持包括 golang 在内的多语言客户端的分布式、分区化、可复制提交的日志服务。
Kafka 的基本概念
- Message(消息):消息,通信的基本单位,Producer 可以向 Topic 发布一些消息
- Topic(话题):Kafka 中用于区分不同类别信息的类别名称,由 Producer 指定
- Producer(消息生产者):将消息发送给 Kafka 特定 Topic 的对象
- Consumer(消息消费者):订阅并处理特定的 Topic 中消息的对象
- Broker(Kafka服务器集群):保存已发布消息的一组服务器,每个集群都可以视为一个 Broker,Consumer 从 Broker 中获取数据,处理消息
- Partition(分区):每个 Topic 可以分为多个 Partition,每个 Partition 是一个消息队列
消息
消息由一个固定大小的报头和可变长度但不透明的字节阵列负载。报头包含格式版本和CRC32效验和以检测损坏或截断,其格式如下所示:
1. 4 byte CRC32 of the message
2. 1 byte "magic" identifier to allow format changes, value is 0 or 1
3. 1 byte "attributes" identifier to allow annotations on the message independent of the version
bit 0 ~ 2 : Compression codec
0 : no compression
1 : gzip
2 : snappy
3 : lz4
bit 3 : Timestamp type
0 : create time
1 : log append time
bit 4 ~ 7 : reserved
4. (可选) 8 byte timestamp only if "magic" identifier is greater than 0
5. 4 byte key length, containing length K
6. K byte key
7. 4 byte payload length, containing length V
8. V byte payload
Kafka 的特点
- 多语言支持:支持 c++、java、python 以及 go 等语言;
- 分布式的:Kafka 的服务端集群(borker)、消息生产者(producer)及消息消费者(consumer)都可以是分布式的
- 高吞吐量:Kafka 每秒可以产生约 50MB 消息,每秒处理 110MB 消息
- 自动平衡:Kafka 中消息被处理的状态是在 consumer 端维护,而不是由 server 端维护,因此失败时能自动平衡
- 扩展性高:Kafka 可以实现不同应用程序之间的解耦,进而成为了一个可扩展、高可靠的消息系统
- 易维护性:无需停机即可扩展机器
- 可持久化:可以通过将数据持久化到硬盘以及 replication 来防止数据丢失
常用场景
- 监控
- 流处理
- 日志聚合
- 消息队列
- 持久性日志
- 用户行为追踪
Kafka 的安装
下介绍 windows 下的 Kafka 的搭建过程 安装 Kafka 需要提前安装 JDK,并配置环境变量
下载
安装
将压缩包解压到本地
配置
- 打开 config 文件夹下的 server.properties 文件 2.修改 log.dirs=D:\kafka\kafkalogs 3.打开 config 目录下的 zookeeper.properties 4.修改 dataDir=D:\kafka\zookeeper
使用 go 操作 Kafka
第三方库
go get github.com/Shopify/sarama