Apache Kafka 和 Camel 之间的区别(代理与集成)
Posted
技术标签:
【中文标题】Apache Kafka 和 Camel 之间的区别(代理与集成)【英文标题】:Difference Between Apache Kafka and Camel (Broker vs Integration) 【发布时间】:2018-06-24 09:13:46 【问题描述】:我试图了解像 Kafka 和像 Camel 这样的东西之间的区别。据我了解,Camel 将为开发人员提供更多的抽象,而不必担心在某种程度上改变协议/系统。卡夫卡怎么会无法处理骆驼现在可以做的大部分事情?我正在阅读文档,似乎 Kafka 已经更新/升级到足以稍微脱离仅作为消息代理的状态。我想我的问题真的可以归结为 Kafka 在未来的校对系统方面与 Camel 相比如何,以及 Kafka 在哪些方面不及 Camel?我的印象是 Kafka 不会随着系统的增长而扩展。
编辑:这严格基于消息。围绕 Camel 的文档清楚地表明它基于企业集成模式,但我深入研究 Kafka 文档,可以实现相同的模式。我错过了什么吗?
【问题讨论】:
【参考方案1】:它们是两个完全不同的东西。
将 Camel 视为一种接口定义工具,您可以在其中定义消息传入的端点或通道。但它们是抽象的。例如,比较 Camel 和 Spring Integration。
Kafka 可以提供这些消息,因此它可以实现这些抽象通道或端点。但 ActiveMQ 和其他人也可以。
【讨论】:
感谢您的回复。所以 Camel 是为了集中用于当前和未来的新系统集成?我假设你可以在某种程度上对 Kafka 做同样的事情,但它需要更多的工作而不是那么抽象?【参考方案2】:Apache Kafka:是一个流处理平台。它基于可大规模扩展的发布订阅消息队列架构。还有许多其他基于 JMS 发布订阅模型的平台,它们可以做同样的事情(有一些例外)。一些最受欢迎的是 Apache-Activemq、RabbitMq
Apache Camel:是一个面向消息的中间件。它实现了几乎所有的Enterprise Integration Patterns。
您可以将 Apache Camel 与 Apache Kafka 一起使用。或者你也可以在没有 Apache Camel 的情况下使用 Apache Kafka。
【讨论】:
所以,如果一个系统需要你有一些类似于 Kafka 的东西,并且你知道将来你很可能会集成其他东西,那么 Camel 与 Kafka 作为一个组件将是一个更合适的解决方案? 就个人而言,我会在任何企业项目中使用骆驼。它具有许多设计模式的实现。它与任何发布订阅模型完美融合。 感谢您的回复和帮助。不过,还有一个问题。 Kafka 是否“有能力”轻松处理消息转换? 我在阅读 NiFi 时偶然发现了我的解决方案。去搞清楚。 Kafka 并非旨在处理数据流挑战,例如数据丰富。 Apache Kafka 确实支持事务和数据丰富。见confluent.io/blog/transactions-apache-kafka 和confluent.io/blog/…【参考方案3】:Kafka 是一个消息代理。它可与 ActiveMQ、RabbitMQ、Azure Service Bus 等其他消息代理相媲美。Camel 是一种集成中间件。它与 Apache ServiceMix 更具可比性。
【讨论】:
【参考方案4】:看看事件驱动架构https://www.oreilly.com/library/view/software-architecture-patterns/9781491971437/ch02.html 的理论,我们可以根据是否需要事件中介来区分两种不同类型的事件驱动拓扑。
-
消息代理。在这个类别中,我们找到了 Kafka,因为它不依赖于消息中介。当然,正如之前的答案所写,我们可以根据需要将 Kafka 与中介一起使用。
消息中介。在这个类别中,我们发现像骆驼这样的产品。您可以将其视为消息控制器。
【讨论】:
以上是关于Apache Kafka 和 Camel 之间的区别(代理与集成)的主要内容,如果未能解决你的问题,请参考以下文章
Apache Camel Kafka 连接器:以 Avro 格式写入 GCS
使用 Apache Camel Source 从 S3 到 Kafka
Camel-Kafka java.io.EOFException - NetworkReceive.readFromReadableChannel