Apache Camel与Apache Kafka比较

18
据我所知,Apache Kafka是一种异步消息平台,而Apache Camel是一种实现企业集成模式的平台。
那么,Apache Camel和Apache Kafka有哪些实际区别呢?我们计划使用相对较易的Camel来实现系统,但客户方却没有理性地要求改用Apache Kafka。
选择使用Apache Kafka实现消息队列功能会有哪些优势?即使可以使用Apache Camel来实现,我担心Kafka只会给项目带来不必要的开销。我们是在比较苹果和橙子吗?
我们需要简单直观的API来设置和使用集群消息队列。最初的计划是使用Camel来消费/生产集群JMS或ActiveMQ队列。Kafka如何使这项任务变得更加容易?无论哪种情况下,应用本身都将在WebLogic服务器上运行。
消息传递将采用点对点类型,在同一服务的多个实例运行时,只有一个实例应根据负载平衡策略处理消息并发出结果。消息队列也是集群化的,因此服务实例或队列实例失效都不是单点故障。
2个回答

11

Camel和Kafka完全是两回事。在许多用例中,Camel通常只用作Kafka/ActiveMQ/...的客户端。

Kafka和ActiveMQ相似但也有所不同,请参见Apache Kafka vs ActiveMQ的区别。Kafka具有更高的吞吐量,并且数据始终在磁盘上,因此比ActiveMQ更可靠。

Kafka通常用于实时数据流处理,而一般情况下ActiveMQ主要用于应用程序之间的集成,书中如是说。但在大多数实际情况下,Kafka和ActiveMQ可以轻松替换彼此。


2
很难比较这两个。它们涵盖的工作领域不同,但有些系统可以用一个替换另一个。 简而言之,Kafka是一种具有流处理能力的消息平台(详见Apache Kafka)。Camel是一种ETL框架,可以从“任何”输入点转换消息、事件、数据,并将其发送到“任何”输出点(详见Apache Camel - Enterprise Integration Patterns)。您可以完全不使用Kafka或Camel,也可以成功地将两者结合使用。(案例1:您处理邮件并存储在PostgreSQL数据库中。Kafka在这里无用。案例2:您处理来自ActiveMQ的消息并将其发送到Kafka。您可以同时使用两者。)

1
那么,Kafka是否适合于通信,其中许多服务实例侦听消息,但只有一个应该处理它(即在接收后从队列中删除)?因此,基本上这是点对点通信的一种形式,涉及群集化的服务和队列。 - Tuomas Toivonen
2
这并不仅限于一个消费者可以处理它。这取决于设置。有两个选项:Kafka将充当负载均衡器(一个消息发送到多个消费者中的一个),而Kafka也将充当复制程序(一个消息发送到定义的一组消费者中的所有消费者)。并且,作为Kafka需要broker,因此这不是点对点传输。 - Seweryn Habdank-Wojewódzki
Camel不是ETL,它是EIP实现。 - ACV
@ACV,你如何定义ETL(抽取、转换和加载),你说Camel不是ETL。顺便说一句,我已经声明Camel是ETL框架而不是ETL本身。 - Seweryn Habdank-Wojewódzki
@SewerynHabdank-Wojewódzki Camel 作为 EIP 实现可以用于 ETL,但是 ETL 是一个非常广泛的术语。我认为 Camel 并没有被宣传为 ETL 工具。 - ACV

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接