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

Sal*_*daw 77 rabbitmq redis elasticsearch logstash

我们正在定义一个架构,用于收集Logstash托运人的日志信息,这些托架安装在各种机器中,并将数据集中在一个弹性搜索服务器中,并使用Kibana作为图形层.我们需要在Logstash发货人和elasticsearch之间建立一个可靠的消息传递系统来授权交付.在Logstash发货人和弹性搜索之间选择Redis over RabbitMQ作为数据代理/消息传递系统时应该考虑哪些因素,反之亦然?

小智 83

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

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

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

我的RabbitMQ群集是Active Active还是Active Passive?

现在到使用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

如果您有更多问题,请随时发表评论.

  • “RabbitMQ 是一个非常稳定的产品,可以每秒处理大量事件和许多连接,而不会成为瓶颈。” - 我很确定 reddis 也是如此。所以这不是rabbitmq相对于Reddit的优势 (5认同)
  • 与RabbitMQ相比,Redis是否有更强的优势?Redis似乎更易于配置。而且,如果您不需要巨大的吞吐量并且可以通过其他方式处理安全性,则可能不需要RabbitMQ。请,如果我错了,请纠正我。 (2认同)
  • 2019年redis仍然没有内置TLS (2认同)

Fer*_*hat 45

尽管具有一些基本的消息代理功能,Redis仍被创建为键值数据存储.

RabbitMQ创建为消息代理.它自然有很多消息代理功能.

  • 您对Redis的说法并不随着Redis 5中引入Stream而变得更加准确。对于大规模场景,RabbitMQ绝对是更好的选择。对于中小型场景(世界上大多数项目都是如此),Redis 是一种可靠、快速且易于配置的替代方案。 (2认同)

Aru*_*ddy 38

我一直在研究这个话题.如果性能很重要而且持久性不重要,那么RabbitMQ是一个完美的选择.Redis是一种具有不同意图的技术.

以下是使用RabbitMQ而非Redis的专业人员列表:

  • RabbitMQ使用AMQP协议,可以配置为使用SSL,增加安全层.
  • RabbitMQ大约有75%的时间用于接受消息.
  • RabbitMQ支持消息的优先级,工作者可以使用它来首先使用高优先级消息.
  • 如果任何工作人员在使用消息后崩溃,则无法丢失消息,而Redis则不然.
  • RabbitMQ有一个很好的路由系统来将消息定向到不同的队列.

使用RabbitMQ的一些缺点:

  • RabbitMQ可能有点难以维护,难以调试崩溃.
  • node-name或node-ip波动会导致数据丢失,但如果管理得当,持久消息可以解决问题.

  • Redis具有“排序集”,允许类似队列的优先级交互。还可以对Redis进行集群/分片,以将不同的消息发送到不同服务器上的不同队列。不确定直接用于Redis的SSL,但是我正在研究AWS Elasticache,而他们的Redis 3.2.6允许静态和过渡加密。注意:完全没有说Redis在这种情况下会更好;只是指出那些可能不是选择Redis而不是选择RabbitMQ的原因。 (3认同)
  • 也不要忘记 Redis 是单线程的,所以如果你有很多发布者/消费者,这可能是一个问题。 (2认同)

小智 5

我一直在想同样的事情。Logstash的早期建议是在RabbitMQ上推荐Redis(http://logstash.net/docs/1.1.1/tutorials/getting-started-centralized),但是,尽管有https://www.elastic.co/guide/zh-cn/logstash/current/deploying-and-scaling.html上有关使用经纪人处理峰值的一般说明。

虽然我也很开心地使用RabbitMQ,但我目前正在探索Redis代理,因为AMQP协议可能对于我的日志记录用例而言是过大的。