Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >消息队列kafka

消息队列kafka

作者头像
超蛋lhy
发布于 2019-04-19 03:35:05
发布于 2019-04-19 03:35:05
1.2K00
代码可运行
举报
文章被收录于专栏:PythonistaPythonista
运行总次数:0
代码可运行

为什么用消息队列

举例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
比如在一个企业里,技术老大接到boss的任务,技术老大把这个任务拆分成多个小任务,完成所有的小任务就算搞定整个任务了。
那么在执行这些小任务的时候,可能有一个环节很费时间,并且优先级很低,推迟完成也不影响整个任务运转,那么技术老大就会将这个很费时间,且不重要的任务,丢给他的小弟去解决,自己继续完成其他任务。

转化为计算机思想

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
那个技术老大就是一个 程序系统,那个小弟就是消息队列。
当程序系统发现某些任务耗费时间且优先级较低,迟点完成也不影响整个任务,就把这个任务丢给消息队列。

场景

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
在程序系统中,例如外卖系统,订单系统,库存系统,优先级较高
发红包,发邮件,发短信,app消息推送等任务优先级很低,很适合交给消息队列去处理,以便于程序系统更快的处理其他请求。

消息队列工作流程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
消息队列一般有三个角色:
队列服务端
队列生产者
队列消费者
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
消息队列工作流程就如同一个流水线,有产品加工,一个输送带,一个打包产品
输送带就是 不停运转的消息队列服务端
加工产品的就是 队列生产者
在传输带结尾打包产品的 就是队列消费者

队列产品

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RabbitMQ
Erlang编写的消息队列产品,企业级消息队列软件,支持消息负载均衡,数据持久化等。

ZeroMQ 
saltstack软件使用此消息,速度最快。

Redis
key-value的系统,也支持队列数据结构,轻量级消息队列

Kafka
由Scala编写,目标是为处理实时数据提供一个统一、高通量、低等待的平台

一个app系统消息队列工作流程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
消费者,一个后台进程,不断的去检测消息队列中是否有消息,有消息就取走,开启新线程去处理业务,如果没有一会再来

kafka是什么

流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算。

1)Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。

2)Kafka最初是由LinkedIn公司开发,并于 2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。

3)Kafka是一个分布式消息队列。Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker。

4)无论是kafka集群,还是producer和consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性。

消息通信图


点对点模式(一对一,消费者主动拉取数据,轮询机制,消息收到后消息清除,ack确认机制)

点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消息推送到客户端。

这个模型的特点是发送到队列的消息被一个且只有一个接收者接收处理,即使有多个消息监听者也是如此。


发布/订阅模式(一对多,数据生产后,推送给所有订阅者)

发布订阅模型则是一个基于推送的消息传送模型。

发布订阅模型可以有多种不同的订阅者,临时订阅者只在主动监听主题时才接收消息,而持久订阅者则监听主题的所有消息,即使当前订阅者不可用,处于离线状态。

消息队列作用

1)程序解耦

允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。

2)冗余:

消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险。

许多消息队列所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用完毕。

3)峰值处理能力:

(大白话,就是本来公司业务只需要5台机器,但是临时的秒杀活动,5台机器肯定受不了这个压力,我们又不可能将整体服务器架构提升到10台,那在秒杀活动后,机器不就浪费了吗?因此引入消息队列)

在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见。

如果为以能处理这类峰值访问为标准来投入资源随时待命无疑是巨大的浪费。

使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。

4)可恢复性:

系统的一部分组件失效时,不会影响到整个系统。

消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。

5)顺序保证:

在大多使用场景下,数据处理的顺序都很重要。

大部分消息队列本来就是排序的,并且能保证数据会按照特定的顺序来处理。(Kafka保证一个Partition内的消息的有序性)

6)缓冲:

有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。

7)异步通信:

很多时候,用户不想也不需要立即处理消息。比如发红包,发短信等流程。

消息队列提供了异步处理机制,允许用户把一个消息放入队列,但并不立即处理它。想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。

应用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
微信公众号的订阅
生产者写入消息 -> kafka  -> 消费者

zookeeper会产生大量网络io,zk所在节点,注意网络监控

kafka角色

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
编辑,            生产消息,生产者
kafka集群,临时缓存消息  queue队列有kafka维护
消费者         定时/轮训    方式去pull 消息

topic主题

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
同样的消息类型,放入同一个topic,
例如微信有很多公众号,这个类别在kafka里就叫topic主题
一个消费者可以订阅多个主题
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-04-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
消息队列与kafka
在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算。
超蛋lhy
2019/05/05
1.6K0
程序员必须了解的消息队列之王-Kafka
Kafka 是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。
架构狂人
2023/08/16
4020
程序员必须了解的消息队列之王-Kafka
01 . 消息队列之(Kafka+ZooKeeper)
Kafka最核心的最成熟的还是他的消息引擎,所以Kafka大部分应用场景还是用来作为消息队列削峰平谷。另外,Kafka也是目前性能最好的消息中间件。
iginkgo18
2020/09/27
1.1K0
01 . 消息队列之(Kafka+ZooKeeper)
Kafka(1)—消息队列
作为消息队列,Kafka允许发布和订阅数据,这点和其他消息队列类似,但不同的是,Kafka作为一个分布式系统,是以集群的方式运行的,可以自由伸缩。同时还提供了数据传递保证—可复制、持久化等。
摸鱼的G
2024/01/26
4850
Kafka(1)—消息队列
kafka 消息队列的原理
每个分区日志记录是顺序的, 不可变的串行offset, 追加到结构化的commit log, 每个offset 在分区中唯一标识一条记录
erili
2020/08/25
1.2K0
kafka 消息队列的原理
Kafka消息队列
Kafka 是一个分布式、支持分区,多副本的基于 zookeeper 的消息队列。使用消息队列,是应用 A 将要处理的信息发送到消息队列然后继续下面的任务,需要该信息的应用 B 从消息队列里面获取信息再做处理,这样做像是多此一举,应用 A 直接发信息给应用 B 不就可以了吗?存在即合理,使用消息队列其作用如下:
晚上没宵夜
2022/05/09
8960
Kafka消息队列
什么是Kafka?它有四个关键概念值得我们去学习
Apache kafka is a distributed streaming platform,官方定义 kafka 是一个分布式流式计算平台 。而在大部分企业开发人员中,都是把 kafka 当成消息系统使用,它是一个分布式消息队列,但是很少会使用 kafka 的流式计算。它有四个关键概念:
IT大咖说
2019/12/17
7720
什么是Kafka?它有四个关键概念值得我们去学习
消息队列常见问题
系统可用性降低:加入消息队列,当消息队列出问题,将会导致系统不可用,系统可用性会降低
用户4447430
2019/03/23
1.3K0
消息队列常见问题
光速入门消息队列Kafka
传统单体应用逐渐被SOA架构、微服务体系架构所替代,如此一来系统数目爆炸级增长,原来在一个系统之间的数据交互演变成跨系统、跨区域。
青山师
2023/05/05
4790
光速入门消息队列Kafka
Kafka快速入门系列(1) | Kafka的简单介绍(一文令你快速了解Kafka)
  自Flume快速入门系列结束后,博主决定后面几篇博客为大家带来关于Kafka的知识分享作为快速入门Kafka系列的第一篇博客,本篇为大家带来的是Kafka的简单介绍。
不温卜火
2020/10/28
5650
Kafka快速入门系列(1) | Kafka的简单介绍(一文令你快速了解Kafka)
消息队列之Kafka
kafka是⼀个分布式、⽀持分区的(partition)、多副本的(replica),基于zookeeper协调 的分布式消息系统,最⼤的特性就是可以实时的处理⼤量数据以满⾜各种需求场景。 它有以下特性:
羽毛球初学者
2024/10/14
1620
消息队列MQ/JMS/Kafka,你都了解吗?
是不是平常听到说消息队列啊,JMS啊,MQ啊 、kafka啊巴啦啦的一堆术语,听不懂?关系混乱?今天就让我们来一起来看看他们都是什么吧。
芋道源码
2021/07/13
2.1K0
腾讯云消息队列(Ckafka)监控最佳指南
作者:朱丹阳,腾讯云监控开发工程师 腾讯云消息队列 CKafka 简介 消息队列 CKafka(Cloud Kafka)是基于开源 Apache Kafka 消息队列引擎,提供高吞吐性能、高可扩展性的消息队列服务。消息队列 CKafka 完美兼容 Apache Kafka 0.9、0.10、1.1、2.4 版本接口,在性能、扩展性、业务安全保障、运维等方面具有超强优势,让您在享受低成本、超强功能的同时,免除繁琐运维工作。 产品特点: 收发解耦:有效解耦生产者、消费者之间的关系。在确保同样的接口约束的前提
腾讯云可观测平台
2020/12/18
3.8K1
深入了解消息队列:揭示消息队列的概念、原理以及应用场景
消息队列 (Message Queue, MQ) 用于实现服务之间的异步通信、服务解耦、流量控制、发布订阅、高并发缓冲等。
Lion 莱恩呀
2025/04/19
3390
深入了解消息队列:揭示消息队列的概念、原理以及应用场景
大数据Kafka(一):消息队列和Kafka的基本介绍
消息队列,英文名:Message Queue,经常缩写为MQ。从字面上来理解,消息队列是一种用来存储消息的队列 。来看一下下面的代码
Lansonli
2021/10/11
2.2K0
大数据Kafka(一):消息队列和Kafka的基本介绍
消息队列面试解析系列(三)-消息模型辨析
MQ都得有消息模型,就会产生比如队列(Queue)、主题(Topic)、分区(Partition)这些名词,但是概念上却不尽相同。
JavaEdge
2021/02/22
6480
消息队列面试解析系列(三)-消息模型辨析
Kafka实战(2)-Kafka消息队列模型核心概念
Kafka发布订阅的对象是主题(Topic),可为每个业务、每个应用甚至是每类数据都创建专属的主题。
JavaEdge
2022/11/30
4850
Kafka实战(2)-Kafka消息队列模型核心概念
2021年大数据Kafka:消息队列和Kafka的基本介绍
消息队列,英文名:Message Queue,经常缩写为MQ。从字面上来理解,消息队列是一种用来存储消息的队列 。来看一下下面的代码
IT大咖说
2021/08/10
1.1K0
消息队列:听我解释,我真的不是只有Kafka!
导语 | 消息队列也通常称为消息中间件,提到消息队列,大部分互联网人或多或少都听过该名词。对于后端工程师而言,更是日常开发中必备的一项技能。随着大数据时代的到来,apache旗下的Kafka一度成为消息队列的代名词,提起消息队列大家自然而然就想到了Kafka。然而消息队列本身是工程领域内一种解决问题的通用方案。它的背后有着一些通用的设计思想和经典模型,这些是消息队列的精髓和灵魂。它们独立于任何一种消息队列的具体实现(例如Kafka),但每种消息队列(除了Kafka外,还有RocketMQ、Pulsar
腾讯云开发者
2021/08/23
3980
梳理消息队列 MQ/JMS/Kafka
是不是平常听到说消息队列啊,JMS啊,MQ啊 、kafka等一堆术语,听不懂?关系混乱?今天就让我们来一起来看看他们都是什么吧。
玄姐谈AGI
2021/09/17
5460
相关推荐
消息队列与kafka
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验