首页 > 解决方案 > Kafka 与 ActiveMQ 的完整性保证?

问题描述

我发现比较 Apache Kafka 和 ActiveMQ(以及类似的消息队列产品)的信息从未清楚地说明每个解决方案的完整性属性(尤其是一致性)。

使用 Kafka,您可以保证即使出现故障也不会丢失任何消息。您是否失去了使用“LazyPersistence”选项的保证?

“无丢失”是指消息对客户端可用,即使在重新启动后失败 - 理想情况下,所有消息都以正确的顺序到达客户端。

ActiveMQ(“经典”或 Artemis)是否保证在失败时不会丢失消息?任何可以提供保证的配置选项?如果“经典”与 Artemis 的答案会有所不同,那会很高兴知道。

标签: apache-kafkaactivemq

解决方案


使用 Kafka,即使出现故障,您也可以保证不会丢失任何消息;我猜你使用“LazyPersistence”选项失去了保证,对吗?

这是一个很大的话题。

保证没有消息丢失

这取决于几件事。首先,您可以配置保留 - 在您可以丢失消息的特定时间段之后。您可能会考虑无限保留,但也要注意您有足够的存储空间,也许您需要压缩主题?

即使出现故障;我猜你使用“LazyPersistence”选项失去了保证,对吗?

Kafka是一个分布式系统,分布式系统比同步磁盘写入更多地依赖分布式复制是很常见的。即使您将同步写入磁盘 - 磁盘也可能会死掉并丢失。您希望在多大程度上使用分布式复制(例如 3 或 6 个副本?)以及同步异步磁盘写入取决于您的要求 - 但它也需要在吞吐量方面进行权衡。例如, AWS Aurora是一个使用 6 个副本的分布式数据库。


推荐阅读