Message Queues and Kafka Basics
内容提要
消息队列用于解耦、削峰和日志处理,要求高吞吐、高并发、高可用。Kafka是分布式、分区、多副本的日志服务,适合高吞吐场景。核心概念包括Topic、Cluster、Producer、Consumer、ConsumerGroup、Partition和Offset,其中Offset在分区内严格递增。
延伸解读
消息队列的典型应用场景
文章指出消息队列可用于解耦、削峰和日志处理。解耦时,存储服务崩溃可将记录先加入队列,由生产者发送、消费者异步处理;削峰时,将订单请求放入队列,每次只处理10个请求,并立即通知客户下单成功,后续异步执行;日志处理则可将日志放入队列,再通过ES、Kibana等组件分析。这些场景体现了消息队列在高并发下的缓冲与异步能力。
主流消息队列的选型对比
文章对比了Kafka、RocketMQ、Pulsar和BMQ。Kafka是分布式、分区、多副本的日志提交服务,适合高吞吐场景;RocketMQ具有低延迟、强一致、高性能、高可靠、万亿级容量和灵活扩展性,常用于实时场景;Pulsar是云原生分布式消息流平台,采用存算分离架构;BMQ架构类似Pulsar,初期定位承接高吞吐离线业务,逐步替换Kafka集群。选型需结合具体场景。
Kafka核心概念解析
文章介绍了Kafka的基本概念:Topic是逻辑队列,每个业务场景对应一个Topic;Cluster是物理集群,可包含多个Topic;Producer负责发送消息到Topic;Consumer负责消费消息;ConsumerGroup中不同组的消费进度互不干涉;Partition是Topic的分片,不同分片可并发处理以提高吞吐;Offset是消息在Partition内的相对位置,可理解为唯一ID,在Partition内部严格递增。
Q&A
消息队列主要用来解决哪些问题?
消息队列主要用于解耦、削峰和日志处理。例如,当存储服务崩溃时,可以将记录加入消息队列进行解耦;面对高并发请求时,可以通过消息队列削峰,每次只处理部分请求;日志可以放入消息队列,再通过ES、Kibana等组件进行分析。
Kafka 适合什么样的场景?
Kafka 是一个分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色。它常用于处理日志信息、程序运行中的 Metrics 数据以及用户行为数据。
Kafka 的基本概念有哪些?
Kafka 的基本概念包括:Topic(逻辑队列,每个业务场景一个topic)、Cluster(物理集群,可包含多个topic)、Producer(消息生产端)、Consumer(消息消费端)、ConsumerGroup(消费者组,不同组消费进度互不干涉)、Partition(topic的分片,支持并发处理提高吞吐)、Offset(消息在partition内的相对位置,唯一ID,严格递增)。
如何使用 Kafka 发送和接收消息?
使用 Kafka 的步骤:1. 创建 Kafka 集群;2. 在集群中创建 Topic 并设置分区数量;3. 引入对应语言的 SDK,配置集群和 Topic 等参数,初始化生产者,调用 Send 方法发送消息;4. 引入 SDK,配置参数,初始化消费者,调用 Poll 方法接收消息。
消息队列的发展历史是怎样的?
消息队列的历史可追溯至1983年,Vivek 设想了一种通用软件总线,诞生了第一个现代消息队列软件 TIB。随后 IBM 研发了 WebSphere MQ,微软也加入。2001年 Sun 发布 JMS 规范,但仅适用于 Java。2004年 AMQP 协议诞生,促进了消息队列的繁荣。如今开源消息中间件如 ActiveMQ、RabbitMQ、Kafka、RocketMQ、Pulsar 等成为互联网应用标配。
Kafka 中的 Offset 是什么?
Offset 是消息在 partition 内的相对位置信息,可以理解为唯一 ID,在 partition 内部严格递增。