Kafka是否比RabbitMQ更好地处理网络故障?

时间:2015-06-30 18:50:36

标签: rabbitmq apache-kafka

我们从RabbitMQ遇到以下问题,并且每个周末都在手动重启服务器作为解决方法。

Network partition detected
Mnesia reports that this RabbitMQ cluster has experienced a network partition. This is a dangerous situation. RabbitMQ clusters should not be installed on networks which can experience partitions.

我们已经浏览了有关此主题的其他热门帖子,例如herehere

我们的网络不是很可靠,偶尔也会出现昙花一现但是当它确实出现时,我预计4节点RabbitMQ集群中的1个会加入集群的其余部分 - 就像安装在其上的4个Tomcat节点一样服务器

  1. 虽然单个分区上的节点继续独立运行,但似乎没有从一个节点中的故障中恢复正常。
  2. 我们使用rabbitmqctl之类的任何rabbitmqctl cluster_status命令并没有好运 - 它曾经偶尔导致rabbitmq进程挂起,需要对RabbitMQ进程进行sudo kill。
  3. 我们正在考虑迁移到Kafka或任何其他处理消息分区的消息代理

    对于不需要手动RabbitMQ重启或任何卡夫卡处理此类情况的能力的任何想法都非常感谢

1 个答案:

答案 0 :(得分:2)

我认为具有复制功能的Kafka应该能够非常轻松地处理网络分区,只要分区的代理数量低于您主题的复制因子(也就是说,消费者和生产者总是可以到达至少1个代理商)他们正在经营的主题。)

为了避免在Zookeeper发现分区并将信息传播给生产者和消费者时客户端出现背压,您可能需要设置简短的ZK心跳(是的,您需要ZK,并且因为您绝对需要群集不希望整个ZK集群分区。

公平警告:使用一组kafka代理会丢弃消息队列的FIFO方面,如果您期望生产者生成并由消费者阅读的消息顺序相同,这可能会非常令人不安。你可以期待RabbitMQ。