1.what is kafka
kafka是一个开源的消息队列,其特点:
(1) 快,可以支持几百兆每秒的数据,以及成千上万个client.
(2) 快速扩展
(3)数据都会在磁盘中持久化
2. kafka的特性
IO
(1) 写只允许append
(2) 读取操作不会block写操作
(3)充分利用机械盘的特点,机械臂的移动速度比较缓慢,如果只是用apeend的操作,那么机械臂的摇摆时间就会大量的被缩短,从而节省大量的时间。
Design Strategy
(1) Pull VS Push
push model :主动去发送消息,比较高的througput,处理比较复杂的服务逻辑。
pull model: 主动推送消息,比较简单的server logic,支持replay消息
概念
Topic and partition
kafka把消息按照topic进行分类,物理上topic使用partition组成,有个partition可以看成是一个队列,一个partition只能属于一个topic
大数据中,单台物理机器的性能不能存储所有的数据,将数据进行分区切割,每个server各自承担一部分自己的职责,提高数据的读写速度。
offset
类似于队列的索引,接收者通过offset定位partition上的消息位置。
两个基本的API接口
publish topic data 写数据
consumer topic data 读数据
produce
发送数据的一方,使用push模型
consumer
接收数据的一方,使用pull模型
consumer group
同一性质consumer放在同一个组中
一个partition只能map到一个组中的一个consumer
log file
kafka的消息都以log file的形式存在,log file不会永久存在,kafka有自己的清理策略,因为kafka只是一个消息队列,默认保存数据的时间为7天,也可以按照文件大小清理。
kafka消息格式
4byte CRC32的校验信息,查看消息是否正确
1byte的‘magic’ value
1byte attribute value
8byte timestamp of ‘magic‘ value is bigger then 1
4byte key length
4byte value length
log file 的格式
一个partition对应一个目录,每个消息存储是还会产生其他的有些字段,8byte offset 4byte message length,每个picycal directory 中有很多file如00000.kfaka数字是文件中的偏移量
在kafka中维护这一个active segment list,记录着offset 范围和对应的文件mapping,delete一个segment file会在segment list 上加一个标志位,标明已经删除,过一段时间会有一个process 一起将其删除。
log file有两种形式,一种是直观的file,一种是压缩的file
IO --zerocopy
操作系统读取文件,并不是直接加载application,而是要切换到CPU的kernel molde ,然后做底层的数据收发,例如,如果我们想要从buffer中读取消息,会需要操作 操作系统将kernel molde 消息读到read buffer中,在切换到user molde读到application buffer进行操作后在加载到socket发送给客户端,kafka采用了zerocopy的形式尽量减少kernel molde到user molde 的切换,直接将read buffer中的消息传递给socket这样就节约时间,加快了效率。
data replication
kafka中的信息会自动的定期复制为多份,放在不同的brock上,replication的单位为partition,partition有leader和follower两种角色,
(1)写是向partition leader写数据
(2)partition leader会将消息写到本地的disk中
(3)follower会定期的向leader pull数据
(4)leader需要等所有的follower向其发ack的确认消息,等所有follower都发送ack,才认为是发送成功
ISR(in-sync replication)
replica 0 是leader 2和3是follower
ISR充分考虑到了sync和sync copy ,sync copy 是指leader 每次收到一条消息,follower 就更新过来,sync copy是指leader持续不断的写,follower持续不断的同步。
ISR 维持这一个水线high water mark 在hign water mark之上的数据用户才能看到,leader持续不断的写数据,将没有返回ack的数据展现给用户的。
原文地址:https://www.cnblogs.com/niumeng007/p/9680747.html