从Kafka看Broker中间件的设计


1. 软件设计要求

满足以下功能:

  • 消息模型
    1. Req-Rep模型(http服务器)
    2. Pub-Sub模型(消息队列)
    + push模式:多播/监听队列
    + pull模式:消息存储/序列化
    3. Producer-Consumer模型(Broker缓存)
  • 线程关系
    • 心跳机制
    • 独立线程负责多路复用
    • 数据的包装struct
  • 消息路由
    • topic_routing

wechat: 《吃透 MQ 系列》之扒开 Kafka 的神秘面纱

使用Broker中间件的优势:

  1. 系统解耦

    快递员跟收件人来打比方的话,快递员送货如果都送到每个人手里的话,那么快递员要一个个打电话,收件人收到电话之后,要在家等着快递。快递员跟收件人是紧密耦合在一起的。如果门口保安可以代收快递的话,快递员跟收件人就解耦了,快递员放在门口保安处,收件人去门口保安处领,就可以了,不用必须等着或者必须送到。这种就叫解耦

  2. 异步处理

    还是上面的例子,快递员给收件人打电话,说马上送快递。收件人说不行,要去上班,你放门口老大爷那就行。就是说收件人不用等着送到才进行下一件事,这就叫做异步处理。

  3. 削峰限流

    有一天你买的快递到了,你媳妇、你爸妈买的快递都到了,打电话都让你去取,他们分别在小区的东南西北门都有,半个小时不取的话,就走了。你这个时候会不会手忙脚乱。但是这会你跟他们说:都给我放在南门老大爷那边。这会就是快递员去放到那边,你可以慢慢的取了。这就是削峰限流的意思

这样,一条消息的流转路径就如下图所示,先走主题路由(topic),然后走分区路由(partition),最终决定这条消息该发往哪个分区。

  • 生产消息
    • 批量发送: 由于频繁发送的话,可能会比较占网络,可以在参数设置batch的方式进行发送
    • 消息压缩
    • 高效序列化
    • 内存池复用
  • 存储消息
    • IO多路复用
原文地址:https://www.cnblogs.com/brt2/p/15531779.html