Apache Kafka 是 JMS 的另一个 API 吗?

Is Apache Kafka another API for JMS?

Apache Kafka 不是 JMS 的另一个实现吗?

我正在我的应用程序中使用 JMS+AMQ,并正在迁移到 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

不,Kafka 使用自己的非标准协议和客户端。

但是,有第 3 方 JMS Client for Kafka from Confluent

其实两者并不相同。随着更多时间看到这两者共存 - 并听取现场部署人员的问题和快乐点 - 关于每一个都有更多要说的。

首先,JMS 支持 点对点 消息传递(消息发送给单个消费者;消费者自己维护他们的消息队列)和 发布和订阅 (pub/sub) 模型(消息写入单个主题,消费者独立决定消费哪些消息)。

在点对点消息传递体系结构中,消息生产者和消费者相互了解,而在 pub/sub 模型中他们并不了解。 Apache Kafka 专注于 pub/sub 模型,维护一个单独的 log/topic 消费者从中读取偏移量。 Kafka 也是built for the cloud以高吞吐量为核心考虑因素

我们社区和聚会中的许多人对 JMS 等 MOM(面向消息的中间件)感到沮丧,转而使用 Kafka,归结为一个原因:可伸缩性。他们认为 Kafka 比其他 MOM 更适合扩展,因为 Kafka 维护分区主题日志。这样,Kafka 就可以将消息流按分区拆分到消费者组中,并批量传输消息。

这个概念还允许 Kafka 对 Kafka 消费者的 ACL(访问控制)进行更精细的控制,尽管 Apache Pulsar 正在解决这些问题。

最后,在 Kafka 上,由于 client/consumer 决定要使用哪些消息(通过主题中的偏移量),这消除了 JMS 等 MOM 中内置路由规则的生产者端复杂性。

差异远不止于此,但这是对不断出现的一些差异的提炼!希望这可以帮助。