一、kafka介绍
Kafka是一种高吞吐量、分布式、基于发布/订阅的消息系统。
二、kafka组件
broker: Kafka服务器,负责消息存储和转发
topic:消息类别,Kafka按照 topic来分类消息
partition:topic的分区,一个 topic可以包含多个 partition,topic消息保存在partition上
offset:消息在日志中的位置,可以理解是消息在 partition上的偏移量
Consumer Group:消费者分组,每个 Consumer必须属于一个 group
Zookeeper:保存着集群 broker、topic、partition等 meta数据;另外,还负责 broker故
障发现,partition leader选举,负载均衡等功能
三、kafka数据存储设计
1.partition(逻辑)
每条消息包含offset,MessageSize,data属性。
offset表示 Message在这个 partition中的偏移量。逻辑值。
MessageSize表示消息内容 data的大小;
data为 Message的具体内容。
2.segment(物理)
partition物理上由多个 segment文件组成,每个 segment大小相等,顺序读写。
在查找指定 offset的 Message的时候,用二分查找(比较segment首尾便宜地址)就可以定位到该 Message在哪个 segment数据文件中。
3.数据文件索引
segment由index和data文件组成,index文件中并没有为数据文件中的每条 Message建立索引,而是采用了稀疏存储的方式,每隔一定字节的数据建立一条索引(类似块索引)。可以避免避免了索引文件占用过多的空间。
4.kafka如何保证高可用
1.副本机制
2.isr机制
Kafka使用ISR(In-Sync Replicas)机制来保证数据的一致性和可用性。
3.自动故障转移
5.kafka高水位和低水位
高水位(High Watermark):高水位是指分区中已经被复制的消息的最高位置
低水位(Low Watermark):低水位是指消费者已经消费的消息的位置
最新位移(latest offset): 最新位移是指分区中最新消息的偏移量,即下一条消息将要写入的位置。
四、生产者设计
1.负载均衡
为了有效利用 broker集群的性能,提高消息的吞吐量,producer可以通过随机或者 hash等方式,将消息平均发送到多个 partition上,以实现负载均衡。
2.批量发送
Producer端可以在内存中合并多条消息后,以一次请求的方式发送了批量的消息给 broker,从而大大减少 broker存储消息的 IO操作次数。
3.压缩(GZIP或 Snappy)
Producer端可以通过 GZIP或 Snappy格式对消息集合进行压缩。Producer端进行压缩之后,在Consumer端需进行解压。
五、消费者设计
1.消费者组
同一 Consumer Group中的多个 Consumer实例,不同时消费同一个 partition,等效于队列模式。partition内消息是有序的,Consumer通过 pull方式消费消息。