Kafka
Kafka重要概念.txt
作用:异步通信、系统解耦、流量削峰、缓冲
偏移量的维护:
- 生产者端:segment 文件会分为 .index 文件和 .log 文件存储,偏移量维护在 .index 文件中
- 消费者端:Kafka 中有一个自带的 Topic ->
__consumer_offsets
维护这个偏移量(去ZK中get /kafka/brokers/topics/__consumer_offsets
能看到)
精准一次性消费:At Least Once + 幂等性 = Exactly Once
Topic 是一个逻辑概念
存储的时候存的是 partition 数据
partition
—segment
>log
>index
—segment
>log
>index
消费者分区分配策略
- RoundRobin
- Range
- Sticky
数据可靠性保证:
ack 的应答级别
| 方案 | 优点 | 缺点 | | —- | —- | —- | | 半数以上完成同步,就发送ack | 延迟低 | 选举新的leader时,容忍n台节点的故障,需要2n+1个副本 | | 全部完成同步,才发送ack | 选举新的leader时,容忍n台节点的故障,需要n+1个副本 | 延迟高 |kafka 给 producer 发送 ack,发送的时机是 ISR 中所有 follower 都同步成功之后,返回 ack
ISR:
Leader维护了一个动态的 in-sync replica set (ISR),意为和leader保持同步的follower集合。当ISR中的follower完成数据的同步之后,leader就会给producer发送ack。如果follower长时间未向leader同步数据,则该follower将被踢出ISR,该时间阈值由replica.lag.time.max.ms参数设定。Leader发生故障之后,就会从ISR中选举新的leader。
Kafka 高效读写数据:
- 顺序写磁盘
- 应用 Pagecache
- 零拷贝
Hadoop & Hadoop HA
通过多个 NameNode 消除单点故障
自动故障转移为 HDFS 部署增加了两个新组件:ZooKeeper 和 ZKFailoverController(ZKFC)进程
Edits 日志只有 Active 状态的 NameNode 节点可以做写操作
所有的 NameNode 都可以读取 Edits
共享的 Edits 放在一个共享存储中管理(qjournal 和 NFS 两个主流实现)
edits 文件会记录增删改操作,不记录查询操作,因为不改变数据,然后周期性与 fsimage 文件合并形成新的 edits 文件和合并后的新的 fsimage 文件
edits_inprogress_0001 + fsimage -> edits_inprogress_0002 + fsimage (整合了 edits_inprogress_0001 的更大的 fsimage)
框架之间对比
传统 MR:
- 不擅长实时:无法像 Mysql 一样,在 ms 级或 s 级返回结果