Kafka 特点简介

Kafka 特点简介


kafka 是一个分布式消息引擎系统

消息引擎系统:一组规范,利用这组规范在不同系统之间传递语义准确的消息,实现松耦合的异步式数据传递

  • kafka 的消息传输格式:二进制的字节序列
  • kafka 的消息传输协议:发布订阅模式(一个或多个发布者和一个多个消费者)

为什么需要消息引擎:

  • 削峰填谷 – 上游流量突增 减轻下游的压力
  • 降低上下游的耦合性
  • 缓冲
  • 异步通信

Kafka 特性


高可用:

  1. 有多个Broker: Broker 负责接收和处理客户端发送过来的请求,以及对消息进行持久化
  2. 数据提供多个副本: 多个副本之间分 leader 和 follower,只有 leader 副本对外提供服务

Kafka 的副本机制:producer 向 leader 副本写消息;而 consumer 向 leader 副本读消息;
至于 follower 副本只向 leader 副本同步数据;

Kafka 的副本机制提供了数据的持久化或消息不丢失,但没有解决伸缩性的问题,以至于 leader 副本在的 Broker
节点无法容纳更多的数据; 那么 Kafka 的 partition 分区,就是解决伸缩性问题的;

Kafka 中 副本是在 partition 层级实现的,对每个 partition 都有各自的副本;每个分区下可以配置若干个副本,其中只能有 1 个领导者副本和 N-1 个追随者副本。

高吞吐:

  1. 顺序写磁盘 + mmap

    • 优化写性能:顺序写减少磁盘寻址时间,MMAP 利用 PageCache 页缓存降低 IO 使用率;

    工作原理是直接利用操作系统的Page实现文件到物理内存的直接映射。完成MMP映射后,
    用户对内存的所有操作会被操作系统自动的刷新到磁盘上,极大地降低了IO使用率。
    PageCage 页缓存是在内存中分配的,所以消息写入的速度很快

  2. 高效读 零拷贝

    • 优化读性能: 减少系统调用和内核态切换次数;
    1. 将数据读取到内核的 pagecache 中
    2. 直接将数据从 pagecache 写入网卡

Kafka 的三层消息架构


  • 第一层是主题层,每个主题可以配置 M 个分区,而每个分区又可以配置 N 个副本。
  • 第二层是分区层,每个分区的 N 个副本中只能有一个充当领导者角色,对外提供服务;其他 N-1 个副本是追随者副本,只是提供数据冗余之用。
  • 第三层是消息层,分区中包含若干条消息,每条消息的位移从 0 开始,依次递增。
  • 最后,客户端程序只能与分区的领导者副本进行交互。
  • 消息:Record。Kafka 是消息引擎嘛,这里的消息就是指 Kafka 处理的主要对象。
  • 主题:Topic。发布订阅的对象; 主题是承载消息的逻辑容器,在实际使用中多用来区分具体的业务。
  • 分区:Partition。一个有序不变的消息序列。每个主题下可以有多个分区。
  • 消息位移:Offset。表示分区中每条消息的位置信息,是一个单调递增且不变的值。
  • 副本:Replica。Kafka 中同一条消息能够被拷贝到多个地方以提供数据冗余,这些地方就是所谓的副本。副本还分为领导者副本和追随者副本,各自有不同的角色划分。副本是在分区层级下的,即每个分区可配置多个副本实现高可用。
  • 生产者:Producer。向主题发布新消息的应用程序。
  • 消费者:Consumer。从主题订阅新消息的应用程序。
  • 消费者位移:Consumer Offset。表征消费者消费进度,每个消费者都有自己的消费者位移。
  • 消费者组:Consumer Group。多个消费者实例共同组成的一个组,同时消费多个分区以实现高吞吐。
  • 重平衡:Rebalance。消费者组内某个消费者实例挂掉后,其他消费者实例自动重新分配订阅主题分区的过程。Rebalance 是 Kafka 消费者端实现高可用的重要手段。

为什么 Kafka 不像 MySQL 那样允许追随者副本对外提供读服务?


如果提供那么就会存在主从数据不一致的问题,同步需要花费时间,可能会导致数据的不一致。
因为 Kafka 的每个分区都已经平均分布到每个 broker 上,已经实现了负载均衡
kafka保存的数据和数据库的性质有实质的区别就是数据具有消费的概念,是流数据,kafka是消息队列,
所以消费需要位移,而数据库是实体数据不存在这个概念,如果从kafka的follower读,消费端offset

Kafka 不只是消息引擎系统, Apache Kafka 是消息引擎系统,也是一个分布式流处理平台,也可以做分布式存储

Kafka 在设计之初就旨在提供三个方面的特性:

  • 提供一套 API 实现生产者和消费者;
  • 降低网络传输和磁盘存储开销;
  • 实现高伸缩性架构
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值