首页 > 解决方案 > 开源多区域、一致的至少一次 FIFO 解决方案:专用队列(例如 Kafka)与数据库(例如 Cassandra、RethinkDB)?

问题描述

我一直在寻找一种 FIFO 解决方案,其中生产者和消费者可以部署在不同区域的多个数据中心(例如 >20ms ping)。显然付出了增加延迟的代价,主要目标是透明地处理增加的延迟、延迟峰值、链接故障。

这个理论用例是这样的:

Super Fast Producer --sticky-load-balancing-with-fail-over--> Multi-Region Processors --> 
       Queue(FIFO based on order established by the producer) --> Multi-Region Consumers with fail-over

消费者不应该同时从同一个“队列”消费,但是,我们在这里不考虑缩放方面。如果复制和故障转移对一个“队列”运行良好,则即使在应用程序级别也可以应用分区,但需要付出相当大的努力。

想法:

你有没有在生产中部署过这样的“队列”,你会选择哪个?

标签: apache-kafkacassandraconfluent-platformrethinkdb

解决方案


Kafka 支持 2 种模式 Publish-Subscribe 和 Message Queue。有一些地方讨论了不同之处。这里

您所说的问题可以使用Kafka解决。FIFO 队列可以使用主题/分区/键消息来实现。具有相同键的所有消息将属于同一个分区,因此我们可以实现 FIFO 属性。如果您想增加消费吞吐量,您只需要增加每个主题的分区总数并增加消费者数量。

不过,其他队列(例如 RabbitMQ)并不容易。为了负载均衡工作负载,我们必须使用单独的队列,这增加了管理成本。

您可以在生产者端和消费者端实现多种交付语义,例如最多一次、至少一次、精确一次(字面意思)。Kafka 还支持多中心部署。


推荐阅读