Kafka 基础
Kafka是一个分布式的消息引擎
- 削峰填谷
- 应用解耦
- 异步处理
- 高吐出
- 高性能
两种消费模式
架构图
分区副本
数据一致性 高可用性
- 通过ISR 多副本机制
- 数据一致性 LEO和HW(高水位)
- LEO 标识每个分区中最后⼀一条消息的下⼀一个位置,分区的每个副本都有⾃自⼰己的 LEO,ISR 中最⼩小的 LEO即为 HW,俗称⾼高⽔水位,消费者只能拉取到 HW 之前的消息
-
可靠性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