青训营X豆包MarsCode 技术训练营 | 消息队列kafka

1 阅读4分钟

消息队列场景

  1. 系统崩溃后的恢复:当系统崩溃或删除时,如何恢复数据和状态。
  2. 大规模订单处理:在大规模订单涌入时,系统如何高效处理。
  3. 链路耗时优化:如何优化长尾链路的耗时。
  4. 日志存储问题:如何有效存储和处理日志,以便快速修复问题。

消息队列的主要作用

  1. 解耦:将系统的各个组件解耦,使得各个组件可以独立开发、部署和扩展。
  2. 削峰:通过消息队列缓冲高峰期的请求,避免系统过载。
  3. 异步:支持异步处理,提高系统的响应速度和吞吐量。
  4. 日志处理:高效存储和处理日志,便于后续分析和故障排查。

消息队列是啥

消息队列简单说是一个保存消息的容器,本质上是一个队列。但它需要支持高吞吐、高并发,并且高可用。消息队列的过程:生产者 -> Message -> 消息队列 -> 消费者。常见的消息队列有Kafka、BMQ、RocketMQ

Kafka

场景

  • 离线消息处理:处理大规模数据流。
  • 日志信息处理:收集和处理日志数据。
  • 程序状态信息采集处理:监控和管理程序状态。
  • 用户行为:分析用户行为数据。

使用

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

基本概念

  • Topic:逻辑队列,不同主题的消息存储在不同的Topic中。
  • Cluster:物理集群,每个集群中可以建立多个不同的Topic。
  • Producer:生产者,负责将业务消息发送到Topic中。
  • Consumer:消费者,负责消费Topic中的消息。
  • ConsumerGroup:消费者组,不同组的Consumer消费进度互不干涉。

Topic中的分区

  • Partition:Topic中的分区,支持并发处理。
  • Offset:消息在Partition内的相对位置信息,可以理解为唯一ID,在Partition内部严格递增。

Partition的副本

  • Replica:每个分片有多个副本,其中一个为Leader副本,其他为Follower副本。
  • Leader Replica:从ISR(In-Sync Replicas)中选出。
  • Follower Replica:备份副本,差距过大可能会被剔除,根据时间戳划分。

Broker

  • Controller:负责分配任务。
  • 顺序写:采用顺序写入,减少寻道时间。

Kafka的上层

  • Zookeeper:负责存储集群元信息,包括分区分配信息等。

消息流程

Producer -> 生产 -> Broker -> 消费 -> Consumer

大量消息优化思路

  • 批量发送:减少IO次数,增强发送能力。
  • 压缩:采用zstd等压缩算法,减少消息大小。

日志文件

  • LogSegment:日志文件,偏移量索引文件,时间戳索引文件。
  • 二分法:查找小于目标offset或时间戳的最大文件位置。

Partition分配

  • 手动分配:根据业务需求手动分配,不能容灾,但速度快。
  • Coordinator:自动分配,帮助Consumer自动分配。

提高吞吐和稳定性的方法

  1. Producer:批量发送、数据压缩
  2. Broker:顺序写,消息索引,零拷贝
  3. Consumer:Rebalance

Kafka的缺点

  1. 运维成本高:维护和管理复杂。
  2. 负载不均衡:在某些场景下,解决方案复杂。
  3. 没有自己的缓存:完全依赖Page Cache。
  4. Controller和Coordinator:与Broker在同一进程中,大量IO可能影响性能。

结合kafka面试题

在面试的时候,见的Kafka相关问题包括:

1、Kafka的基本架构和核心概念:Kafka由Producer、Broker、Consumer和ConsumerGroup组成。Topic是逻辑队列,Partition支持并发,Offset是消息的唯一标识。Replica机制确保高可用性,Leader和Follower副本协同工作。

2、Kafka的高吞吐和高并发特性:Kafka通过批量发送、消息压缩、顺序写入和零拷贝技术实现高吞吐和低延迟。这些技术减少了网络传输和磁盘I/O的开销,提高了整体性能。

3、Kafka的消费模型:Kafka支持两种消费模型,一种是基于Pull的模型,另一种是基于Push的模型。Consumer通过Rebalance机制自动分配Partition,确保负载均衡和故障恢复。

4、Kafka的容错性和高可用性:Kafka通过Replica机制和ISR(In-Sync Replicas)确保数据的可靠性和高可用性。Leader副本负责处理读写请求,Follower副本同步数据,当Leader故障时,ISR中的一个Follower会被选为新的Leader。

5、Kafka的常见应用场景:Kafka常用于日志收集、实时数据分析、消息传递和事件驱动架构。在这些场景中,Kafka的高吞吐、低延迟和可扩展性优势明显。