一. 使用场景
- 日志信息
- Metrics数据
- 用户行为
二. 如何使用Kafka
- 创建集群
- 新增Topic
- 编写生产者逻辑
- 编写消费者逻辑
三. 基本概念
- Topic:逻辑队列,不同Topic可以建立不同的Topic(不同的业务场景)
- Cluster:物理集群,每个集群中可以建立多个不同的Topic
- Producer:生产者,负责将业务消息发送到Topic中
- Consumer:消费者,负责消费Topic中的消息
- ConsumerGroup:消费者组,不同组Consumer消费进度互不干涉(消费顺序独立)
- Partition:通常topic会有多个分片,不同分片的直接消息是可以并发来处理的,以此提高单个Topic的吞吐
- Offset:消息在partition内的相对位置信息,可以理解为唯一ID, 在partition内部严格递增
- Broker:代表每一个Kafka的节点,所有的Broker节点最终组成了一个集群。中间有一个Broker同时也扮演了Controller的角色,Controller是整个集群的大脑,负责对副本和Broker进行分配
四. Kafka的优点
- Producer-批量发送
批量发送可以减少I0次数,从而加强发送能力
- Producer-数据压缩
通过压缩,减少消息大小,目前支持Snappy、 Gzip、 LZ4、ZSTD压缩算法
- Broker-磁盘结构、顺序写
移动磁头找到对应磁道,磁盘转动,找到对应扇区,最后写入。寻道成本比较高,因此顺序写可以减少寻道所带来的时间成本。采用顺序写的方式进行写入,以提高写入效率
- Broker-如何找到消息
Consumer通过发送FetchRequest请求消息数据,Broker会将指定Offset处的消息,按照时间窗口和消息大小窗口发送给Consumer
- Broker偏移量索引文件
二分找到小于目标offset的最大文件
- Broker时间戳索引文件
二分找到小于目标时间戳最大的索引位置,通过寻找offset的方式找到最终数据
- Broker-零拷贝
Consumer从Broker中读取数据,通过sendfile的方式,将磁盘读到os内核缓冲区后,直接转到socket buffer进行网络发送 Producer生产的数据持久化到broker,采用mmap文件映射,实现顺序的快速写入
- Consumer-High Level
在Broker集群中,对于不同的Consumer Group来讲,都会选取一台Broker当做Coordinator, 而Coordinator的作用就是帮助Consumer Group进行分片的分配,也叫做分片的rebalance,使用这种方式,如果ConsumerGroup中有发生宕机,或者有新的Consumer加入,整个partition和Consumer都会重新进行分配来达到一个稳定的消费状态
- Producer:批量发送、数据压缩
- Broker:顺序写,消息索引,零拷贝
- Consumer: Rebalance
五. Kafka的缺点
- 重启操作
- 替换、扩容、缩容
- 负载不均衡
- 运维成本高
- 对于负载不均衡的场景,解决方案复杂
- 没有自己的缓存,完全依赖Page Cache
- Controller和Coordinator和Broker在同一进程中,大量I0会造成其性能下降
六. 个人感悟
1.还有很多要学习消化的知识,记得复习 2.多敲代码