Redis 与 RabbitMQ 作为介于 Logstash 和 elasticsearch 之间的数据 broker/messaging 系统
Redis Vs RabbitMQ as a data broker/messaging system in between Logstash and elasticsearch
我们正在定义一种架构,通过安装在各种机器上的 Logstash shippers 收集日志信息,并在一个 elasticsearch 服务器中集中索引数据,并使用 Kibana 作为图形层。我们需要在 Logstash shippers 和 elasticsearch 之间建立一个可靠的消息传递系统来授权交付。在选择 Redis 而不是 RabbitMQ 作为 Logstash shippers 和 elasticsearch 之间的数据系统 broker/messaging 或反之亦然时,应考虑哪些因素?
要问的快速问题:
- 为什么需要经纪人?如果您使用 logstash 或 logstash-forwarder 从这些服务器读取文件,如果管道拥塞,它们都会变慢。
- 您有管理 rabbit 或 redis 的经验吗?在所有条件都相同的情况下,您知道如何使用的工具是更好的工具。
在意见领域,我运行 redis 作为经纪人,并且讨厌它。当然,这可能是我对 redis 的经验不足(不是产品本身的问题),但它是管道中最薄弱的 link 并且总是在我们最需要它的时候失败。
我也一直在想同样的事情。 Logstash 人员的早期建议推荐 Redis 而不是 RabbitMQ (http://logstash.net/docs/1.1.1/tutorials/getting-started-centralized), however that section of the notes no longer exists in the current documentation although there are generic notes on using a broker to deal with spikes here https://www.elastic.co/guide/en/logstash/current/deploying-and-scaling.html.
虽然我也很高兴地使用 RabbitMQ,但我目前正在探索 Redis 代理,因为 AMQP 协议对于我的日志用例来说可能有点矫枉过正。
在评估了 Redis 和 RabbitMQ 之后,我选择 RabbitMQ 作为我们的代理,原因如下:
- RabbitMQ 允许您通过使用 SSL 证书加密您发送给代理的数据来使用内置的安全层,这意味着没有人会嗅探您的数据并访问您的重要组织数据。
- RabbitMQ 是一个非常稳定的产品,可以每秒处理大量事件和许多连接而不会成为瓶颈。
- 在我们的组织中,我们已经使用了 RabbitMQ,并且对使用它有很好的内部知识,并且已经准备好与 Chef 集成。
关于扩展,RabbitMQ 有一个内置的集群实现,除了负载平衡器之外,您还可以使用它来实现冗余代理环境。
Is my RabbitMQ cluster Active Active or Active Passive?
现在谈谈使用 RabbitMQ 的弱点:
- 大多数 Logstash shippers 不支持 RabbitMQ,但另一方面,最好的一个,名为 Beaver,有一个可以毫无问题地将数据发送到 RabbitMQ 的实现。
- Beaver 在其当前版本中使用 RabbitMQ 的实现在性能上有点慢(出于我的目的)并且无法处理来自一台服务器的 3000 events/sec 的速率,并且有时服务崩溃了。
- 现在我正在研究一个修复程序,它将解决 RabbitMQ 的性能问题并使 Beaver shipper 更加稳定。第一个解决方案是添加更多可以 运行 同时进行的流程,并为托运人提供更多权力。第二种解决方案是将 Beaver 更改为异步向 RabbitMQ 发送数据,理论上应该更快。我希望我能在本周末完成这两个解决方案的实施。
您可以在此处关注问题:
https://github.com/josegonzalez/python-beaver/issues/323
并在此处检查拉取请求:
https://github.com/josegonzalez/python-beaver/pull/324
如果您有更多问题,请随时发表评论。
尽管具有 一些基本 消息代理功能,Redis 仍被创建为键值数据存储。
RabbitMQ 被创建为消息代理。它自然有很多消息代理功能。
我一直在研究这个话题。如果性能很重要而持久性不重要,那么 RabbitMQ 是一个完美的选择。 Redis 是一项出于不同目的而开发的技术。
以下是在 Redis 上使用 RabbitMQ 的优点列表:
- RabbitMQ 使用高级消息队列协议 (AMQP),可以将其配置为使用 SSL,附加安全层。
- RabbitMQ 大约占 Redis 接受消息时间的 75%。
- RabbitMQ支持消息的优先级,worker可以优先消费高优先级的消息。
- 如果任何 worker 在使用消息后崩溃,则不会丢失消息,而 Redis 则不会出现这种情况。
- RabbitMQ 有一个很好的路由系统,可以将消息定向到不同的队列。
使用 RabbitMQ 的一些缺点:
- RabbitMQ 可能有点难以维护,难以调试崩溃。
- node-name 或 node-ip 波动会导致数据丢失,但如果管理得当,持久消息可以解决问题。
如果您特别想将日志从 Logstash 发送到 Elasticsearch,您可能想使用 Filebeat instead of either Redis or RabbitMQ. Personally, I use fluent-bit 收集日志以发送到 Elasticsearch。
但是,此页面上的其他答案有很多 out-of-date 有关 Redis 功能的信息。 Redis 已支持:
- publish/subscribe 自版本 2.0
- clustering 从版本 3.0 开始。
- streams 从 5.0 版本开始。
- SSL/TLS 从版本 6.0 开始。
- a copy-on-write append-only log 持久化到磁盘。它最适用于 Redis 7.0 或更新版本。此日志对于从崩溃中恢复很有用。
但也有一些限制:
- 在消息持久性和崩溃恢复方面,Redis 仍然不如 RabbitMQ 专注。
- Redis pub/sub 可扩展性不如 RabbitMQ。 Redis pub/sub 消息 were not sharded by Redis cluster nodes (until relatively recently)。 Redis Streams 是更新的、更具可扩展性的 API.
我们正在定义一种架构,通过安装在各种机器上的 Logstash shippers 收集日志信息,并在一个 elasticsearch 服务器中集中索引数据,并使用 Kibana 作为图形层。我们需要在 Logstash shippers 和 elasticsearch 之间建立一个可靠的消息传递系统来授权交付。在选择 Redis 而不是 RabbitMQ 作为 Logstash shippers 和 elasticsearch 之间的数据系统 broker/messaging 或反之亦然时,应考虑哪些因素?
要问的快速问题:
- 为什么需要经纪人?如果您使用 logstash 或 logstash-forwarder 从这些服务器读取文件,如果管道拥塞,它们都会变慢。
- 您有管理 rabbit 或 redis 的经验吗?在所有条件都相同的情况下,您知道如何使用的工具是更好的工具。
在意见领域,我运行 redis 作为经纪人,并且讨厌它。当然,这可能是我对 redis 的经验不足(不是产品本身的问题),但它是管道中最薄弱的 link 并且总是在我们最需要它的时候失败。
我也一直在想同样的事情。 Logstash 人员的早期建议推荐 Redis 而不是 RabbitMQ (http://logstash.net/docs/1.1.1/tutorials/getting-started-centralized), however that section of the notes no longer exists in the current documentation although there are generic notes on using a broker to deal with spikes here https://www.elastic.co/guide/en/logstash/current/deploying-and-scaling.html.
虽然我也很高兴地使用 RabbitMQ,但我目前正在探索 Redis 代理,因为 AMQP 协议对于我的日志用例来说可能有点矫枉过正。
在评估了 Redis 和 RabbitMQ 之后,我选择 RabbitMQ 作为我们的代理,原因如下:
- RabbitMQ 允许您通过使用 SSL 证书加密您发送给代理的数据来使用内置的安全层,这意味着没有人会嗅探您的数据并访问您的重要组织数据。
- RabbitMQ 是一个非常稳定的产品,可以每秒处理大量事件和许多连接而不会成为瓶颈。
- 在我们的组织中,我们已经使用了 RabbitMQ,并且对使用它有很好的内部知识,并且已经准备好与 Chef 集成。
关于扩展,RabbitMQ 有一个内置的集群实现,除了负载平衡器之外,您还可以使用它来实现冗余代理环境。
Is my RabbitMQ cluster Active Active or Active Passive?
现在谈谈使用 RabbitMQ 的弱点:
- 大多数 Logstash shippers 不支持 RabbitMQ,但另一方面,最好的一个,名为 Beaver,有一个可以毫无问题地将数据发送到 RabbitMQ 的实现。
- Beaver 在其当前版本中使用 RabbitMQ 的实现在性能上有点慢(出于我的目的)并且无法处理来自一台服务器的 3000 events/sec 的速率,并且有时服务崩溃了。
- 现在我正在研究一个修复程序,它将解决 RabbitMQ 的性能问题并使 Beaver shipper 更加稳定。第一个解决方案是添加更多可以 运行 同时进行的流程,并为托运人提供更多权力。第二种解决方案是将 Beaver 更改为异步向 RabbitMQ 发送数据,理论上应该更快。我希望我能在本周末完成这两个解决方案的实施。
您可以在此处关注问题: https://github.com/josegonzalez/python-beaver/issues/323
并在此处检查拉取请求: https://github.com/josegonzalez/python-beaver/pull/324
如果您有更多问题,请随时发表评论。
尽管具有 一些基本 消息代理功能,Redis 仍被创建为键值数据存储。
RabbitMQ 被创建为消息代理。它自然有很多消息代理功能。
我一直在研究这个话题。如果性能很重要而持久性不重要,那么 RabbitMQ 是一个完美的选择。 Redis 是一项出于不同目的而开发的技术。
以下是在 Redis 上使用 RabbitMQ 的优点列表:
- RabbitMQ 使用高级消息队列协议 (AMQP),可以将其配置为使用 SSL,附加安全层。
- RabbitMQ 大约占 Redis 接受消息时间的 75%。
- RabbitMQ支持消息的优先级,worker可以优先消费高优先级的消息。
- 如果任何 worker 在使用消息后崩溃,则不会丢失消息,而 Redis 则不会出现这种情况。
- RabbitMQ 有一个很好的路由系统,可以将消息定向到不同的队列。
使用 RabbitMQ 的一些缺点:
- RabbitMQ 可能有点难以维护,难以调试崩溃。
- node-name 或 node-ip 波动会导致数据丢失,但如果管理得当,持久消息可以解决问题。
如果您特别想将日志从 Logstash 发送到 Elasticsearch,您可能想使用 Filebeat instead of either Redis or RabbitMQ. Personally, I use fluent-bit 收集日志以发送到 Elasticsearch。
但是,此页面上的其他答案有很多 out-of-date 有关 Redis 功能的信息。 Redis 已支持:
- publish/subscribe 自版本 2.0
- clustering 从版本 3.0 开始。
- streams 从 5.0 版本开始。
- SSL/TLS 从版本 6.0 开始。
- a copy-on-write append-only log 持久化到磁盘。它最适用于 Redis 7.0 或更新版本。此日志对于从崩溃中恢复很有用。
但也有一些限制:
- 在消息持久性和崩溃恢复方面,Redis 仍然不如 RabbitMQ 专注。
- Redis pub/sub 可扩展性不如 RabbitMQ。 Redis pub/sub 消息 were not sharded by Redis cluster nodes (until relatively recently)。 Redis Streams 是更新的、更具可扩展性的 API.