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 级返回结果