Kafka

43 阅读3分钟

消息队列

消息队列(MQ),指保存消息的一个容器,本质是个队列。但这个队列,需要支持高吞吐、高并发,并且高可用

Kafka

分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥出色

RocketMQ

低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实时场景运用较广

Pulsar

是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体、采用存算分离的架构设计

BMQ

和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换调对应Kafka集群

Kafka

使用场景

  • 日志信息
  • Metrics数据(程序运行过程中的状态实时分析)
  • 用户行为 搜索、点赞、评论、收藏

使用

  • 创建集群
  • 新增Topic
  • 编写生产者逻辑
  • 编写消费者逻辑

基本概念

  • Topic:逻辑队列,简单来说就是不同的业务场景就是不同的Topic
  • Cluster:物理集群,每个集群可以建立多个不同的Topic
  • Producer:生产者,负责将业务消息发送到Topic
  • Consumer:消费者,负责消费Topic中的消息
  • ConsumerGroup:消费者组,不同组Consumer消费进度互不干涉
  • Partition:Topic分区,不同的分区消息可以并发处理
  • Offset:消息在Partition内的相对位置,可以理解为唯一ID,在Partition内部严格递增
  • Replica:Partition 的副本,用来保障Partition的高可用性。有两个一个leader一个follower
  • Broker:Kafka 集群由多个 Broker 组成,每个 Broker 是一个独立的 Kafka 服务器,负责存储和处理消息

零拷贝

零拷贝技术通过减少数据在内核空间和用户空间之间的拷贝次数,显著提高了 Kafka 的吞吐量和性能。

传统数据传输过程

  1. 应用程序读取数据: 应用程序从磁盘或网络读取数据,数据首先从磁盘或网络设备拷贝到内核缓冲区。
  2. 内核缓冲区到用户缓冲区:数据从内核缓冲区拷贝到用户空间的缓冲区,供应用程序使用。
  3. 用户缓冲区到内核缓冲区:应用程序处理完数据后,将数据从用户缓冲区拷贝回内核缓冲区,准备发送或写入磁盘。
  4. 内核缓冲区到网络或磁盘:数据从内核缓冲区拷贝到网络设备或磁盘设备,完成数据传输。

sendfile

sendfile 是一个系统调用,允许将数据从一个文件描述符直接传输到另一个文件描述符,而无需将数据拷贝到用户空间。

  • Kafka Broker 从磁盘读取消息数据,数据首先从磁盘拷贝到内核缓冲区。
  • Kafka Broker 调用 sendfile,将数据从内核缓冲区直接传输到网络设备,而无需将数据拷贝到用户空间。

mmap

mmap 是一种内存映射技术,允许将文件或设备映射到进程的地址空间,从而可以直接访问文件数据,而无需拷贝。

  • Kafka Broker 调用 mmap,将消息数据文件映射到进程的地址空间。
  • Kafka Broker 直接读写消息数据,内核负责将数据同步到磁盘或网络设备。