zoukankan      html  css  js  c++  java
  • 从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多路复用
  • 相关阅读:
    重塑矩阵
    数组拆分
    最大连续1的个数
    石子游戏
    概率与期望知识总结
    洛谷 P3951 NOIP 2017 小凯的疑惑
    关于结构体的初始化
    山海经:线段树维护最大子段和
    偏序 分块+bitset
    分块练习C. interval
  • 原文地址:https://www.cnblogs.com/brt2/p/15531779.html
Copyright © 2011-2022 走看看