timerring

Message Queues and Kafka Basics

August 27, 2023 · 7 min read
Tutorial
Message Queue | Kafka
If you have any questions, feel free to comment below. Click the block can copy the code.
And if you think it's helpful to you, just click on the ads which can support this site. Thanks!

走进消息队列 #

面对存储行为服务崩溃的时候,可以采用解耦的方式,将记录加入消息队列中,然后作为生产者,此时存储服务作为一个消费者来消耗。

面对多个请求同时进行时,可以采用削峰的方式解决,将订单也加入消息队列中,然后每次只处理 10 个请求。

把发起订单的请求放入消息队列中,这时就可以通知客户下单成功了,然后将下面的三个请求异步地执行即可。

将日志放入消息队列中,然后通过日志的相关组件例如 ES 引擎等等,Kibana 展示平台进行分析。

什么是消息队列? #

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

前世今生 #

历史 #

  • 消息中间件诞生的很早,在 1983 年互联网应用还是一片荒芜的年代,美国印度裔 Vivek 就设想了一种通用软件总线,世界上第一个现代消息队列软件 The Information Bus (TIB)。
  • TIB 受到了企业的欢迎,这家公司的业务发展引起 IBM 的注意,于是他们开始研发了自己消息队列软件,于是才有了后来的wesphere mq,再后来微软也加入了其中。
  • 接近 2000 年的时候,互联网时代已经初见曙光,全球的应用程序得到了极大地丰富,对于程序之间互联互通的需求越来越强烈,但是各大 IT 公司之间还是牢牢建立着各种技术壁垒,以此来保证自己的商业利益,所以消息中间件那时还是大型企业才能够用的起的高级玩意。
  • 2001 年 sun 发布了 jms 技术,试图在各大厂商的层面上再包装一层统一的 java 规范。Java 程序只需要针对 jms api 编程就可以了,不需要再关注使用了什么样的消息中间件,但是 jms 仅仅适用于 java。
  • 2004 年AMQP(高级消息队列协议) 诞生了,才是真正促进了消息队列的繁荣发展,任何人都可以针对 AMQP 的标准进行编码。
  • 除了刚才介绍过的收费中间件,后来开源消息中间件开始层出不穷,常见比较流行的有 ActiveMQ、RabbitMQ 、Kafak、阿里的 RocketMQ,以及目前存算分离的 Pulsar,在目前互联网应用中消息队列中间件基本上成为标配。

业界消息队列对比 #

  • Kafka: 分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色
  • RocketMQ: 低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实时场景中运用较广
  • Pulsar: 是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体、采用存算分离的架构设计
  • BMQ: 和 Pulsar 架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的 Kafka 集群

Kafka #

使用场景 #

有关于日志信息,程序运行中的 Metrics 数据(程序运行过程中的相关状态信息),以及用户的行为,交给 kafka 进行处理。

如何使用 Kafka #

  1. 首先需要创建一个 Kafka 集群
  2. 需要在这个集群中创建一个 Topic,并且设置好分区数量
  3. 引入对应语言的 SDK,配置好集群和 Topic 等参数,初始化一个生产者,调用 Send 方法,将你的 Hello World 发送出去
  4. 引入对应语言的SDK,配置好集群和Topic等参数,初始化一个消费者,调用Poll方法,你将收到你刚刚发送的Hello World

基本概念 #

概述 #

  • Topic:Kakfa 中的逻辑队列,可以理解成每一个不同的业务场景就是一个不同的 topic,对于这个业务来说,所有的数据都存储在这个 topic 中
  • Cluster:Kafka 的物理集群,每个集群中可以新建多个不同的 topic
  • Producer:顾名思义,也就是消息的生产端,负责将业务消息发送到 Topic 当中
  • Consumer:消息的消费端,负责消费已经发送到 topic 中的消息
  • ConsumerGroup: 消费者组,不同组 Consumer 消费进度互不干涉
  • Partition:通常topic会有多个分片,不同分片直接消息是可以并发来处理的,这样提高单个Topic的吞吐

Offset #

Offset: 消息在 partition 内的相对位置信息,可以理解为唯一 ID,在 partition 内部严格递增。


<< prev | TOS Object... Continue strolling Types of... | next >>

If you want to follow my updates, or have a coffee chat with me, feel free to connect with me: