Kafka核心技术与实战——01 | 消息引擎系统ABC

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

相关推荐