转载

下一代分布式消息系统Apache Kafka

下一代分布式消息系统Apache Kafka

一、开篇思考

下一代分布式消息系统Apache Kafka

消息语义:

持久性 安全 淘汰 交付 路由 批量 消息过滤 排队标准 已收通知

下一代分布式消息系统Apache Kafka

IO:

下一代分布式消息系统Apache Kafka

机械磁盘慢

现代操作系统优化 

  1. 使用read-ahead和write-behind技术,预读取成块数据,将微小琐碎的逻辑写入组织成一次较大的物理写入
  2. 常用空闲内存用作磁盘缓存
  3. 线性的访问磁盘,很多时候比随机的内存访问快得多

JVM 2个事实

  1. Java对象占用空间非常大,差不多要存储的数据的两倍甚至更高
  2. 随着堆中数据量的增加,GC(垃圾回收)变得越来越困难

JVM 1个假设

  • 在64G内存的机器上,不得不使用到50G~56G的内存空间
  • 当系统重启的时候,又必须要将数据刷到内存中(每分钟1GB内存),即使冷刷新(在使用数据的时候发现没有再刷到内存)也会导致最初的时候性能非常慢

图解 零拷贝

下一代分布式消息系统Apache Kafka

下一代分布式消息系统Apache Kafka

下一代分布式消息系统Apache Kafka

设计 常量复杂度 的磁盘操纵

B树的复杂度是O(logN),通常被认为就是常量复杂度

但对于磁盘操作来说并非如此:磁盘进行一次搜索需要10ms,每个磁盘在同一时间只能进行一次搜索,并发处理困难 对树结构的性能的观察结果表明:其性能往往随着数据的增长而线性下降,数据增长一倍,速度就会降低一倍

  1.  线性访问减小磁盘寻道
  2.  压缩数据减小IO压力
  3.  使用零拷贝(zero copy)技术

二、Kafka特性 & 原理

一个高性能分布式(Distribution),可分区(Partitioned),可备份(Replicated),基于Zookeeper协调的发布/订阅消息队列系统
快速持久化
以时间复杂度为O(1)的方式提供消息持久化能力
高吞吐率
在一台普通的服务器上可以达到10W/s级的消息处理
分布式负载均衡
Broker/Producer/Consumer 都支持分布式和负载均衡
水平扩展
支持在线平滑水平扩展

kafka名词解释:

  1. Broker & Controller & Producer & Consumer & Consumer Group 2. Topic & Partition & Segment & Offset
  2. Replication & Replication Leader & Replication Follower
  3. Assigned Replications & Preferred Replication
  4. Message & Message Set

下一代分布式消息系统Apache Kafka

主题解析

下一代分布式消息系统Apache Kafka

部分文件实现

下一代分布式消息系统Apache Kafka

Broker & Topic Partition

下一代分布式消息系统Apache Kafka

消息交付

下一代分布式消息系统Apache Kafka

下一代分布式消息系统Apache Kafka

同步语义

  1. 每一个Broker节点必须维护和Zookeeper的连接Session,Zookeeper通过心跳机 制检查每个结点的连接 
  2. Follower Broker节点必须及时同步Leader Broker节点,不能落后Leader Broker 节点太多 

副本和提交log

  1. 当且仅当Message被所有的Replication写入到Log中,才算"Committed"
  2. 只有Committed的Message,才会被Consumer读取  

Persistence & Efficiency 

  1. 每一个Follower都只从Leader Pull数据
  2. 每一个Follower收到数据后,立即向Leader发送ACK,而非等到数据写入Log后

Consumer  & Partition 

  1. 同一Consumer Group中Consumer竞争Partition,即队列语义 
  2. 不同Consumer Group中Consumer共享Partition,即主题语义 

消息传递语义

  1. At most once - 消息可能会丢,但绝不会重复传输
  2. At least once - 消息绝不会丢,但可能会重复传输
  3. Exactly once - 每一条消息肯定会被传输一次且仅传输一次,理想状态 

Leader Election算法 

  1. Leader Election
  2. In-Sync Replicas Approach VS. Majority Vote
  3. 某一个Partition所有Replication不工作

Controller思考 

  1. 选举Broker Leader最简单最直观的方案
  2. 该选举Broker Leader的方案引入了哪些问题 

Partition 思考

  1. Partition的数据结构,逻辑上/物理上的存储结构
  2. Broker&Topic&Partition关系
  3. Partition&Consumer&Consumer Group关系 

Producer思考

  1. Load balancing
  2. Asynchronous send

Consumer思考

  1. Push VS. Pull
  2. Offset归属,存储
  3. 触发Partition Rebalance的条件及问题 
  4. 减轻了Broker设计的复杂度

三、Kafka设计 & 实现

Broker内部

下一代分布式消息系统Apache Kafka

Broker故障转移

下一代分布式消息系统Apache Kafka

插件删除Topic

下一代分布式消息系统Apache Kafka

LeaderAndIsrRequest 响应

下一代分布式消息系统Apache Kafka

Partition重新分配案例

下一代分布式消息系统Apache Kafka

Replication工具

  1. Topic Tool
  2. Replica verification Tool
  3. Preferred Replica Leader Election Tool
  4. Kafka Reassign Partitions Tool
  5. State Change Log Merge Tool

Preferred Replica Leader Election Tool

在8个Broker的kafka集群上,创建topic为my_topic,replication-factor为3,partition-factor为8,Partition/Replica分布

下一代分布式消息系统Apache Kafka

手动停止Broker 1/2/4,Partition/Replica分布

下一代分布式消息系统Apache Kafka

手动启动Broker 1,Partition/Replica分布

下一代分布式消息系统Apache Kafka

运行该工具后,Partition/Replica分布

下一代分布式消息系统Apache Kafka

手动启动Broker 2/4,Partition/Replica分布

下一代分布式消息系统Apache Kafka

运行该工具后,Partition/Replica分布

下一代分布式消息系统Apache Kafka

将Topic的所有Partition重新分配到Broker 4/5/6/7上,初始Partition/Replica分布

下一代分布式消息系统Apache Kafka

将Topic的所有Partition重新分配到Broker 4/5/6/7上,最终Partition/Replica分布

下一代分布式消息系统Apache Kafka

分享作者:王先明

原文  http://openskill.cn/article/295
正文到此结束
Loading...