发布与订阅消息系统

  • 在了解发布与订阅系统之前,我们需要了解一下需求场景,知道为什么会出现这个系统?

    • 在传统的客户端与服务器模型中,客户端与服务器之间的通信是直接的,客户端只需要知道服务器的IP和端口,才能发送请求。这种模型没有什么问题,但是有个弊端,就是会导致系统紧密耦合,这对于系统的可扩展性和可靠性造成影响。
    • 而加入发布与订阅系统,就可以解耦,客户端只需要发布消息,服务端只需要从系统中获取请求,再处理返回给客户端

什么是发布与订阅消息系统

  • 发布与订阅系统(Publish-Subscribe System)是一种消息传递模型,用于在分布式系统中传递消息。在发布与订阅系统中,消息的发送者(发布者)不会直接将消息发送给接收者(订阅者),而是将消息发送到中间件(消息代理或消息队列),由中间件负责将消息传递给一个或多个感兴趣的接收者。

Kafla

  • Kafka 就是发布与订阅系统,官网的介绍(Kafka 是一个分布式系统,由通过高性能TCP 网络协议进行通信的服务器和客户端组成。它可以部署在本地和云环境中的裸机硬件、虚拟机和容器上。),下面我们通过一些概念,具体来了解kafka

生产者和消费者

  • 既然是发布与订阅系统,那我们肯定要了解发布与订阅模式。
  • 简介:是一种常见的消息传递模式
  • 作用:实现解耦,灵活和可扩展的消息传递
  • 组成:
    • 发布者:将消息发布在指定的主题中
    • 订阅者:订阅感兴趣的主题,接收相应的消息
    • 主题:定义了一组相关的消息类型,发布者可以将消息发布到指定的主题中,订阅者可以订阅感兴趣的主题
  • 例子:假设有一个在线新闻网站,用户可以注册并订阅感兴趣的新闻主题,例如体育、科技、娱乐等。当有新的新闻发布时,网站会将新闻发布到相应的主题中,订阅了该主题的用户会收到相应的新闻推送。这个例子中,新闻网站是发布者,用户是订阅者,新闻主题是主题。
    • 具体地,整个流程可以分为以下步骤:

      • 用户注册并订阅感兴趣的新闻主题,例如体育、科技、娱乐等。
      • 新闻网站发布新闻到相应的主题中,例如体育新闻发布到体育主题中。
      • 订阅了该主题的用户会收到相应的新闻推送,例如订阅了体育主题的用户会收到体育新闻推送。
    • 在这个例子中,发布者(新闻网站)将消息(新闻)发布到指定的主题(新闻主题)中,订阅者(用户)订阅感兴趣的主题(体育、科技、娱乐等),接收相应的消息(新闻推送)。通过发布和订阅模式,新闻网站可以实现解耦、灵活和可扩展的新闻推送,用户可以自由选择感兴趣的主题,接收相应的新闻推送。

消息和批次

  • 知道了发布与订阅模式之后,我们知道除了角色之后,还有个很重要的东西需要了解,就是消息
  • 消息在kafka中就是数据单元,是指需要传递和处理的数据单元,通常包括一个key (键)和 value (值),键和值都是字节数组,可以持久化存储,可以被多个消费者消费,也可以被多个生产者发送
  • 但是发布者在发布的消息可能很小,也可能很大,那我们需要对大的数据进行分批次处理,所以跟消息绑定的还有一个概念叫批次
  • 批次是一组消息的集合,大小是可以设置的,通常为几千和几万条消息,作用是可以有效地减少网络的传输和磁盘写入的开销,从而提高消息处理的吞吐量和效率

主题和分区

  • 知道了发布者和订阅者是如何通过消息进行发布和订阅的,我们还需要知道消息是如何存储到系统中的,这个时候就需要引入两个概念,主题和分区
  • 主题:是对消息的分类和归类,发布者将消息发送到对应的主题中,然后订阅者在对应的主题中订阅消息,这样方便管理和使用
  • 主题的消息可能很多,所以我们还需要对单个主题进行分区
  • 分区:是主题的一个子集,是一个有序的消息序列,每个分区在物理上都是独立的日志文件,可以支持单独的读写和复制,分区的数量是可配置的,通常为主题的总数的若干倍。
  • 这么说可能不形象,举个例子:
    • 假设有一个在线电商网站,需要处理用户的订单信息。为了方便管理和查询,网站将订单信息发送到 Kafka 中的一个名为“orders”的主题中。为了提高消息的处理效率和可靠性,网站将“orders”主题分为多个分区,每个分区都是一个有序的消息序列,可以独立读写和复制。
    • 具体地,整个流程可以分为以下步骤:
      • 生产者将订单信息发送到“orders”主题中。
      • Kafka 将订单信息写入“orders”主题对应的分区中。
      • 消费者从“orders”主题中消费订单信息,可以同时从多个分区中消费。
      • 如果一个分区无法处理更多的消息,可以通过增加分区的数量来扩展处理能力。
    • 在这个例子中,“orders”主题是一个逻辑的概念,用于归类和管理订单信息。分区是主题的一个子集,用于实现消息的并发处理和高可用性。通过主题和分区的使用,网站可以方便地管理和查询订单信息,同时也可以提高消息的处理效率和可靠性。

为什么选择Kafla

  • 上面简单介绍了一下kafka,但是这种发布与订阅的系统这么多,为什么要选择kafka呢?kafka有什么优势呢?

    • 可以支持多个生产者:
    • 可以支持多个消费者:一个消息可以给多个消费者消费,并且每个消费者只能消费一次
    • 数据持久化存储和数据保障:允许消费者非实时的读取消息,因为消息会存到磁盘中,持久化数据可以保证数据不会丢失
    • 可扩展性和高可用性:
  • 那kafka 适用于那些场景
    • Kafka 适用于以下场景:

      • 大数据处理和分析:Kafka 可以处理大量的数据流,支持实时处理和批处理,适用于大数据处理和分析场景。
      • 实时数据传输和处理:Kafka 可以支持高吞吐量和低延迟的数据传输和处理,适用于实时数据传输和处理场景。
      • 日志收集和分析:Kafka 可以作为日志收集和分析的中间件,支持实时的日志传输和处理,适用于日志收集和分析场景。
      • 消息队列和通信中间件:Kafka 可以作为消息队列和通信中间件,支持高并发、高吞吐量的消息传递和处理,适用于消息队列和通信中间件场景。
      • 分布式应用和微服务:Kafka 可以作为分布式应用和微服务的消息传递机制,支持分布式应用和微服务之间的通信和协作,适用于分布式应用和微服务场景。

Kafla 学习(一)初始学习kafla相关推荐

  1. 学习记录——初始——计算机学习准备

    学习记录--初始--程序员预备 初衷 我现在是大三的一名通信学院本科生,目前准备做一名社畜程序员,今天偶然间看到了这篇文章,又正准备对之前学习的语言工具进行整理,于是决定用博客记录一下自己的学习过程. ...

  2. 深度强化元学习教程---元学习概述

    深度强化元学习是近期深度学习技术的一个另人瞩目的新兴领域,其利用元学习,解决了深度学习需要大数据集的问题,以及强化学习收敛慢的问题.同时元学习还可以适用于环境不断改变的应用场景,具有巨大的应用前景. ...

  3. 干货丨 简述迁移学习在深度学习中的应用

    文章来源:机器之心 迁移学习是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中. 深度学习中在计算机视觉任务和自然语言处理任务中将预训练的模型作为新模型 ...

  4. 集成学习-Boosting集成学习算法GBDT

    GBDT算法的核心为:先构造一个(决策)树,然后不断在已有模型和实际样本输出的残差上再构造一颗树,依次迭代. 目录 Decistion Tree(决策树) Gradient Boosting(梯度提升 ...

  5. 嵌入式系统的知识体系、学习误区及学习建议

    嵌入式系统的知识体系.学习误区及学习建议 1.嵌入式系统的知识体系     嵌入式系统的应用范围可以粗略分为两大类:电子系统的智能化(工业控制.现代农业.家用电器.汽车电子.测控系统.数据采集等),计 ...

  6. 八千字长文深度解读,迁移学习在强化学习中的应用及最新进展

    点击我爱计算机视觉标星,更快获取CVML新技术 本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载. 机器之心原创 作者:Luo Sainan 编辑:H4O 迁移学习通 ...

  7. 元学习 迁移学习_元学习就是您所需要的

    元学习 迁移学习 Update: This post is part of a blog series on Meta-Learning that I'm working on. Check out ...

  8. 【阅读笔记】联邦学习实战——联邦学习智能用工案例

    联邦学习实战--联邦学习智能用工案例 前言 1. 智能用工简介 2. 智能用工平台 2.1 智能用工的架构设计 2.2 智能用工的算法设计 3. 利用横向联邦提升智能用工模型 4. 设计联邦激励机制 ...

  9. Python3学习笔记之-学习基础(第三篇)

    Python3学习笔记之-学习基础(第三篇) 文章目录 目录 Python3学习笔记之-学习基础(第三篇) 文章目录 一.循环 1.for循环 2.while循环 3.break,continue 二 ...

  10. 【《深度学习入门》—— 学习笔记(一)】

    <深度学习入门>-- 学习笔记(一)_1-4章 第一章 Python入门 略 第二章 感知机(Perception) 2.1 感知机是什么 感知机接收多个输入信号,输出一个信号.x1, x ...

最新文章

  1. 深度学习背后的基础-神经网络揭秘
  2. (转载兼整理)Linux 2.6 下通过 ptrace 和 plt 实现用户态 API Hook
  3. csdn编辑器模板2
  4. 《Android游戏开发详解》一3.1 构造方法
  5. cifar10数据集测试有多少张图_基于特定数据集的Oracle、ClickHouse、ES测试报告
  6. python读取excel指定行列_pandas读取excel指定行列索引header和index_col参数
  7. vmware上安装vxworks(xp环境)
  8. Q83:怎么画多个PLY文件组合的图形[Multiple-Mesh Objects]
  9. 深度剖析redis缓存穿透,缓存击穿,缓存雪崩原因+解决方案
  10. [渝粤教育] 岭南师范学院 文学创意写作 参考 资料
  11. VSFTPD 上传文件 200 227 553错误
  12. 14年和15年的IT公司排行
  13. python unpack_Python:struct模块的pack、unpack
  14. 信息安全技术 代码安全审计规范
  15. python基础(二十三):面向对象编程精髓演练(选课系统)、封装
  16. python实现绘制ROC曲线寻找指标最佳诊断临界值
  17. 非零基础自学Golang 第3章 基本变量与类型 3.1 Go语言变量
  18. NVDLA VP使用指南
  19. 易灵思FPGA--Programming Mode
  20. Windows 下编程检测显示器信息及插拔

热门文章

  1. Android-取得输入法或者系统标题栏、魅族下部smartbar等的高度
  2. 不用微信SDK实现图片分享或文字分享
  3. 全排列+n皇后问题(C++深度优先搜索与广度优先搜索)
  4. mysql的foreach_MySql foreach属性
  5. 设备指纹系列--前端篇
  6. 学习省钱诀窍尽享中华通网络电话
  7. android怎么分享流量,vivo手机怎么开启热点?vivo手机共享流量教程
  8. 无穷级数的多种计算方法
  9. 浏览器模拟器之Splash的使用
  10. 求职的思考–我们应该展示什么_2008校园招聘网_实习与笔试面试经验_UNUS.CN