activemq和kafka

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014207606/article/details/83662467

1、activemq
 对于消息的传递有两种类型:

一种是点对点的,即一个生产者和一个消费者一一对应:

在这里插入图片描述

另一种是发布/ 订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收:

在这里插入图片描述

2、 kafka
每条发布到Kafka集群的消息都有一个类别,这个类别被称为topic,一个主题可以划分多个分区。
在这里插入图片描述
3、区别
一个分组中的消费者消费主题上的消息,类似于activemq的队列模式
1、当多个消费者监听同一个队列时,activemq随机将消息随机分配给一个消费者,消息只被一个消费者消费,但是不能保证消息的有序性,要想保证有序性,有两种方式:一是所有不同类型的消息发送到一个队列上,只有一个消费者;二是,不同的消息分别发送到不同的队列上,各队列对应一个消费者,这样可以提供效率,但是代码结构复杂,需要维护多个队列。
2、kafka的同一个分区只会被分配给一个消费者消费,且同一个分区的消息被按序处理
3、activemq无法保证消费者只被处理一次。当activemq挂了,没有收到消费者的应答消息时,会认为消息未被处理,重新给消费者处理。
4、kafka streams方式可以保证消息只被处理一次。
kafka streams中,kvstore、sink消息到kafka主题、kafka broker从消费者拉取offsert应答,三个操作是原子操作
当最后kafka broker拉取应答时,若kafka broker挂了,则kvstore、sink的操作都会回滚,从而保证只有一次消费

猜你喜欢

转载自blog.csdn.net/u014207606/article/details/83662467