Kafka核心技术与实战——01 | 消息引擎系统ABC
Posted minimalist
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kafka核心技术与实战——01 | 消息引擎系统ABC相关的知识,希望对你有一定的参考价值。
- Apache Kafka 是一款开源的消息引擎系统
- “消息队列”“消息中间件”的提法想必你一定是有所耳闻的
- 这类系统引以为豪的消息传递属性,就像引擎一样,具备某种能量转换传输的能力
- 消息引擎系统的功能
- 消息引擎传输的对象是消息;
- 如何传输消息属于消息引擎设计机制的一部分
- 既然消息引擎是用于在不同系统之间传输消息的,那么如何设计待传输消息的格式从来都是一等一的大事
- Kafka 的选择:它使用的是纯二进制的字节序列。当然消息还是结构化的,只是在使用之前都要将其转换成二进制的字节序列
- 消息设计出来之后还不够,消息引擎系统还要设定具体的传输协议,即我用什么方法把消息传输出去。
- 点对点模型:也叫消息队列模型。如果拿上面那个“民间版”的定义来说,那么系统 A 发送的消息只能被系统 B 接收,其他任何系统都不能读取 A 发送的消息。日常生活的例子比如电话客服就属于这种模型:同一个客户呼入电话只能被一位客服人员处理,第二个客服人员不能为该客户服务。
- 发布 / 订阅模型:与上面不同的是,它有一个主题(Topic)的概念,你可以理解成逻辑语义相近的消息容器。该模型也有发送方和接收方,只不过提法不同。发送方也称为发布者(Publisher),接收方称为订阅者(Subscriber)。和点对点模型不同的是,这个模型可能存在多个发布者向相同的主题发送消息,而订阅者也可能存在多个,它们都能接收到相同主题的消息。生活中的报纸订阅就是一种典型的发布 / 订阅模型。
- 为什么需要消息引擎
- 削峰填谷
- 缓冲上下游瞬时突发流量,使其更平滑
- 消息引擎系统的另一大好处在于发送方和接收方的松耦合,这也在一定程度上简化了应用的开发,减少了系统间不必要的交互
- 引入像 Kafka 这样的消息引擎系统来对抗这种上下游系统 TPS 的错配以及瞬时峰值流量
- 当引入了 Kafka 之后,上游订单服务不再直接与下游子服务进行交互。
- 当新订单生成后它仅仅是向 Kafka Broker 发送一条订单消息即可。
- 类似地,下游的各个子服务订阅 Kafka 中的对应主题,并实时从该主题的各自分区(Partition)中获取到订单消息进行处理,从而实现了上游订单服务与下游订单处理服务的解耦。
- 这样当出现秒杀业务时,Kafka 能够将瞬时增加的订单流量全部以消息形式保存在对应的主题中,既不影响上游服务的 TPS,同时也给下游子服务留出了充足的时间去消费它们。这就是 Kafka 这类消息引擎系统的最大意义所在。
- 聪明人也要下死功夫
- 当我感到浮躁的时候它能帮我静下心来踏踏实实做事情
以上是关于Kafka核心技术与实战——01 | 消息引擎系统ABC的主要内容,如果未能解决你的问题,请参考以下文章
Kafka核心技术与实战——02 | 一篇文章带你快速搞定Kafka术语
Kafka核心技术与实战——18 | Kafka中位移提交那些事儿
Kafka核心技术与实战——09 | 生产者消息分区机制原理剖析