Apache Kafka 和 JMS 之间的连接

Posted

技术标签:

【中文标题】Apache Kafka 和 JMS 之间的连接【英文标题】:Connection between Apache Kafka and JMS 【发布时间】:2016-05-01 15:48:32 【问题描述】:

我想知道 Apache Kafka 能否与 JMS 通信并向 JMS 发送消息?我可以在它们之间建立联系吗?例如,我在我的系统中使用 JMS,它应该向使用 Kafka 的其他系统发送消息

【问题讨论】:

你的意思是不用编码? @ShawnGuo 是的,只发送请求等 @BohdanMyslyvchuk 假设它还不存在 - issues.apache.org/jira/browse/KAFKA-1995 【参考方案1】:

回答有点晚,但如果我理解正确的话。

如果要求是同步消息来自 客户端->JMS->Kafka ---> 消费者 那么以下不是解决方案,但如果它(并且很可能)是异步要求,例如:

客户端->JMS | ----> Kafka ---> 消费者

那么,这将与 KafkaConnect 框架有关,该框架正在解决如何将不同的源和接收器与 Kafka 集成的问题。

http://docs.confluent.io/2.0.0/connect/ http://www.confluent.io/product/connectors

所以你需要一个 JMSSourceConnector。

【讨论】:

我在 Confluent 页面上没有看到关于 JMSSourceConnector 的任何文档,它是默认可用的还是我们需要为此编写自定义类?【参考方案2】:

如果要求与上一个答案相反:

Kafka 生产者 -> Kafka 代理 -> JMS 代理 -> JMS 消费者

那么您将需要一个来自 Data Mountaineer 的 KafkaConnect Sink,如下所示

http://docs.datamountaineer.com/en/latest/jms.html

【讨论】:

Confluent 现在在 Confluent Enterprise 3.2 发行版中提供了一个 JMS 客户端。【参考方案3】:

不直接。而这两者是无法比拟的概念。 JMS 是消息服务的供应商中立 API 规范。

虽然 Kafka 可能被归类为消息传递服务,但它与 JMS API 不兼容,而且据我所知,没有任何简单的方法可以在不做出重大妥协的情况下调整 JMS 以适应 Kafka 的用例。

但是,如果您的需求只是在 Kafka 和符合 JMS 的代理之间移动消息,那么这可以通过编写一个简单的中继应用程序来轻松实现,该应用程序从一个应用程序消费并发布到另一个应用程序,或者使用类似 Kafka Connect,它为大多数数据源(包括 JMS 代理、数据库等)预先设置了接收器。

【讨论】:

以上是关于Apache Kafka 和 JMS 之间的连接的主要内容,如果未能解决你的问题,请参考以下文章

将 JMS 客户端连接到 Apache Kafka

Kafka--kafka基础知识

如何在 Apache Camel 中检测损坏/恢复的 JMS 连接?

消息队列之kafka(基础介绍)

kafka消息中间键

RabbitMQ小结