Message Queues and Kafka Basics

💡 原文中文,约2300字,阅读约需6分钟。
📝

内容提要

消息队列用于解耦、削峰和日志处理,要求高吞吐、高并发、高可用。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 内部严格递增。

🏷️

标签

➡️

继续阅读