2020/7/31 15:15:20
特性
高吞吐、可持久化、可水平扩展、支持流数据处理
消息系统
系统解耦、冗余存储、流量削峰、缓冲、异步通信、扩展性、可恢复性
消息顺序性保障、回溯消费
存储系统
磁盘存储、多副本机制
Topic的日志压缩功能
流式处理平台
流式处理类库:窗口、连接、变换、聚合…
架构
Producer、broker、Consumer、Zookeeper集群
Topic、Partition
分区在存储层面可以看作一个可追加的Log文件
offset 消息在分区中的唯一标识,用来保证消息在分区内的顺序性,不跨分区(即分区内有序,而不是主题有序)
多副本机制
一主多从
leader
负责与Producer和Consumer交互
负责维护和跟踪ISR中所有follower的滞后状态,和副本在ISR、OSR之间的转移
follower
只负责同步leader消息
follower相对leader会有一定程度的消息滞后(指可忍受的滞后范围,可通过参数配置)
AR集合 所有副本
ISR集合 与leader保持一定程度同步的副本(包括leader),有资格被选举
OSR集合 与leader同步滞后过多的副本(不包括leader),没有资格被选举(可通过配置参数修改)
AR=ISR+OSR。正常情况下AR=ISR,OSR=null
副本同步
HW(High Watermark) 标识一个offset,Consumer只能拉取HW之前(不含HW)的消息
LEO(Log End Offset) 标识当前日志文件中下一条待写入消息的offset。由每个副本自身维护
ISR中,分区的HW=min(LEO)
理解
对于一个分区的ISR:
1. 消息写入leader前,初始状态所有副本LEO保持一致,HW=LEO;
2. 消息写入leader后,leaderLEO变大,HW<leaderLEO;
3. follower开始同步数据,HW=min(followerLEO)<leaderLEO;
4. follower同步结束,所有副本LEO保持一致,HW=LEO。
注:在整个过程中,Consumer只能消费HW之前(不含HW)的消息
Kafka副本机制,既不是完全的同步复制,也不是单纯的异步复制,有效的权衡了数据可靠性和性能之间的关系
安装与配置
JDK、Zookeeper、Kafka