kafka:
作用:
1.消息系统: 系统解耦,冗余存储, 流量削峰, 缓冲,异步通信,扩展性,可恢复性
2.存储系统 将消息持久化到磁盘
3.流式处理平台
高吞吐,低延时
kafka本质上每次写入操作其实都是把数据写入到操作系统的页缓存中, 然后操作系统将页缓存中的数据刷回到磁盘中
producer 生产者, broker 相当于kafka服务进程, consumer 消费者, zk集群
过程:
Producer -生产者发送消息到broker–> broker(将消息存储到磁盘) —> consumer(订阅,消费消息)
broker服务代理节点
主题topic/分区partion 主题可以有多个分区, 一个分区只属于单个主题
同一toptic下的分区,消息内容是不同的,分区在存储层上可以看做是一个追加的log文件。 会有一个特定的偏移量offset, offset在分区中是唯一的,不能跨分区使用,kafka能够保证在分区层面,消息的顺序性,不能保证toptic的顺序性。 消息被发送到broker之前,会根据分区规则选择存储到对应哪个分区
分区: 分区引入了多副本,提升容灾能力。 同一分区的不同副本保存的是同样的消息,副本是 一主多从的, leader负责读写操作,follower副本只负责与leader同步, 当leader出现故障的时候,follower会发起选举新的leader。可以实现故障自动转移,当某个broker失效的时候仍然能够提供服务
因为副本的follower同步leader,因此跟leader之间会存在一定程度的消息滞后,不同步。 保持一定程度同步的follower 组成了一个组ISR, 只有在ISR中才能参与leader的选举, 否则不能参与。 但是由于一定的消息同步延迟,因此在leader挂掉,消息没有被follower及时同步完成时,发起leader选举后的新leader可能存在一定的消息丢失。 OSR是滞后过多的副本, AR所有副本
在创建分区或者分区上线需执行leader选举。按照AR集合中的顺序查找,第一个存活的副本,并且这个副本在ISR中,一个愤怒的AR集合在分配的时候已经制定,不发生重分配,则副本顺序保持不变,分区的ISR顺序可能发生变化
如果由于网络波动等原因,一个节点时而同步,时而滞后,可能发生频繁的isr的变动
kafka使用ISR, 是因为, 如果同步复制,则对性能消耗过大,如果异步复制,则可能丢失消息,使用ISR,在异步情况下,保证消息的滞后性不超过一定数量,这样做一个平衡