Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 什么时候在卡夫卡上使用RabbitMQ?_Apache Kafka_Rabbitmq_Message Queue - Fatal编程技术网

Apache kafka 什么时候在卡夫卡上使用RabbitMQ?

Apache kafka 什么时候在卡夫卡上使用RabbitMQ?,apache-kafka,rabbitmq,message-queue,Apache Kafka,Rabbitmq,Message Queue,我被要求评估RabbitMQ而不是Kafka,但发现很难找到消息队列比Kafka更合适的情况。有人知道消息队列在吞吐量、持久性、延迟或易用性方面更适合的用例吗?RabbitMQ是一种可靠的通用消息代理,支持多种协议,如AMQP、MQTT、STOMP等。它可以处理高吞吐量。RabbitMQ的一个常见用例是处理后台作业或长时间运行的任务,如图像缩放或PDF转换。RabbitMQ还用于微服务之间,它作为应用程序之间通信的一种手段,避免了传递消息的瓶颈 Kafka是一种消息总线,针对高通量摄取数据流和回

我被要求评估RabbitMQ而不是Kafka,但发现很难找到消息队列比Kafka更合适的情况。有人知道消息队列在吞吐量、持久性、延迟或易用性方面更适合的用例吗?

RabbitMQ是一种可靠的通用消息代理,支持多种协议,如AMQP、MQTT、STOMP等。它可以处理高吞吐量。RabbitMQ的一个常见用例是处理后台作业或长时间运行的任务,如图像缩放或PDF转换。RabbitMQ还用于微服务之间,它作为应用程序之间通信的一种手段,避免了传递消息的瓶颈

Kafka是一种消息总线,针对高通量摄取数据流和回放进行了优化。如果需要移动大量数据、实时处理数据或分析一段时间内的数据,请使用Kafka。换句话说,就是需要收集、存储和处理数据的地方。一个例子是,当您想要跟踪网店上的用户活动并生成建议购买的商品时。另一个例子是用于跟踪、摄取、记录或安全的数据分析

Kafka可以看作是一个持久的消息代理,应用程序可以在其中处理和重新处理磁盘上的流数据。卡夫卡有一个非常简单的路由方法。如果需要以复杂的方式将消息路由到用户,RabbitMQ有更好的选项。如果您需要支持可以脱机的批处理消费者或希望以低延迟发送消息的消费者,请使用Kafka

为了理解如何从卡夫卡读取数据,我们首先需要了解卡夫卡的消费者和消费者群体。分区允许您通过在多个节点上拆分数据来并行化主题。分区中的每个记录都由其唯一的偏移量分配和标识。此偏移量指向分区中的记录。在最新版本的Kafka中,Kafka为分区中的每条记录维护一个数字偏移量。Kafka中的使用者可以定期自动提交偏移量,也可以选择手动控制此提交位置。RabbitMQ将保留有关已使用/已确认/未确认消息的所有状态。我发现Kafka比RabbitMQ更难理解,在RabbitMQ中,消息一经确认就从队列中删除

RabbitMQ的队列为空时速度最快,而Kafka以极少的开销保留了大量的数据—Kafka设计用于保存和分发大量的消息。(如果您计划在RabbitMQ中有很长的队列,您可以查看。)

Kafka从头开始构建,考虑到水平扩展(通过添加更多机器来扩展),而RabbitMQ主要是为垂直扩展而设计的(通过添加更多电源来扩展)

RabbitMQ具有内置的用户友好界面,允许您从web浏览器监视和处理RabbitMQ服务器。除此之外,还可以处理队列、连接、频道、交换、用户和用户权限—在浏览器中创建、删除和列出,您可以监控邮件速率并手动发送/接收邮件。卡夫卡有很多功能,提供管理和监控功能。我想说,更好地理解RabbitMQ更容易/更快

一般来说,如果您想要一个简单的/传统的pub-sub消息代理,最明显的选择是RabbitMQ,因为它很可能比您需要它扩展的规模更大。如果我的需求足够简单,可以通过通道/队列处理系统通信,并且不需要保留和流式传输,那么我会选择RabbitMQ

有两种主要情况下我会选择RabbitMQ;对于长时间运行的任务,当我需要运行可靠的后台作业时。以及应用程序内部和应用程序之间的通信和集成,即作为微服务之间的中间人;系统只需通知系统的另一部分就可以开始执行任务,比如在网店中处理订单(下单、更新订单状态、发送订单、付款等)

一般来说,如果您想要一个用于存储、读取(重读)和分析流数据的框架,请使用Apache Kafka。它非常适合于经过审计的系统或需要永久存储消息的系统。这些还可以分解为两个主要用例,用于分析数据(跟踪、摄取、日志记录、安全性等)或实时处理

更多阅读、用例和一些比较数据可在此处找到:

还推荐行业论文:“Kafka与RabbitMQ:两种行业参考发布/订阅实现的比较研究”:


我确实在一家同时提供ApacheKafka和RabbitMQ服务的公司工作。

我每周都会听到这个问题。。。RabbitMQ(如IBM MQ或JMS或其他一般消息传递解决方案)用于传统消息传递,而Apache Kafka则用作流式平台(消息传递+分布式存储+数据处理)。两者都是为不同的用例而构建的

您可以将Kafka用于“传统消息传递”,但不能将MQ用于Kafka特定的场景


这篇文章“Apache Kafka vs.Enterprise Service Bus(ESB)-朋友、敌人或朋友?()”讨论了为什么Kafka不是竞争对手,而是对集成和消息传递解决方案(包括RabbitMQ)的补充,以及如何将两者集成。

我能想到的唯一好处是事务性功能,rest都可以通过使用Kafka来完成,这两种方法在分布式容错方式下都很难扩展,但我认为在大规模使用RabbitMQ时要困难得多。了解电铲、联邦、镜像消息队列、ACK、Mem问题、容错性等并非易事。更不用说,Zookeeper e也不会有具体问题