Kafka

290 阅读2分钟

Kafka 基础

Kafka是一个分布式的消息引擎

  • 削峰填谷
  • 应用解耦
  • 异步处理
  • 高吐出
  • 高性能

两种消费模式

图片.png

架构图

图片.png

分区副本

数据一致性 高可用性

  • 通过ISR 多副本机制
    • 数据一致性 LEO和HW(高水位)
    • LEO 标识每个分区中最后⼀一条消息的下⼀一个位置,分区的每个副本都有⾃自⼰己的 LEO,ISR 中最⼩小的 LEO即为 HW,俗称⾼高⽔水位,消费者只能拉取到 HW 之前的消息

图片.png

图片.png

  • 可靠性ack分析 可以保证高可用

    • 仅依靠副本数来⽀支撑可靠性是远远不不够的,⼤大多数⼈人还会想到⽣生产者客户端参数request.required.acks。

    • 对于 acks = 1 的配置,⽣生产者将消息发送到 leader 副本,leader 副本在成功写⼊入本地⽇日志之后会告知⽣生产者已经成功提交,如下图所示。如果此时 ISR 集合的 follower 副本还没来得及拉取到leader 中新写⼊入的消息,leader 就宕机了了,那么此次发送的消息就会丢失。

    • 对于 ack = -1 的配置,⽣生产者将消息发送到 leader 副本,leader 副本在成功写⼊入本地⽇日志之后还要等待 ISR 中的 follower 副本全部同步完成才能够告知⽣生产者已经成功提交,即使此时 leader 副本宕机,消息也不不会丢失

    • 对于 ack = -1 的配置这意味着producer⽆无需等待来⾃自broker的确认⽽而继续发送下⼀一批消息。这种情况下数据传输效率最⾼高,但是数据可靠性确是最低的。

  • 基于磁盘存储

高性能 磁盘顺序读写

  • Kafka使用的是磁盘顺序读写方式,极大的提升读写性能
  • 高性能 页缓存
  • 零拷贝
  • 异步发送
  • 批量拉取数据 减少网络IO

技术选型

要用事务的话使用rocketMQ