在讨论Kafka和RabbitMQ之间的差异时,“哑经纪人”和“智能经纪人”在与消费者的互动中不断涌现。 Kafka被描述为拥有一个愚蠢的经纪人,而据说RabbitMQ拥有一个聪明的经纪人/愚蠢的消费者模式。
这究竟是什么意思?我熟悉Kafka的基础知识以及关于RabbitMQ的更多信息。但是,RabbitMQ的哪些特性使得经纪人比Kafka更聪明?
答案 0 :(得分:7)
这个问题一直困扰着我:)这是我到目前为止所理解的......
在RabbitMQ的情况下,代理确保将消息传递给消费者,并且只有当消息得到所有需要该消息的消费者的确认时才将其出列。它还跟踪消费者状态。
Kafka没有跟踪“消费者阅读了哪些消息”。 Kafka代理将所有消息保留在队列中一段固定的时间,消费者有责任从队列中读取消息。它也没有跟踪消费者状态的开销操作。
您可以在这篇比较RabbitMQ和Kafka的Pivotal blog帖子中详细了解它。
答案 1 :(得分:0)
哑vs智能代理意味着代理可以很聪明地根据某些条件路由消息。
对于RabbitMQ,生产者将消息发送到Exchange,Exchange将消息路由到Queue。在这里,“ Exchange”进行路由,这就是所谓的智能代理。再次,人们使经纪人变得非常聪明,并最终获得了ESB,我们都知道发生了什么,并且行业正在远离膨胀的ESB。
对于Kafka,代理不会路由邮件。用户可以创建主题和消费者组,并决定哪个消费者组听哪个主题。
Smart vs Dumb代理与消息确认无关。对于RabbitMQ,它会跟踪每条消息的状态以查看其是否为使用者。就Kafka而言,它的发生是不同的,但在分区上使用了偏移量,偏移量存储在Kafka本身中(消费者也可以存储)。但是两者都提供功能。
答案 2 :(得分:-1)
关于Kafka使用哑代理,而Rabbit MQ使用智能代理的观点是决定使用哪种消息系统的要点之一。因为RabbitMQ是一个聪明的经纪人,所以与Kafka相比,实施全球重试策略要容易得多,并且听众不可知。
考虑到通过API网关访问的一组微服务,我相信以上几点,再加上Rabbit MQ的可维护性强得多,以及跨微服务传递的数据永远不会像流数据,使Rabbit MQ成为Kafka跨服务通信的更好选择