Kafka底层原理总结


消息队列作用

异步:将不需要实时返回的逻辑异步化,可以提高总体接口的性能
解耦:生产者和消费者没有直接依赖,一个系统故障不会影响另一个系统,保证系统的稳定性和健壮性
削峰填谷:消息队列可以作为一层缓冲去平滑突发的流量,防止系统因为短时间负载过高影响可用性
顺序性保证:很多情况下,数据的顺序都很重要,消息队列大部分都是有序的,保证数据按照特定顺序进行处理
可靠性保证:消息队列可以提供持久化的功能,必要情况下可以重新消费历史消息。

章节

kafka特性

  1. 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。
  2. 高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息。
  3. 支持同步和异步复制两种HA
  4. Consumer客户端pull,随机读,利用sendfile系统调用,zero-copy ,批量拉数据
  5. 消费状态保存在客户端
  6. 消息存储顺序写
  7. 数据迁移、扩容对用户透明
  8. 支持Hadoop并行数据加载。
  9. 支持online和offline的场景。
  10. 持久化:通过将数据持久化到硬盘以及replication防止数据丢失。
  11. scale out:无需停机即可扩展机器。
  12. 定期删除机制,支持设定partitions的segment file保留时间。

名称解析

broker:代理,对后面分区的一个代理,kafka集群中的一个节点
producer:生产者
consumer:消费者
partition:分区
leader:领导者
follower:跟随者
Replica:副本
replication factor 副本因子
LogStartOffset:日志起始偏移量
LW:Low Watermark
HW:High Watermark
LEO:LogEndOffset日志结束偏移量
LSO:LastStableOffset
AR:Assigned Replicas,可分配副本的一个集合,AR = ISR+OSR,消息会先发送到leader副本,然后follower副本才能从leader副本中拉取消息进行同步,同步期间内follower副本相对于leader副本而言会有一定程度的滞后
ISR:In Sync Replicas,同步副本列表,可同步副本的一个集合,由leader维护,所有与leader副本保持一定程度同步的副本(包括Leader)组成ISR
OSR:Out Sync Replicas,不可同步副本的一个集合,与leader副本同步滞后过多的副本(不包括leader)副本,组成OSR

Producer

kafka生产者默认是异步批量发送消息给broker,当Producer生产一条消息时,并不会立刻发送到Broker,而是先放入到消息缓冲区,等到缓冲区满或者消息个数达到限制后,再批量发送到Broker。由三个参数决定,batch.size、batch.bytes、batch.timeout

batch.size 最大缓存消息数

batch.bytes 最大缓存字节数

batch.timeout 最大缓存时间

重要参数

replica.lag.time.max.ms
副本滞后最大超时毫秒数

相关文章

参考文档