JMS对Kafka在特定条件下

时间:2017-03-08 06:59:19

标签: jms apache-kafka

我正在阅读这两个概念。主要是卡夫卡。并与JMS进行比较以更好地理解。

Kafka保证订购交付和多个订户。卡夫卡如何实现它?

Kafka有多个分区。如果每个分区有一个消费者,那么我们可以保证订购。我们可以通过多个分区实现负载均衡。所以两者同时是可能的。

对于JMS,如果我们有多个队列,则与Kafka不同?

Q1:在这种情况下哪个更好?

第二季度:我是在眯着眼睛看?卡夫卡做的不仅仅是这个吗?

请告诉我。

即使我对JMS有误,也请告诉我。

2 个答案:

答案 0 :(得分:18)

我之前问过自己同样的问题:)

正如您所写,Kafka保证仅在单个分区内订购。期。如果您正在使用多个分区(这是必须具有并行性),那么监听多个分区的使用者可能会在来自分区2的消息B之前从分区1获取消息A,即使消息B首先到达

现在,关于Kafka和JMS之间的差异。在JMS中,您有一个队列,并且您有一个主题。对于队列,当第一个消费者消费消息时,其他消费者不再接受消息。通过主题,多个消费者可以收到每条消息,但扩展起来要困难得多。来自Kafka的消费者群体是这两个概念的概括 - 它允许在同一个消费者群体的成员之间进行缩放,但它也允许在许多不同的消费者群体之间广播相同的消息。

更重要的区别如下。想象一下,你有500个分区的Kafka主题,另一方面,有500个JMS消息队列。让我们想象一下,你有一定数量的生产者和消费者。在JMS的情况下,您需要配置它们中的每一个,以便它们知道哪些队列属于它们。如果是,例如一些消费者崩溃或你发现你需要增加消费者的数量?您必须手动重新配置整个系统。这与Kafka免费提供,即Kafka提供自动重新平衡,这是一个非常有用的功能。

最后,Kafka非常快,主要是因为一些聪明的磁盘/内存传输技术,并且因为消费者关心他们消费的消息,而不是JMS中的经纪人。正因为如此,消费者也能够倒带#34;即重新读取来自例如的消息。 2天前。

另见:

答案 1 :(得分:2)

这是一篇关于差异的相当好的文章: http://blog.hampisoftware.com/index.php/2016/01/20/apache-kafka-differences-from-jms/

Kafka不保证跨主题的多个分区的消息排序。订单仅在分区内维护。为了实现严格的排序,您需要为每个主题使用一个分区。