《Apache Kafka源码剖析》——简介

关键特性

  • 近乎实时性的消息处理能力,顺序读写磁盘
  • 批量读写消息,批量压缩消息,提供网络利用率
  • 消息分区,每个分区消息顺序传输,分区之间并发操作
  • 支持在线增加分区,水平扩展 分区副本,一个Leader副本负责读写,其他副本负责同步,提高容灾能力

应用场景

  • 消息中间件,实现消息队列和消息的发布/订阅
  • 数据总线
  • 日志收集中心
  • 基于Kafka设计数据库主从同步的工具

Other

解耦:队列
数据持久化:磁盘

扩展与容灾:
服务端:每个Topic分为多个Partition(分区,水平扩展),每个Partition有多个Replica(副本,一主多从,容灾)
Consumer:Consumer Group

顺序保证
缓冲&峰值处理能力
异步通信

核心概念

**消息:**主要由key和value组成,key用于路由分区

**Topic:**存储消息的逻辑概念,即一个消息集合。每个Topic可以有多个生产者push消息,也可以有多个消费者pull消息
每个Topic可以分为多个分区。每个消息被添加到分区时,都会被分配一个offset,用于保证消息在分区内的顺序。

**Log:**分区在逻辑上对应一个Log。Log可以对应到磁盘上的一个文件夹。
Log由多个Segment组成,每个Segment对应一个日志文件和索引文件。
因为Kafka采用顺序I/O,所以只向最新的Segment追加数据。
索引文件采用稀疏索引,运行时映射到内存。

保留策略:
1.根据消息保留的时间删除
2.根据Topic存储数据的大小,删除最旧的消息。
Kafka启动一个后台线程定期检查。

日志压缩:
key和value会不断变化,消费者只关心key对应的最新的value值。
Kafka启动一个后台线程定期将相同key的消息进行合并,只保留最新的value值。

Broker:
一个单独的Kafka Server. Broker的主要工作就是接收生产者发过来的消息,分配offset,保存到磁盘。接收并响应消费者、其他Broker的请求。

副本:
用于冗余备份,每个Partition可以有多个副本。所有的读写请求都由选举出的Leader副本处理,Follower副本同步更新到自己的Log.

ISR集合:
1)副本所在节点维持与zk的连接
2)副本最新消息的offset与Leader副本的最新消息的offset的差值不能超过阈值
Leader副本维护这个集合。

HW&LEO:
HW标记了一个特殊的offset.消费者只能拉取到HW之前的消息。
当ISR集合中全部的Follower副本都拉取了HW指定消息进行同步后,Leader副本会递增HW的值。
LEO指向追加到当前副本的最新消息的offset.

Cluster&Controller:
多个Broker可以做成一个Cluster(集群)对外提供服务,每个Cluster当中会选举出一个Broker来担任Controller. Controller是集群的指挥中心。
Controller负责管理分区的状态、管理每个分区的副本状态、监听zk中数据的变化等工作。

生产者

消费者:
Consumer自己维护消费到哪个offset

Consumer Group:
logical subscriber
Consumer Goup保证其订阅的Topic的每个分区只被分配给此Consumer Goup的一个消费者处理。
广播:每个Consumer 在一个独立的Consumer Goup
独占:每个Consumer在同一个Consumer Goup
水平扩展和故障转移

https://juejin.im/post/5c94f4ed6fb9a070e4623687#heading-7

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章