Please enable JavaScript.
Coggle requires JavaScript to display documents.
Kafka简介 - Coggle Diagram
Kafka简介
:desktop_computer:Raft算法
分布系统一致性问题
:question:
拜占庭将军问题
:envelope_with_arrow:将军身处各地需要信差传递消息
服务器通过网络通信
存在叛徒、间谍
某些服务器失效
发生战争所有将军需要达成共识
分布式服务器集群对外服务保持一致
解决方法
Zookeeper
ZBA协议
Kafka 2.8
A Raft Protocol for the Metadata Quorum
Replace ZooKeeper with a Self-Managed Metadata Quorum
:broken_heart:
Paxos算法
:scream:难理解,难实现
Etcd
Raft算法
问题分解
领导人选举
角色
:man_in_tuxedo:Leader
:boy::skin-tone-2:Candidate
:baby:Follower
任期Term
单调递增 1,2,3
一个任期内
最多一个
Leader,获取
超半数
投票者
任期号小,leader变回follower
:heartbeat:心跳
:speaking_head_in_silhouette:leader任期内广播心跳包,昭告自己的存在
follower收到心跳包后,将选举定时器清零
:alarm_clock:选举定时器
:symbols:
随机重试
:dagger_knife:超时,意味着leader可能挂了,重新开始选举
leader广播心跳周期
小于
超时时间
日志复制
复制内容
:bookmark_tabs:Append Entries RPC
term
command
log index
复制流程
客户端向Leader发送请求
Leader将请求追加到本地日志文件,广播给每个Follower
Follower进行一致性检查,追加Leader的日志条目,并通知Leader
超半数节点已追加日志条目,则Leader commit该日志条目
Leader通知Follower commit日志条目
Leader返回操作结果给客户端
相关资料
:movie_camera:
动画演示
中文博客
共识算法:Raft
Raft 为什么是更易理解的分布式一致性算法
官网
:recycle:什么是Kafka
LinkedIn公司开发,解决数据管道问题
分布式发布订阅消息系统
Apache基金会开源流处理平台
:writing_hand::skin-tone-2:弗兰兹·卡夫卡 小说家 著有《变形记》等名作
:question:为什么用Kafka
MQ系统的优势
:twisted_rightwards_arrows:解耦
异步通信
峰值处理能力
可恢复性
扩展性
Kafka相对其他MQ的优势
快速持久化
顺序保证
高吞吐: 几十万/s
低延时:几毫秒
高并发:支持数千个客户端同时读写
其他MQ
RabbitMQ: 重量级、性能稍差
Redis: 轻量级、数据量大的时候入队较慢
ZeroMQ: 高级复杂队列、非持久化
:book:如何使用Kafka
主要概念
:male-mechanic:Producer
:blond-haired-woman:Consumer
:family:Consumer Group
:incoming_envelope:Topic
Partition
Replica
Leader
Follower
Record
:old_key:Key
Value
Offset
:computer:Broker
安装和基本使用
API
特殊机制
Partition分配策略
Range
Sticky
分区尽可能均衡
尽可能与上次分配相同
Round Robin
消息投递语义
At most once
最多一次,消息可能会丢失,但不会重复
At least once
最少一次,消息不会丢失,可能会重复
Exactly once
只且一次,消息不丢失不重复
默认每五秒自动提交,以上语义都不能满足