kafka初识

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的数据展现给用户的。

猜你喜欢

转载自www.cnblogs.com/niumeng007/p/9680747.html