【发布时间】:2015-08-07 20:26:46
【问题描述】:
Apache Kafka 不是JMS 的另一个实现吗?
我在我的应用程序中使用JMS+AMQ,并迁移到Apache Kafka。我必须更改所有JMS 代码吗?
【问题讨论】:
标签: migration apache-kafka jms
Apache Kafka 不是JMS 的另一个实现吗?
我在我的应用程序中使用JMS+AMQ,并迁移到Apache Kafka。我必须更改所有JMS 代码吗?
【问题讨论】:
标签: migration apache-kafka jms
不,Kafka 不同于 ActiveMQ 等 JMS 系统。 见ActiveMQ vs Apollo vs Kafka
Kafka 的功能比 ActiveMQ 少,因为重点放在了性能上。因此在迁移之前,请检查您在 AMQ 中使用的功能是否在 Kafka 中。
但是,有一个公开的建议是在 JMS 和 Kafka 之间架起一座桥梁,以完全满足您的需求。也许提供的链接可以帮助你 https://issues.apache.org/jira/browse/KAFKA-1995
【讨论】:
其实两者并不相同。再多花一点时间看看这两者共存 - 并听取在现场部署每一个的问题和快乐点 - 关于每一个都有更多要说的。
首先,JMS 支持 点对点 消息传递(消息发送给单个消费者;消费者自己维护他们的消息队列)和 发布和订阅(发布/订阅)模型(其中消息被写入单个主题,消费者独立决定使用哪些消息)。
在点对点消息传递架构中,消息生产者和消费者相互了解,而在发布/订阅模型中,他们不知道。 Apache Kafka 专注于 pub/sub 模型,维护一个单独的日志/主题,消费者从中读取偏移量。 Kafka 也是 built for the cloud,以高吞吐量为核心考虑。
我们社区和聚会上的许多人对 JMS 之类的 MOM(面向消息的中间件)感到沮丧并转而使用 Kafka,原因归结为一个原因:可扩展性。他们认为 Kafka 比其他 MOM 更适合扩展,因为 Kafka 维护一个分区的主题日志。这样,Kafka 可以通过分区将消息流拆分到消费者组并批量传输消息。
这个概念还允许 Kafka 对 Kafka 消费者的 ACL(访问控制)进行更精细的控制,尽管 Apache Pulsar 正在解决其中的一些问题。
最后,在 Kafka 上,由于客户端/消费者决定使用哪些消息(通过主题中的偏移量),这消除了一些生产者端的复杂性,这些路由规则内置于 JMS 等 MOM 中。
还有更多不同之处,但这是对一些不断出现的差异的提炼!希望这可以帮助。
【讨论】:
不,Kafka 使用自己的非标准协议和客户端。
但是,有一个第三方JMS Client for Kafka from Confluent。
【讨论】: