当前位置: 首页 > 面试题库 >

Redis与RabbitMQ作为Logstash和Elasticsearch之间的数据代理/消息系统

丁理
2023-03-14
问题内容

我们正在定义一种架构,以通过安装在各种计算机上的Logstash托运人收集日志信息,并在一个Elasticsearch服务器中集中索引数据,并使用Kibana作为图形层。我们需要在Logstash托运人和elasticsearch之间建立可靠的消息传递系统,以准许交货。在Logstash托运人与elasticsearch之间选择Redis
over RabbitMQ作为数据代理/消息传递系统时应考虑哪些因素,反之亦然?


问题答案:

在评估Redis和RabbitMQ之后,出于以下原因,我选择RabbitMQ作为我们的经纪人:

  1. RabbitMQ允许您使用SSL证书来加密发送给代理的数据,从而使用内置的安全层,这意味着没有人会嗅探您的数据并有权访问您的重要组织数据。
  2. RabbitMQ是一款非常稳定的产品,可以每秒处理大量事件和许多连接,而不会成为瓶颈。
  3. 在我们的组织中,我们已经使用过RabbitMQ,并且对使用它有很好的内部了解,并且已经准备好与Chef集成。

关于扩展,RabbitMQ具有内置的群集实现,除负载均衡器外,您还可以使用它来实现冗余代理环境。

现在到使用RabbitMQ的弱点:

  1. 大多数Logstash托运人不支持RabbitMQ,但另一方面,最好的一个名为Beaver的实现可以将数据毫无问题地发送到RabbitMQ。
  2. Beaver当前版本使用RabbitMQ的实现在性能上(出于我的目的)有点慢,并且无法处理来自一台服务器的3000个事件/秒的速率,并且服务有时会崩溃。
  3. 现在,我正在研究一种解决方案,该解决方案将解决RabbitMQ的性能问题并使Beaver托运人更加稳定。第一个解决方案是添加更多可同时运行的流程,这将赋予托运人更多的权力。第二种解决方案是更改Beaver以异步地将数据发送到RabbitMQ,这在理论上应该更快。我希望我能在本周末之前完成两种解决方案的实施。
您可以在此处关注该问题: https
//github.com/josegonzalez/python-
beaver/issues/323

并在此处检查请求请求:https :
//github.com/josegonzalez/python-
beaver/pull/324

如果您还有其他问题,请随时发表评论。



 类似资料:
  • 我是芹菜、Redis和RabbitMQ的新手。 目前,我正在使用RabbitMQ作为消息代理,并且在配置中没有设置任何内容。(使用Django、MySQL) 我想知道是否有可能使用Redis作为后端的结果存储,同时将RabbitMQ用作消息代理。 我知道的只是添加一些设置,

  • 我的粗略理解是,如果您需要内存中的键值存储特性,Redis会更好,但是我不确定这与分布任务有什么关系? 这是否意味着如果我们已经将Redis用于其他用途,那么我们应该将其用作消息代理?

  • 问题内容: 我正在运行基本的ELK堆栈。在vm中运行的所有三个组件。Logstash正在侦听TCP 9140,以获取其输入通过NxLog代理从大约30个Windows Server 2008s和30个Windows Server 2003事件(evts)中接收的信息,并将其输出到elasticsearch。 这个已经运行了好几个星期了。我可以看到ElasticSearch每天都在创建索引,并且可以

  • 概念 消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个长的任务并且只完成了一部分,如果它突然挂掉了,会发生什么情况? RabbitMQ一旦向消费者传递了一条消息,就会立即将该消息标记为删除。在这种情况下突然有个消费者挂掉了,将会丢失正在处理的信息,以及后续应该发送给该消费者的信息,因为该消费者无法接收到 为了保证消息在发送过程中不丢失,RabbitMQ引入消息应答机制 消息应答机制指

  • 它提供的Swagger UI和rest API规范给了我灵感。 最近,我开始使用消息代理(特别是RabbitMQ),我希望有一些工具来开始开发具有消息和队列规范的面向微服务的系统。 是否有任何工具允许制作这些规范?从代码生成文档还是从模型生成代码? 提前感谢! 更新: 如本文所述。队列,交换,填充,用户和权限可以用RabbitMQ配置文件来描述。 AsyncAPI 看起来是一个很好的解决方案

  • 概念 之前的消息应答部分已经看到了如何处理消息不丢失的情况,但是如何保障当 RabbitMQ服务停掉之后消息生产者发送过来的消息不丢失呢? 默认情况下,RabbitMQ退出或者由于某种原因崩溃的时候,它会忽视队列和消息,除非告知它不要这样做。 确保消息不会丢失需要做两件事:将队列和消息都标记为持久化。 队列实现持久化 之前创建的队列都是非持久化的,RabbitMQ如果重启,该队列就会被删掉,如果要