ELK系列-(六)Redis也能作为消息队列?(上)

一、前文回顾 🔍

在前面的ELK系列中,我们已经搭建了ELK的核心组件,包括:

  • ELK系列-(一)Docker部署ELK核心组件
  • ELK系列-(二)LogStash数据处理的瑞士军刀
  • ELK系列-(三)Kibana 数据可视化的艺术家
  • ELK系列-(四)轻量级的日志收集助手-Beat家族
  • ELK系列-(五)指标收集-MetricBeat(上)
  • ELK系列-(五)指标收集-MetricBeat(下)

有关整个系统架构的部署,大家可以回顾前面的文章。今天,我们将继续探讨Beats与ElasticSearch的链接-消息队列!🌟

系统架构图 📊

Screenshot 2024-12-10 at 13.46.34

二、Redis介绍

image-20241210142814546

Redis 是一个开源的 内存数据结构存储系统,广泛应用于:

  • 🔹 缓存
  • 🔹 会话管理
  • 🔹 实时分析

它支持多种数据结构,如字符串、哈希、列表、集合和有序集合等。

Redis 不仅仅是一个缓存数据库,它还能灵活地作为消息队列使用!虽然可能不如专业消息队列(如 RabbitMQ、Kafka)功能全面,但在某些特定场景下,尤其是我们的日志场景,它是一个绝佳的选择。由于消息一致性要求不高,丢失一些也无妨,使用 Redis 作为消息队列也是一个不错的选择。

三、为什么选择Redis作为消息队列? 🤔

在我们的架构中,面临着一些独特的挑战 💡:

  • 🌐 数台机器在云端(云服务器规格小)
  • 💻 数台机器在本地(性能好)

因此,ELK核心组件部署在了本地,我们需要一个 轻量级中间件 来实现数据中转。考虑到:

  1. Redis 的易用性 ✅
  2. 我们已经在使用 Redis 作为缓存 ✅

选择复用现有的 Redis 来完成这个任务,简直是再自然不过的决定!

四、Redis如何作为队列?

Redis 提供了多种实现队列的方式,最基础的是使用 List 数据结构,通过 LPUSH/RPUSH 和 LPOP/RPOP 命令实现消息的存取。如果需要延时队列,可以使用 Zset,利用其 score 特性存储执行时间。对于需要发布订阅模式的场景,Redis 提供了 Pub/Sub 机制。在 Redis 5.0 之后,还引入了功能更完善的 Stream 类型,它支持消费确认机制,能更好地保证消息的可靠性。

官方文档

接下来我们将对各种实现方法进行讲解

1. List

Image description

Redis 列表是一种简单而高效的数据结构,它以字符串列表的形式存储数据,并按照插入顺序进行排序。通过以下命令,Redis 列表可以轻松实现队列功能:

  • LPUSH:从左侧插入数据
  • RPUSH:从右侧插入数据
  • LPOP:从左侧弹出数据
  • RPOP:从右侧弹出数据
  • BLPOP:阻塞等待直到从左侧弹出数据
  • BRPOP:阻塞等待直到从右侧弹出数据

这些特性使得 Redis 列表成为实现异步队列的一个简单而有效的选择。

优点:✨ 简单高效
局限性:⚠️

  • 消息不可重复消费
  • 缺乏主题订阅功能
  • 无消费确认机制
2. Zset

有序集合(Zset)在列表的基础上增加了一个 score 属性,这使得它可以存储时间戳等信息,从而实现延迟队列。这种特性在需要定时执行任务或在特定时间后触发操作的场景中非常有用。

优点:⏱️ 支持定时任务
局限性:⚠️

  • 消息不可重复消费
  • 无法存储重复消息
3. Pub/Sub

Image description

Redis 的发布订阅模式提供了一种简单的消息传递机制,允许消息的发布者和订阅者之间进行通信。尽管这种模式非常直观,但也有一些局限性:

局限性:🚨

  • 消息不持久化
  • 要求消费者实时在线
  • 缺乏消费确认机制
4. Stream

Image description

Redis 5.0 引入了 Stream 数据类型,它在 Pub/Sub 机制的基础上增加了消费者确认功能,大大减少了消息丢失的概率。Stream 提供了更强大的功能,适合需要更高可靠性的消息队列场景。

特点:🌈

  • 支持消费者确认
  • 减少消息丢失概率
  • 适合高可靠性场景

注意:⚠️ 目前 elastic-beats 系列尚不支持 Stream

完成了理论的准备,在下一篇文章中,我们正式探讨如何在 ELK 架构中具体使用 Redis 消息队列。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二进制分析的新兴趋势:塑造安全的移动应用

在当今快速发展的数字世界中,保障移动应用的安全性变得尤为重要。随着移动技术的广泛应用,安全性需求也日益增强。二进制分析作为确保移动应用安全和合规性的重要手段,通过对已编译的应用进行深入分析,能够发现源代码中难以察觉的…

Pikachu-XXE靶场(注入攻击)

1.攻击测试 <?xml version"1.0"?> <!DOCTYPE foo [ <!ENTITY xxe "a" > ]> <foo>&xxe;</foo> 2.查看文件 <?xml version"1.0"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///E:/ph…

CSS学习记录12

CSS浮动 CSSfloat属性规定元素如何浮动 CSSclear属性规定哪些元素可以在清除的元素旁边以及在哪一侧浮动。 float属性 float属性用于定位和格式化内容&#xff0c;例如让图像向左浮动到容器的文本那里。 float属性可以设置以下值之一&#xff1a; left - 元素浮动到其容器…

概率论得学习和整理30: 用EXCEL 描述泊松分布 poisson distribution

目录 1 泊松分布的基本内容 1.1 泊松分布的关键点 1.1.1 属于离散分布 1.1.2 泊松分布的特点&#xff1a;每个子区间内概率相等 &#xff0c; λ就是平均概率 1.2 核心参数 1.3 pmf公式 1.4 期望和方差 2 例1&#xff1a;用EXCEL计算泊松分布的概率 3 比较λ不同值时…

leetcode212. 单词搜索 II

给定一个 m x n 二维字符网格 board 和一个单词&#xff08;字符串&#xff09;列表 words&#xff0c; 返回所有二维网格上的单词 。 单词必须按照字母顺序&#xff0c;通过 相邻的单元格 内的字母构成&#xff0c;其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一…

Y20030009基于Java+springboot+MySQL+uniapp框架的待办事项提醒微信小程序的设计与实现 源码 文档 PPT

待办事项提醒小程序 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 随着现代人的工作和生活压力越来越大&#xff0c;人们的精力和时间也越来越有限。在这样的情况下&#xff0c;很容易忘记一些很重要的行程&#xff0c;有时会导致严重的后果&#xf…

实践环境-docker安装mysql8.0.40步骤

一、docker安装mysql 8.0.40版本 1、检索镜像版本 docker search mysql:8.0.40 NAME DESCRIPTION STARS OFFICIAL mysql MySQL is a widely used, open-source relation… …

测试工程师八股文05|功能测试、业务测试

一、基础概念 1、软件测试分类 1️⃣按照软件产生的阶段划分 单元测试&#xff1a;针对程序源代码进行测试【开发自测】集成测试&#xff1a;针对模块之间功能交互进行测试系统测试&#xff1a;对整个系统&#xff08;功能、非功能&#xff09;进行全面测试验收测试&#xff…

【Java】:lambda 表达式

&#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;java学习 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f49e; &#x1f49e; &#x1f49e; 1. 背景 &#x1f680; &#x1f…

低级计算机网络知识总结

1 应用层 1.1 HTTP(TCP) 浏览器访问WWW服务器过程&#xff1a;首先进行域名解析&#xff0c;然后通过TCP向服务器发送连接请求 HTTP本身是无连接&#xff0c;无状态的。无状态特性使服务器能够支持大量的并发HTTP请求。实际应用中&#xff0c;通常使用Cookie加数据库跟踪用户…

【OSS】php使用oss存储

阿里云oss官方文档&#xff1a;文档 1、前期工作 创建阿里云账号&#xff0c;登录创建bucket&#xff0c;注意修改权限&#xff0c;要不然可能读取不到 申请accessKeyId和accessKeySecret accessKey 2、项目中安装OSS扩展 composer require aliyuncs/oss-sdk-php3、基础使…

基线检查:Windows安全基线.【手动 || 自动】

基线定义 基线通常指配置和管理系统的详细描述&#xff0c;或者说是最低的安全要求&#xff0c;它包括服务和应用程序设置、操作系统组件的配置、权限和权利分配、管理规则等。 基线检查内容 主要包括账号配置安全、口令配置安全、授权配置、日志配置、IP通信配置等方面内容&…

windows 使用python共享网络给另外一个网卡

# -*- coding: utf-8 -*- import subprocessdef open_share(to_shared_adapter, from_shared_adapter):"""打开以太网的网络共享:return: None"""powershell_script f"""# Register the HNetCfg library (once)# regsvr32 hnetc…

【Elasticsearch入门到落地】4、Elasticsearch的安装

接上篇《3、es与mysql的概念对比》 上一篇我们学习了Elasticsearch与Mysql的概念与区别。本篇我们来进行Elasticsearch的环境准备及软件安装。 一、环境准备 如果我们没有自己的Linux服务器&#xff0c;且现在正在使用的是Windows操作系统的电脑&#xff0c;那么首先我们需要安…

小程序快速实现大模型聊天机器人

需求分析&#xff1a; 基于大模型&#xff0c;打造一个聊天机器人&#xff1b;使用开放API快速搭建&#xff0c;例如&#xff1a;讯飞星火&#xff1b;先实现UI展示&#xff0c;在接入API。 最终实现效果如下&#xff1a; 一.聊天机器人UI部分 1. 创建微信小程序&#xff0c…

Java反序列化漏洞分析

2015年11月6日FoxGlove Security安全团队的breenmachine 发布了一篇长博客&#xff0c;阐述了利用Java反序列化和Apache Commons Collections这一基础类库实现远程命令执行的真实案例&#xff0c;各大Java Web Server纷纷躺枪&#xff0c;这个漏洞横扫WebLogic、WebSphere、JBo…

前端项目部署方法

ngnix服务器部署 下载nignx&#xff0c;我下的是windows版本的 下载链接&#xff1a;[https://nginx.org/en/download.html](https://nginx.org/en/download.html) 解压文件 如果原本的80端口号被占用了&#xff0c;可以改为其他的端口号 可以点击nginx.exe文件启动nginx,它可能…

Reactor 响应式编程(第二篇:Spring Webflux)

系列文章目录 Reactor 响应式编程&#xff08;第一篇&#xff1a;Reactor核心&#xff09; Reactor 响应式编程&#xff08;第二篇&#xff1a;Spring Webflux&#xff09; Reactor 响应式编程&#xff08;第三篇&#xff1a;R2DBC&#xff09; Reactor 响应式编程&#xff08…

实验12 socket网络编程

设计程序 1&#xff0e;阅读TCP、UDP数据通信的例子8-2、8-7&#xff0c;理解并运行查看其功能。 2. 编写程序&#xff0c;使用socket网络接口函数&#xff0c;实现同一网段的两台主机的聊天。注&#xff1a;使用多线程&#xff0c;实现实时聊天功能。&#xff08;使用UDP或TCP…

leetcode二叉搜索树部分笔记

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 二叉搜索树 1. 二叉搜索树的最小绝对差2. 二叉搜索树中第 K 小的元素3. 验证二叉搜索树 1. 二叉搜索树的最小绝对差 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中…