分布式消息服务kafka

分布式消息队列DMS

什么是消息中间件?

消息中间件是分布式系统中重要的组件,本质就是一个具有接收消息、存储消息、分发消息的队列,应用程序通过读写队列消息来通信。

在这里插入图片描述

例如:在淘宝购物时,订单系统处理完订单后,把订单消息发送到消息中间件中,由消息中间件将订单消息分发到下游子系统(如物流、积分、通知等),订单系统和下游子系统通过消息中间件进行通信,减少他们之间的耦合,增加系统稳定性。

在这里插入图片描述

主流的消息中间件有哪些?

类别作用及功能
分布式消息服务Kafka版分布式消息服务Kafka版,兼容开源Kafka,适用于构建实时数据管道、流式数据处理、第三方解耦、流量削峰去谷等场景,具有大规模、高可靠、高并发访问、可扩展且完全托管的特点。
分布式消息服务RabbitMQ版分布式消息服务RabbitMQ版,100%兼容开源RabbitMQ,支持广播、事务消息、消息路由、死信队列、优先级队列等,广泛应用于秒杀、流控、系统解耦等场景。
分布式消息服务RocketMQ版分布式消息服务RocketMQ版,兼容开源RocketMQ,提供顺序、延迟、定时、重投、死信、事务消息、会话消息等功能,适用于电商、金融等场景。

如何选型不同的消息队列

KafKaRabbitMQRocketMQ
操作性能(消息中间件的性能主要衡量吞吐量)Kafka的单机QPS能够达到百万级别,Kafka的吞吐量比RabbitMQ要高出1~2个数量级RabbitMQ的单机QPS在万级别RocketMQ性能介于RabbitMQ与Kafka之间,单broker几万QPS
数据可靠性Kafka采用多副本机制,数据可靠性较高RabbitMQ采用多副本机制,数据可靠性较高RocketMQ采用3副本机制,数据可靠性较高。RocketMQ采用Ratt一致性协议,数据一致性高于Kafka与RabbitMQ

功能选型

KafKaRabbitMQRocketMQ
持久化支持支持支持
优先级队列支持
延迟队列支持支持
死信队列支持支持
消息重试支持
事务消息支持支持支持

产品优势–华为云的分布式消息服务Kafka

华为云分布式消息服务Kafka版完全兼容开源社区版本,旨在为用户提供便捷高效的消息队列。业务无需改动即可快速迁移上云,为您节省维护和使用成本。

  • 一键式部署,免去集群搭建烦恼

    您只需要在实例管理界面选好规格配置,提交订单。后台将自动创建部署完成一整套Kafka实例。

  • 兼容开源,业务零改动迁移上云

    兼容社区版Kafka的API,具备原生Kafka的所有消息处理特性。

    业务系统基于开源的Kafka进行开发,只需加入少量认证安全配置,即可使用华为云分布式消息服务Kafka版,做到无缝迁移。

说明:Kafka实例兼容开源社区Kafka 1.1.0、2.7、3.x版本。在客户端使用上,推荐使用和服务端版本一致的版本。

  • 安全保证

    独有的安全加固体系,提供业务操作云端审计,消息存储加密等有效安全措施。

    在网络通信方面,除了提供SASL(Simple Authentication and Security Layer)认证,还借助虚拟私有云(VPC)和安全组等加强网络访问控制。

  • 数据高可靠

    Kafka实例支持消息持久化,多副本存储机制。副本间消息同步、异步复制,数据同步或异步落盘多种方式供您自由选择。

  • 集群架构与跨AZ部署,服务高可用

    Kafka后台为多集群部署,支持故障自动迁移和容错,保证业务的可靠运行。

    Kafka实例支持跨AZ部署,代理部署在不同的AZ,进一步保障服务高可用。不同AZ之间基于Kafka ISR(in-sync replica)进行数据同步,Topic需要选择数据多副本并且将不同副本分布到不同的ISR上,在ISR正常同步状态下,故障RPO(Recovery Point Objective)趋近于0。

  • 无忧运维

    华为云提供一整套完整的监控告警等运维服务,故障自动发现和告警,避免7*24小时人工值守。Kafka实例自动上报相关监控指标,如分区数、主题数、堆积消息数等,并支持配置监控数据发送规则,您可以在第一时间通过短信、邮件等获得业务消息队列的运行使用和负载状态。

  • 海量消息堆积与弹性扩容

    内建的分布式集群技术,使得服务具有高度扩展性。分区数可配置多达200个,存储空间弹性扩展,保证在高并发、高性能和大规模场景下的访问能力,轻松实现百亿级消息的堆积和访问能力。

  • 多规格灵活选择

    Kafka实例的带宽与存储资源可灵活配置,并且自定义Topic的分区数、副本数。

应用案例

异步通信
将业务中属于非核心或不重要的流程部分,使用消息异步通知的方式发给目标系统,这样主业务流程无需同步等待其他系统的处理结果,
从而达到系统快速响应的目的
如网站的用户注册场景,在用户注册成功后,还需要发送注册邮件与注册短信,这两个流程使用Kfk消息服务通知邮件发送系统与短信发送系统,从而提升注册流程的响应速度。
  • 串行发送注册邮件与短信流程

在这里插入图片描述

  • 借助消息队列异步发送注册邮件与短信流程

在这里插入图片描述

错峰流控与流量削峰
在电子商务系统或大型网站中,上下游系统处理能力存在差异,处理能力高的上游系统的突发流量可能会对处理能力低的某些下游系统造成冲击,需要提高系统的可用性的同时降低系统实现的复杂性。电商大促销等流量洪流突然来袭时,可以通过队列服务堆积缓存订单等信息,在下游系统有能力处理消息的时候再处理,避免下游订阅系统因突发流量崩溃。消息队列提供亿级消息堆积能力,3天的默认保留时长,消息消费系统可以错峰进行消息处理。
  • 消息队列应对秒杀大流量场景

在这里插入图片描述

日志同步
在大型业务系统设计中,为了快速定位问题,全链路追踪日志,以及故障及时预警监控,通常需要将各系统应用的日志集中分析处理。Kafka设计初衷就是为了应对大量日志传输场景,应用通过异步方式将日志消息同步到消息服务,再通过其他组件对日志做实时或离线分析,也可用于关键日志信息收集进行应用监控。日志同步主要有三个关键部分:日志采集客户端,Kafka消息队列以及后端的日志处理应用。日志采集客户端,负责用户各类应用服务的日志数据采集,以消息方式将日志“批量”、“异步”发送Kafka客户端。
Kafka客户端批量提交和压缩消息,对应用服务的性能影响非常小。Kafka将日志存储在消息文件中,提供持久化。
日志处理应用,如Logstash,订阅并消费Kafka中的日志消息,最终供文件搜索服务检索日志,或者由Kafka将消息传递给Hadoop等其他大数据应用系统化存储与分析。

息,对应用服务的性能影响非常小。

Kafka将日志存储在消息文件中,提供持久化。
日志处理应用,如Logstash,订阅并消费Kafka中的日志消息,最终供文件搜索服务检索日志,或者由Kafka将消息传递给Hadoop等其他大数据应用系统化存储与分析。


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/7deaaf955e0a4520a00b8803d4597d54.png#pic_center)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/338468.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot多环境配置Maven Profile组

Maven profile组 注意切换配置时 mvn clean下 或者 clean 加install 或者compile 编译 clean之后 install下 或者compile 编译 nohup java -Xms256m -Xmx512m -Dfile.encodingUTF-8 -jar demo.jar --spring.profiles.activeprod > system.log 2>&1 &

计算机图形学流体模拟 blender 渲染脚本

做流体模拟的时候,想要复现别人的成果,但是别人的代码都是每帧输出 ply 格式的文件,渲染部分需要自己完成 看了一下,似乎用 blender 是最简单的,于是记录一下过程中用到的代码 Blender 版本 4.0 批量导入 ply 假设…

Vue入门四(组件介绍与定义|组件之间的通信)

文章目录 一、组件介绍与定义介绍定义1)全局组件2)局部组件 二、组件之间的通信1)父组件向子组件传递数据2)子传父通信 一、组件介绍与定义 介绍 组件(Component)是Vue.js 最强大的功能之一,它是html、css、js等的一个…

【算法】不使用库函数,求解立方根

牛客原题:https://www.nowcoder.com/practice/caf35ae421194a1090c22fe223357dca?tpId37&tqId21330&rp1&ru/exam/oj/ta&qru/exam/oj/ta&sourceUrl%2Fexam%2Foj%2Fta%3FtpId%3D37&difficultyundefined&judgeStatusundefined&tags&a…

python——数字精度控制

num1 11 num2 11.345 print("数字11宽度限制为5,结果%5d" % num1) print("数字11宽度限制为1,结果%1d" % num1) print("数字11.345宽度限制为7,小数精度为2结果%7.2f" % num2) print("数字11.345不限制…

【Python】编程练习的解密与实战(一)

​🌈个人主页:Sarapines Programmer🔥 系列专栏:《Python | 编程解码》⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。 目录 🪐1. 初识Python &a…

Android 10.0 TvSettings系统设置wifi连接密码框点击Enter键失去焦点

1.前言 在10.0的box产品开发中,在TvSettings中,在wifi连接的时候,在用遥控器输入wifi密码框的时候,会发现在按遥控器Enter键的时候, 发现EditText焦点失去了,导致输入法消失了,为了解决这个问题就需要拦截Enter键保证正常输入wifi密码,接下来就来实现这个功能 如图: 2.…

网络爬虫中的代理IP应用与高效管理策略探析

在网络爬虫技术日益普及的今天,面对目标网站对访问频率、IP地址等的严格限制,如何合理、有效地利用和管理代理IP资源成为了一项至关重要的任务。本文将深入探讨代理IP在爬虫项目中的应用,并提出一套科学高效的管理策略。 一、代理IP在网络爬虫…

pycharm社区版配置flask开发环境

新建配置文件,类型选择Shell Script 设置Execute中flask.exe的路径 设置options :--appflask_app.py run --port5000 --debug 设置working 路径 设置环境变量FLASK_APPflask_app.py;FLASK_ENVdevelopment 注意:FLASK_APPflask_app.py和上…

LeetCode-搜索插入位置(35)

题目描述: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 思路: 给定数组查找指定元素值的…

大数据-hive函数与mysql函数的辨析及练习-将多行聚合成一行

目录 1. 🥙collect_list: 聚合-不去重 2. 🥙collect_set(col): 聚合-去重 3. 🥙mysql的聚合函数-group_concat 4. leetcode练习题 1. 🥙collect_list: 聚合-不去重 将组内的元素收集成数组 不会去重 2. 🥙collec…

【OpenCV学习笔记06】- 制作使用轨迹条控制的调色板

内容 学习将轨迹栏绑定到 OpenCV 窗口。你将学习这些函数:cv.getTrackbarPos(), cv.createTrackbar() 等等。 调色板代码 这里,我们将创建用以显示指定颜色的简单程序。 你有一个显示颜色的窗口和三个轨迹栏,用来指定 B,G&…